本文介绍c#的日志插件NLog
安装插件
创建logger
日志级别
书写日志信息
配置
包装器
布局
-
直接下载插件包 Install-Package NLog.Config
-
使用LogManager创建Logger实例,最好一个类里面一个Logger实例 写法一 这种写法,记录的日志文件,显示的logger名字,是命名空间加上logger所在类的类名,如 ConsoleApp1.Program private static Logger mylogger = LogManager.GetCurrentClassLogger(); 写法二 这种写法,可以手动设置日志文件中的logger名字 Logger mylogger = LogManager.GetLogger("myTest");
-
级别由低到高 Trace 记录完整的信息,一般只用在开发环境 Debug 记录调试信息,没有Trace信息完整,一般也只用在开发环境 Info 简单的信息,一般用在生产环境 Warn 记录警告信息,一些可以解决的小问题 Error 记录报错信息,一般都是Exceptions信息 Fatal 非常严重的错误信息
-
logger.Trace("Sample trace message"); logger.Debug("Sample debug message"); logger.Info("Sample informational message"); logger.Warn("Sample warning message"); logger.Error("Sample error message"); logger.Fatal("Sample fatal error message"); 或者使用 logger.Log(LogLevel.Info, "Sample informational message"); 支持格式化 mylogger.Fatal("Sample {0} error message", "fetal"); 尽量使用NLog内置的格式化工具,NLog做了优化工作
-
最基础的配置 第一步,打开NLog.config配置文件,添加如下配置 <targets> <target name="logfile" xsi:type="File" fileName="file.txt" /> // 创建一个target,代表输出日志文件的配置 </targets> <rules> <logger name="*" minlevel="Info" writeTo="logfile" /> // 设置Info级别以上的日志,才能够输入到什么名为logfile的target当中 /* 1.这里logger自己还有一个name,这个name对应类名,也就是说什么样的类名可以输出日志,如ConsoleApp1.Program 2.可以添加final="true"属性,表示后面的所有针对此指定名字的logger都无效 */ </rules> 第二步,运行代码即可 多target配置 <targets> <target name="logfile" xsi:type="File" fileName="file.txt" /> <target name="console" xsi:type="Console" /> // 创建一个target表示用控制台输出日志信息 </targets> <rules> <logger name="*" minlevel="Trace" writeTo="logfile" /> <logger name="*" minlevel="Info" writeTo="console" /> // 将Info级别以上的配置信息输出到名为console的target中 </rules>
-
异步包装器配置 <targets> <target name="asyncFile" xsi:type="AsyncWrapper"> <target name="logfile" xsi:type="File" fileName="file.txt"/> </target> </targets> <rules> <logger name="*" minlevel="Trace" writeTo="asyncFile"/> </rules> 还有很多包装器,按需自查
-
布局是用来格式化日志输出信息的 simple日志格式化 <target name="logfile" xsi:type="File" fileName="file.txt" layout="${date:format=yyyyMMddHHmmss} ${message} ${counter:increment=3:sequence=Layout:value=5}"/> 还有很多格式化写法,自行查阅
-
public class Demo1 { protected Logger Log { get; set; } protected Demo1() { Log = LogManager.GetLogger(GetType().FullName); } } public class Demo2: Demo1 { public Demo2():base() { } }