Nlog配置
nlog配置
- xml格式化nlog配置要么嵌入在web.config要么在app.config中;而独立出来的nlogxml配置是需要在“属性”中选择"较新就复制",同时选择构建操作为“嵌入资源“才能在
参考地址:[https://github.com/nlog/NLog/wiki/Configuration-file]
独立xml
<?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="logconsole" xsi:type="Console" />
</targets>
<rules>
<logger name="*" minlevel="Info" writeTo="logconsole" />
<logger name="*" minlevel="Debug" writeTo="logfile" />
</rules>
</nlog>
- 在web.config或app.config中配置nlog的xml配置
# 在cofniguration 节点下添加一个configSections 节点再在里面添加一个section 节点
#之后在configuration中正常配置nlog xml配置
<configuration>
<configSections>
<section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog"/>
</configSections>
...
<nlog>
<targets>
<target name="logconsole" xsi:type="Console" />
</targets>
<rules>
<logger name="*" minlevel="Info" writeTo="logconsole" />
</rules>
</nlog>
</configuration>
注意:targets和rules是必要的节点
节点说明
- targets 定义日志目标/输出
1.name 目标名称
2.type 当使用file,database 命名空间时,此属性被命名为xsi:type - rules 定义日志路由规则
- name 匹配日志对象的日志名称,可以包含通配符(*和?)
- minlevel 日志的最低级别(匹配指定的级别以及以上的级别)
- maxlevel 日志最大级别(匹配指定的级别以及以下的级别)
- level 单级别日志
- levels 要记录的级别列表,以逗号隔开
- writeTo 以逗号
- final 在最终规则匹配后不处理任何规则
- enabled 设置为false 时禁用规则而不删除规则
- ruleName 规则标识符,允许查找 Configuration.FindRuleByName 和 Configuration.RemoveRuleByName 的规则a
- 日志级别loglevel:如果设置了日志的最小级别,那在它之下的日志级别将不会被记录,在它之上的反过来
- trace :0
- debug :1
- info :2
- warn:3
- error:4
- fata: 5 致命的
- off :6
##通过命名空间+通配符实现过滤日志输出
<logger name="Name.Space.*" weiterTo="test1"/>
## 通过具体的类名过滤日志输出
<logger name="Name.Space.ClassName" writeTo="test2"/>
## 添加final可以跳过 maxlevel以及以下的信息
<logger name="Name.Space.ClassName" writeTo="test2" maxlevel="Warn" final=true/>
## 添加final也可以完全跳过所有信息,只需要maxlevel等于最高级别
<logger name="Name.Space.ClassName" writeTo="test2" maxlevel="OFF" final=true/>
注意
- 当logger中存在多个级别声明属性 level levels minlevel maxlevel 是只有设置在第一个的位置起效果,其他会被忽略掉
动态日志级别配
- nlog 4.6 以后增加了通过变量来配置日志级别
<variable name='globallevel' value='debug'/>
<rules>
<logger minlever="${globallevel}"/>
</rules>
- 动态模式 即使重新加载配置,运行时分配的所有变量也会保留 除非撇嘴了keepVariablesOnRelad="false"
异步处理和包装器目标
<targets>
<target name="n" xsi:type="AsyncWrapper">
<target xsi:type="RetryingWrapper">
<target xsi:type="File" fileName="${file}.txt" />
</target>
</target>
</targets>
- 添加带有重试错误功能的异步日志
<targets>
<target name="n" xsi:type="AsyncWrapper">
<target xsi:type="RetryingWrapper">
<target xsi:type="File" fileName="${file}.txt" />
</target>
</target>
</targets>
## 速记方法 与 xsi:type="AsyncWrapper" 相等
<nlog>
<targets async="true">
<!-- all targets in this section will automatically be asynchronous -->
</targets>
</nlog>
当使用异步后台写入时,记住Flush非常重要。它确保在应用程序退出之前写入所有日志
NLog.LogManager.Shutdown();
- 默认目标参数
## 例如,如果你不想让文件保持打开状态,你可以给每个目标添加 keepFileOpen="false" ,如下例所示
<nlog>
<targets>
<target name="f1" xsi:type="File" fileName="f1.txt" keepFileOpen="false"/>
<target name="f2" xsi:type="File" fileName="f2.txt" keepFileOpen="false"/>
<target name="f3" xsi:type="File" fileName="f3.txt" keepFileOpen="false"/>
</targets>
</nlog>
## 您可以指定单个 <default-target-parameters /> ,该应用于 <targets /> 部分中的所有目标
<nlog>
<targets>
<default-target-parameters xsi:type="File" keepFileOpen="false"/>
<target name="f1" xsi:type="File" fileName="f1.txt"/>
<target name="f2" xsi:type="File" fileName="f2.txt"/>
<target name="f3" xsi:type="File" fileName="f3.txt"/>
</targets>
</nlog>