【问题标题】:How to raise the minimum log level for specific libraries with NLog?如何使用 NLog 提高特定库的最低日志级别?
【发布时间】:2015-08-11 09:17:02
【问题描述】:

我将 ServiceStack 与 Enyim.Memcached 和 NLog 一起使用。我的 NLog 配置如下所示:

<nlog internalLogFile="C:\LogFiles\nlog.log" internalLogLevel="Warn">
    <targets>
        <target name="asyncLogFile" type="AsyncWrapper" queueLimit="5000" overflowAction="Discard">
            <target name="logFile" type="File" fileName="C:\LogFiles\application.log" layout="${date}|${level:uppercase=true}|${callsite}|${message}" />
        </target>
    </targets>
    <rules>
      <logger name="*" minlevel="Debug" writeTo="asyncLogFile" />
    </rules>
</nlog>

一切都好。但是,Memcached 会在日志文件中写入很多我不想要的诊断信息,例如:

2015/08/11 09:59:29.317|DEBUG|Enyim.Caching.Memcached.Protocol.Text.TextSocketHelper.ReadLine|ReadLine: END

我尝试在当前规则之上添加此规则,但这没有效果:

<logger name="*Memcached*" minlevel="Warn" writeTo="asyncLogFile" final="true" />

我只想从 Memcached 写入警告级别或更高级别的日志消息。我究竟做错了什么?此外,Enyim.Memcached 代码在尝试写入日志之前会对log.IsDebugEnabled 进行检查。如果可以更改我的配置以执行我想要的操作,这是否会导致此属性为false

【问题讨论】:

    标签: memcached servicestack nlog enyim.caching


    【解决方案1】:

    看起来这是通配符的问题。我将${logger} 添加到targetlayout 属性中,以查看生成Memcached 日志的确切记录器名称。原来有不少。主要的称为Enyim.Caching.Memcached.MemcachedNode.InternalPoolImpl,但也有TextSocketHelperGetHelper(这些没有命名空间)。

    所以添加这些规则是有效的:

    <logger name="Enyim.Caching.*" minlevel="Warn" writeTo="asyncLogFile" final="true" />
    <logger name="TextSocketHelper" minlevel="Warn" writeTo="asyncLogFile" final="true" />
    <logger name="GetHelper" minlevel="Warn" writeTo="asyncLogFile" final="true" />
    

    这似乎不太对,如果能够告诉 Enyim.Memcached 不要记录这些东西会更好。

    如果记录器的minlevel 高于“调试”,那么记录器对象的IsDebugEnabled 属性将为false。因此,此配置更改将阻止 Enyim.Memcached 库中的日志记录调用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-02
      • 2018-02-27
      • 2014-01-06
      • 1970-01-01
      • 1970-01-01
      • 2016-07-11
      相关资源
      最近更新 更多