cjtest

导航

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>

posted on 2024-07-12 16:20  菜鸟-~  阅读(21)  评论(0编辑  收藏  举报