转载

NLog 详解(一)

安装NLog

NLog 的源代码托管在Github 上,一般的人直接使用NuGet就可以了。

NLog 详解(一)

这里我们选择安装NLog.Config。当然最方便的还是直接使用命令行:

Install-Package NLog.Config

Logger

Logger是最常用的类,推荐每个class都创建一个私有的静态实例。

class Program {     private static Logger logger = LogManager.GetCurrentClassLogger();     static void Main(string[] args)     {      } }

上面的代码将会以类名作为Logger实例的名字。等同于下面的方式:

 Logger logger = LogManager.GetLogger("Program"); 

当然,logger是线程安全的。

Log levels

这里不是简单的枚举实现。

NLog 详解(一)

日志使用

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");  int k = 42; int l = 100;  logger.Trace("Sample trace message, k={0}, l={1}", k, l); logger.Debug("Sample debug message, k={0}, l={1}", k, l); logger.Info("Sample informational message, k={0}, l={1}", k, l); logger.Warn("Sample warning message, k={0}, l={1}", k, l); logger.Error("Sample error message, k={0}, l={1}", k, l); logger.Fatal("Sample fatal error message, k={0}, l={1}", k, l); logger.Log(LogLevel.Info, "Sample informational message, k={0}, l={1}", k, l); 

由于性能原因,这里推荐使用logger自带的参数化格式字符串,而不是自己手动去拼接(string.format或者concat)。具体原因是因为格式化字符串会有性能损失,nlog 内部会延迟格式化字符串。只有当真正需要输出字符串的时候才去做。某些配置可以忽略日志的情况下,可以省去格式字符串的性能损耗。

Configuration

最简单的配置:

<?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">  <targets>   <target name="logfile" xsi:type="File" fileName="file.txt" />  </targets>  <rules>   <logger name="*" minlevel="Info" writeTo="logfile" />  </rules> </nlog>  

设置多个Targets

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">  <targets>   <target name="logfile" xsi:type="File" fileName="file.txt" />   <target name="console" xsi:type="Console" />  </targets>  <rules>   <logger name="*" minlevel="Trace" writeTo="logfile" />   <logger name="*" minlevel="Info" writeTo="console" />  </rules> </nlog> 

指定logger name

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">  <targets>   <target name="logfile" xsi:type="File" fileName="file.txt" />  </targets>  <rules>   <logger name="SomeNamespace.Component.*" minlevel="Trace" writeTo="logfile" final="true" />   <logger name="*" minlevel="Info" writeTo="logfile" />  </rules> </nlog> 

Layouts

<target name="logfile" xsi:type="File" fileName="file.txt" layout="${date:format=yyyyMMddHHmmss} ${message}" />

Layout 分为简单的和格式化的。简单的Layout 如上所示就是定制输出的string 格式,结构化的Layout可以输出XML,CSV...

Wrappers

Wrappers 本身不做任何log的事情,只是修改logger 的行为。

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">  <targets>   <target name="asyncFile" xsi:type="AsyncWrapper">    <target name="logfile" xsi:type="File" fileName="file.txt" />   </target>  </targets>  <rules>   <logger name="*" minlevel="Info" writeTo="asyncFile" />  </rules> </nlog> 

一般常用的是AsyncWrapper,FilteringWrapper,需要更多的Wrappers点 这里

つづく

正文到此结束
Loading...