如何将NLog配置为仅针对*all*targets的记录器命名空间从特定级别进行日志记录

Ram*_*its 11 c# logging nlog

我配置了以下记录器.

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <targets>
    <target name="file" xsi:type="File" fileName="trace.log"/>
    <target name="trace" xsi:type="OutputDebugString"/>
    <target name="console" xsi:type="ColoredConsole" />
  </targets>
  <rules>
      <logger name="*" minlevel="Info" writeTo="file" />
      <logger name="*" minlevel="Info" writeTo="trace" />
      <logger name="*" minlevel="Info" writeTo="console" />
  </rules>
</nlog>
Run Code Online (Sandbox Code Playgroud)

我希望Component.*的所有内容都只能从WARN及更高版本记录到所有记录器.使用NHibernate这很容易:

<logger name="NHibernate.SQL">
  <level value="OFF"/>
</logger>
Run Code Online (Sandbox Code Playgroud)

我试着添加以下内容:

<logger name="Component.*" minlevel="Warn" final="true" />
Run Code Online (Sandbox Code Playgroud)

这不起作用.

如何仅针对所有目标从记录器命名空间的某个级别进行日志记录.

Ram*_*its 11

解决方案是:

<logger name="Component.*" maxlevel="Info" final="true" />
Run Code Online (Sandbox Code Playgroud)

你基本上说,对于记录器,XI希望跳过所有匹配Info或更低的日志条目,因为它没有该writeTo属性.

它记录在这里:

https://github.com/nlog/NLog/wiki/Configuration-file

随着样本:

<logger name="Name.Space.*" minlevel="Debug" maxlevel="Error" final="true" />
Run Code Online (Sandbox Code Playgroud)

  • 当我放慢阅读速度足够长的时间,注意到它是最大级别而不是最小级别时,这最终对我有用,并且这个想法就像你通过省略 writeTo 来捕获并吞下这些级别。此外,您引用的示例不再出现在链接到的页面上。 (5认同)