我正在使用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
吗?
答案 0 :(得分:1)
看起来这是通配符的问题。我在${logger}
的{{1}}属性中添加了target
,以查看生成Memcached日志的确切记录器名称。事实证明,有很多。主要的一个叫做layout
,但还有Enyim.Caching.Memcached.MemcachedNode.InternalPoolImpl
和TextSocketHelper
(这些都没有命名空间)。
所以添加这些规则是有效的:
GetHelper
这看起来不太正确,能告诉Enyim.Memcached不记录这些内容会更好。
如果记录器的<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" />
高于&#34; Debug&#34;,则记录器对象的minlevel
属性将为IsDebugEnabled
。因此,此配置更改将阻止Enyim.Memcached库中的日志记录调用。