Есть ли способ создать именованный регистратор с NLog и фильтровать ведение журнала по этому имени (именам)?

Иногда я не хочу регистрировать все, особенно в окне вывода Visual Studio (цель -> отладчик) во время разработки. Я подумал, может быть, есть способ назвать конкретный регистратор (один класс) или несколько регистраторов (из нескольких классов), чтобы в файле конфигурации я мог включить ведение журнала только для классов в разработке, которые меня интересуют в данный момент.

В настоящее время у меня есть эта самая распространенная строка NLog во всех моих классах:

private static readonly NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();

и очень стандартная конфигурация, которая просто отображает журналы в окне вывода.

К сожалению, мне не удалось найти, как включать / отключать регистраторы по классам.


person t3chb0t    schedule 24.10.2014    source источник
comment
Вы видели вариант условий? github.com/NLog/NLog/wiki/Conditions   -  person elvin    schedule 24.10.2014
comment
Теперь у меня есть, и я думаю, что это именно то, что я искал. Если бы я только искал условия NLog ...   -  person t3chb0t    schedule 24.10.2014


Ответы (1)


Как я уже упоминал в комментариях, вы можете использовать условия NLog для оценки и определения что вы хотите делать с результатами. Как говорится в документации:

Условия - это выражения фильтра, используемые с фильтром when. Они состоят из одного или нескольких тестов. Они> используются в фильтре when, чтобы определить, будет ли выполнено действие.

Также есть очень полезный пример:

<rules>
    <logger name="*" writeTo="file">
        <filters>
            <when condition="length('${message}') > 100" action="Ignore" />
            <when condition="equals('${logger}','MyApps.SomeClass')" action="Ignore" />
            <when condition="(level >= LogLevel.Debug and contains('${message}','PleaseDontLogThis')) or level==LogLevel.Warn" action="Ignore" />
            <when condition="not starts-with('${message}','PleaseLogThis')" action="Ignore" />
        </filters>
    </logger>
</rules>
person elvin    schedule 24.10.2014
comment
Если он хочет отфильтровать конкретный именованный регистратор, используйте <logger name="My.Application.ClassName"> или name="*.ClassName". Если вам нужен регистратор с явным именем, используйте logger = LogManager.GetLogger("ExplicitName"). - person Nigel Touch; 13.10.2015