Как повысить минимальный уровень журнала для определенных библиотек с NLog?
Я использую 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
?
1 ответ
Похоже, это была проблема с подстановочным знаком. я добавил ${logger}
к target
"s layout
атрибут, чтобы увидеть точное имя регистратора, производящего журналы Memcached. Оказывается, есть немало. Основной называется Enyim.Caching.Memcached.MemcachedNode.InternalPoolImpl
, но есть также TextSocketHelper
а также GetHelper
(нет пространств имен на них).
Поэтому добавление этих правил сработало:
<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.