Asp.net Core中使用NLog,并封装成公共的日志方法
1、安装NLog
"NLog.Extensions.Logging": "1.0.0-rtm-alpha4"
2、配置NLog
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();
//配置NLog
loggerFactory.AddNLog();
env.ConfigureNLog("nlog.config"); app.UseApplicationInsightsRequestTelemetry();
3、nlog.config
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
autoReload="true"
throwConfigExceptions="true"
internalLogLevel="Debug"
internalLogToTrace="true"> <targets>
<target name="logfile"
xsi:type="File"
fileName="logs/${shortdate}.log"
layout="${longdate} [${level:uppercase=true}] ${callsite:className=true:methodName=true:skipFrames=1} ${message} ${exception} @${callsite:fileName=true:includeSourcePath=true}" />
<target name="console"
xsi:type="ColoredConsole"
layout="${longdate} [${level:uppercase=true}] ${callsite:className=true:methodName=true:skipFrames=1} ${message} ${exception} @${callsite:fileName=true:includeSourcePath=true}"/>
<target xsi:type="Null" name="blackhole" />
</targets> <rules>
<!-- 除非调试需要,把 .NET Core 程序集的 Debug 输出都屏蔽 Trace -》Debug-》 Information -》Warning-》 Error-》 Critical-->
<logger name="Microsoft.*" minLevel="Trace" writeTo="blackhole" final="true" />
<!-- 除非调试需要,把系统的 Debug 输出都屏蔽 -->
<logger name="System.*" minLevel="Trace" writeTo="blackhole" final="true" /> <logger name="*" minlevel="Debug" writeTo="logfile,console" />
</rules>
</nlog>
NLog的异常等级:Trace -》Debug-》 Information -》Warning-》 Error-》 Critical
注意配置文件中可以移除Microsoft和System开头的组件输出的日志,不然日志会非常多
NLog的更多配置请参考:https://github.com/NLog/NLog/wiki/Callsite-layout-renderer
4、封装成公共方法
using NLog;
using System;
using System.Diagnostics; namespace UFX.Tools
{
public class LogHelper
{
private static readonly Logger log = LogManager.GetLogger("");
public static void Error(object msg, Exception exp = null)
{
if (exp == null)
log.Error("#" + msg);
else
log.Error("#" + msg + " " + exp.ToString());
} public static void Debug(object msg, Exception exp = null)
{
if (exp == null)
log.Debug("#" + msg);
else
log.Debug("#" + msg + " " + exp.ToString());
} public static void Info(object msg, Exception exp = null)
{
if (exp == null)
log.Info("#" + msg);
else
log.Info("#" + msg + " " + exp.ToString());
} public static void Warn(object msg, Exception exp = null)
{
if (exp == null)
log.Warn("#" + msg);
else
log.Warn("#" + msg + " " + exp.ToString());
}
}
}
5、其他方法中使用直接LogHelper.Debug("")等即可
但你会发现日志输出的方法中,所有异常都来自Tools.LogHelper,这样就不能准确的返回异常的方法,代码位置了,在.Net Core之前的版本中,我们可以通过StackFrames来找到调用方法,但是.Net Core这个方法不管用了。
好在NLog已经为我们考虑到这个问题了,配置文件中直接可以定义需要打印的方法名称,需要网上寻找的Frame个数
${callsite:className=true:methodName=true:skipFrames=1}
更多配置请参考:https://github.com/NLog/NLog/wiki/Callsite-layout-renderer
using NLog;using System;using System.Diagnostics;
namespace UFX.Tools{ public class LogHelper { private static readonly Logger log = LogManager.GetLogger(""); public static void Error(object msg, Exception exp = null) { if (exp == null) log.Error("#" + msg); else log.Error("#" + msg + " " + exp.ToString()); }
public static void Debug(object msg, Exception exp = null) { if (exp == null) log.Debug("#" + msg); else log.Debug("#" + msg + " " + exp.ToString()); }
public static void Info(object msg, Exception exp = null) { if (exp == null) log.Info("#" + msg); else log.Info("#" + msg + " " + exp.ToString()); }
public static void Warn(object msg, Exception exp = null) { if (exp == null) log.Warn("#" + msg); else log.Warn("#" + msg + " " + exp.ToString()); } }}
Asp.net Core中使用NLog,并封装成公共的日志方法的更多相关文章
- ASP.NET Core:ASP.NET Core中使用NLog记录日志
一.前言 在所有的应用程序中,日志功能是不可或缺的模块,我们可以根据日志信息进行调试.查看产生的错误信息,在ASP.NET Core中我们可以使用log4net或者NLog日志组件来实现记录日志的功能 ...
- Asp.Net Core中使用NLog记录日志
2019/10/28, Asp.Net Core 3.0, NLog 4.6.7, NLog.Web.AspNetCore 4.9.0 摘要:NLog在asp.net网站中的使用,NLog日志写入数据 ...
- 在asp.net core中使用NLog
第一步:nuget 引入 NLog.Web.AspNetCore 4.5+ 第二步:放入nlog.config <?xml version="1.0" encoding= ...
- 如何在ASP.NET Core 中使用IHttpClientFactory
利用IHttpClientFactory可以无缝创建HttpClient实例,避免手动管理它们的生命周期. 当使用ASP.Net Core开发应用程序时,可能经常需要通过HttpClient调用Web ...
- NLog在asp.net core中的应用
Asp.net core中,自带的Log是在当selfhost运行时,在控制台中输出,不便于查阅,如果用一个log架框,把日志持久化,便于查询. NLog是一个免费的日志记录框架,专门为.net平台下 ...
- ASP.NET Core 中的日志记录
目录 内置日志的使用 使用Nlog 集成ELK 参考 内置日志的使用 Logger 是 asp .net core 的内置 service,所以我们就不需要在ConfigureService里面注册了 ...
- ASP.NET Core中的依赖注入(4): 构造函数的选择与服务生命周期管理
ServiceProvider最终提供的服务实例都是根据对应的ServiceDescriptor创建的,对于一个具体的ServiceDescriptor对象来说,如果它的ImplementationI ...
- ASP.NET Core 中文文档 第三章 原理(1)应用程序启动
原文:Application Startup 作者:Steve Smith 翻译:刘怡(AlexLEWIS) 校对:谢炀(kiler398).许登洋(Seay) ASP.NET Core 为你的应用程 ...
- ASP.NET Core中使用Razor视图引擎渲染视图为字符串
一.前言 在有些项目需求上或许需要根据模板生产静态页面,那么你一样可以用Razor语法去直接解析你的页面从而把解析的页面生成静态页,这样的使用场景很多,不限于生成静态页面,视图引擎为我们提供了模型到视 ...
随机推荐
- 3.SRS文档
1.功能需求 本程序的使用者为局域网用户.程序实现的主要功能是局域网的常见格式的文件的传 输.其用例图如图1.本程序可通过可视化操作界面实现一对多的文件传输. 1.1模块分析 为实现局域网文件传输, ...
- Android开发学习总结(五)——Android应用目录结构分析
一.手动创建android项目 手动创建一个Android项目,命名为HelloWorld,命令如下: android create project -n HelloWorld -t -p E:/An ...
- Oracle 查询用户和删除用户
------------------------------- 一.查询用户命令: select username from dba_users; 示例: 二.删除用户命名: drop user 用户 ...
- 往linux上传、下载
http://skypegnu1.blog.51cto.com/8991766/1538371
- 秀才提笔忘了字:javascript使用requestAnimationFrame实现动画
requestAnimationFrame优于setTimeout/setInterval的地方在于它是由浏览器专门为动画提供的API,在运行时浏览器会自动优化方法的调用,并且如果页面不是激活状态下的 ...
- LINQ-to-SQL那点事~LINQ-to-SQL中的并发冲突与应对
回到目录 在上一篇文章中提到了并发冲突,还说详细的说明在这讲来说,呵呵,那现在就说一下吧! 并发冲突产生的原因 事实上,linq to sql中的并发冲突是指记录在进行update操作时,客户端A1取 ...
- H5常用代码:适配方案1
在工作中接到H5项目,第一件想到的事就应该是屏幕适配问题,解决了屏幕适配,接下来的事才能真正开始.从此篇博客开始会连续记录下我经常用到的一些适配方案. 对于传统的PC项目,直接在移动端打开也都是会以视 ...
- paip.刮刮卡砸金蛋抽奖概率算法跟核心流程.
paip.刮刮卡砸金蛋抽奖概率算法跟核心流程. #---抽奖算法需要满足的需求如下: 1 #---抽奖核心流程 1 #---问题???更好的算法 2 #---实际使用的扩展抽奖算法(带奖品送完判断和每 ...
- iOS-APP发布应注意要点
Android和IOS的app发布的流程有一个相同之处,就是都需要先将编译好的app签名,然后上传到market里,但两者的复杂度是冰火两重天.Android可以手动通过集成在eclipse里的工具进 ...
- Velocity模板引擎入门
类似于PHP中的Smarty,Velocity是一个基于Java的模板引擎(template engine).它允许任何人仅仅简单的使用模板语言(template language)来引用由java代 ...