1

I'm using ServiceStack with Enyim.Memcached and NLog. My NLog configuration looks like this:

<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>

All fine. However, Memcached writes a lot of diagnostics that I don't want in the log file, like:

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

I've tried adding this rule above the current one, but this has no effect:

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

I want to only write log messages from Memcached that have a Level of Warn or higher. What am I doing wrong? Also, the Enyim.Memcached code does a check on log.IsDebugEnabled before attempting to write to the log. If it's possible to change my configuration to do what I want, will this cause this property to be false?

Graham Clark
  • 12,886
  • 8
  • 50
  • 82

1 Answers1

1

Looks like it was an issue with the wildcard. I added ${logger} to the target's layout attribute to see the exact logger name producing the Memcached logs. Turns out there's quite a few. The main one is called Enyim.Caching.Memcached.MemcachedNode.InternalPoolImpl, but there's also TextSocketHelper and GetHelper (no namespaces on these).

So adding these rules worked:

<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" />

This doesn't seem quite right, it would be nicer to be able to tell Enyim.Memcached to not log this stuff.

If the minlevel for a logger is higher than "Debug", then the IsDebugEnabled property of the logger object will be false. So this configuration change will prevent the logging calls in the Enyim.Memcached library.

Graham Clark
  • 12,886
  • 8
  • 50
  • 82