NLog
Nlog是.net平台下的开源日志组件,相当于log4net用法配置更简单。
安装
Install-Package NLog.Config -Version 4.5.4
使用
获取一个Logger实例,取名为NLogConsoleExample(名字可任意),也可采用 LogManager.GetCurrentClassLogger()来获取一个以当前类名为名称的Logger实例;然后我们在main方法中添加几行简单调用NLog输出不同级别的日志信息的代码
下面的代码将会创建一个和class有着相同名字的Logger。
namespace MyNamespace
{
public class MyClass
{
private static Logger logger = LogManager.GetCurrentClassLogger();
}
}
管理Logger的名字也是可以的:
using NLog;
Logger logger = LogManager.GetLogger("MyClassName");
日志级别
每一个日志消息都用一个日志级别来修饰,它们用来识别消息的重要性和具体细节。NLog可以以Logger对象的名称和日志级别为主,路由日志消息。
NLog支持下面的日志级别:
- Trace 特别细节的日志,可能包含大量的信息,比如说协议的负载。这个日志级别通常只会在开发期间被启用。
- Debug Debug信息,比Trace的信息量要少一些,通常不会在生产环境下使用。
- Info 信息消息,这个是在生产环境下经常使用到的。
- Warn 警告消息,通常用来指示非关键性的问题,这些问题可以被恢复或者只是临时错误。
- Error 错误消息 大多数时候,他们都是Exception(异常)。
- Fatal 特别严重的错误!
书写日志消息
using NLog;
public class MyClass
{
private static Logger logger = LogManager.GetCurrentClassLogger();
public void MyMethod1()
{
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");
// alternatively you can call the Log() method
// and pass log level as the parameter.
logger.Log(LogLevel.Info, "Sample informational message");
}
}
日志消息也可以被参数化 - 你可以使用字符串格式,就像你在Console.WriteLine()和String.Format()中一样:
using NLog;
public class MyClass
{
private static Logger logger = LogManager.GetCurrentClassLogger();
public void MyMethod1()
{
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);
}
}
NLog配置文件支持两种方式
- 是将配置写到应用程序的配置文件(通常是applicationName.exe.config)或者Web.config文件中;
独配置到一个文件,通常是NLog.config
<?xml version=”1.0” encoding=”utf-8” ?>
多个目标
<?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" />
<target name="console" xsi:type="Console" />
</targets>
<rules>
<logger name="*" minlevel="Trace" writeTo="logfile" />
<logger name="*" minlevel="Info" writeTo="console" />
</rules>
</nlog>
还有一个比较常见的应用场景则是,需要为当前正在开发的组件提供更多细节的日志,而其他的组件将会减少输出。我们就可以用这样的配置文件:
<?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="SomeNamespace.Component.*" minlevel="Trace" writeTo="logfile" final="true" />
<logger name="*" minlevel="Info" writeTo="logfile" />
</rules>
</nlog>
第一个规则将会将以SomeNamespace.Component开头的Logger对象的Trace级别及以上级别的日志发送到日志文件。属性final=true将会使得在写入操作之后停止进一步处理。
第二个规则将会将剩下的日志发送到同一个日志文件,但是这些日志有一个约束,那就是级别需要是Info或更高。
层级
层级提供了一个当日志被写入文件时,指定日志内容格式的方法。主要有两种层级:
简单层级 - 使用层级渲染器撰写。
结构层级 - 可以输出XML、CSV、以及其他复杂的格式。
简单层级就是一个字符串,在${和}中嵌入一些特殊的标记。比如下面的声明将会使得每一条日志消息都是用一个格式为yyyMMddHHmmss:的日期前缀:
<target name="logfile" xsi:type="File" fileName="file.txt" layout="${date:format=yyyyMMddHHmmss} ${message}" />
参考:
https://blog.csdn.net/Toshiya14/article/details/52098088
https://github.com/NLog/NLog/wiki/Configuration-file