打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
.NET NLog 详解(一)

安装NLog

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

这里我们选择安装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

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

日志使用

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点这里

つづく

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
日志框架Nlog之将日志输出到控制台
.Net Core 2配置 Nlog 日志组件学习笔记 [2] 配置篇
ASP.NET Core MVC 从入门到精通之日志管理
CentOS7安装MinIO教程,C#使用MinIO看这一篇就够了(WPF)
日志框架NLog之将日志发送到邮件
可以用if语句优雅地配置Serilog?
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服