Asp.net Core中使用NLog,并封装成公共的日志方法
2016-11-26 21:50
1266 查看
1、安装NLog
"NLog.Extensions.Logging": "1.0.0-rtm-alpha4"
2、配置NLog
3、nlog.config
NLog的异常等级:Trace -》Debug-》 Information -》Warning-》 Error-》 Critical
注意配置文件中可以移除Microsoft和System开头的组件输出的日志,不然日志会非常多
NLog的更多配置请参考:https://github.com/NLog/NLog/wiki/Callsite-layout-renderer
4、封装成公共方法
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()); } }}
"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()); } }}
相关文章推荐
- EF Core使用SQL调用返回其他类型的查询 ASP.NET Core 2.0 使用NLog实现日志记录 CSS 3D transforms cSharp:use Activator.CreateInstance with an Interface? SqlHelper DBHelper C# Thread.Abort方法真的让线程停止了吗? 注意!你的Thread.Abort方法真
- Asp.Net Core 2.0 之旅---NLog日志的使用教程
- ASP.NET Core 2.0 使用NLog实现日志记录
- 使用NLog给Asp.Net Core做请求监控的方法
- ASP.NET Core 开发-Logging 使用NLog 写日志文件
- ASP.NET Core 开发-Logging 使用NLog 写日志文件
- [转]ASP.NET Core 开发-Logging 使用NLog 写日志文件
- ASP.NET Core使用NLog记录日志到Microsoft Sql Server
- ASP.NET core Web中使用appsettings.json配置文件的方法
- ASP.NET Core 添加NLog日志支持(VS2015update3&VS2017)
- ASP.NET Core 添加日志NLog
- 解析Asp.net Core中使用Session的方法
- ASP.NET学习CORE中使用Cookie身份认证方法
- ASP.NET Core 2.0系列学习笔记-NLog日志配置文件
- Asp.Net Core 2.0 项目实战(9) 日志记录,基于Nlog或Microsoft.Extensions.Logging的实现及调用实例
- C#编译器优化那点事 c# 如果一个对象的值为null,那么它调用扩展方法时为甚么不报错 webAPI 控制器(Controller)太多怎么办? .NET MVC项目设置包含Areas中的页面为默认启动页 (五)Net Core使用静态文件 学习ASP.NET Core Razor 编程系列八——并发处理
- Asp.Net Core 2.0 项目实战(6)Redis配置、封装帮助类RedisHelper及使用实例
- Asp.Net Core IIS发布后PUT、DELETE请求错误405.0 - Method Not Allowed 因为使用了无效方法(HTTP 谓词)
- asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程
- Asp.Net Core使用NLog+Mysql的几个小问题