2016-08-23 2 views
1

Я хотел бы использовать Layouts в NLog, чтобы иметь возможность изменять минимальный уровень регистрации, используя внешнюю переменную:В NLog можно ли использовать макеты для определения уровня журнала?

<nlog> 
    <variable name="loglevel" value="Debug"/> 
    <targets> 
     <target ... /> 
    </targets> 
    <rules> 
     <logger name="*" minlevel="${loglevel}" writeTo="LogFile" /> 
    </rules> 
</nlog> 

После запуска NLog, все уровни лог (например: Трассировка, отладка, информация, ...) установлены на false, которые указывают, что NLog не удалось правильно разобрать атрибут minlevel.

Функция макета NLog работает только с атрибутами target. Что я хочу достичь: в моем реальном приложении loglevel не является постоянным, а скорее обычным layout renderer.

Я также попытался заменить value="Debug" на value="LogLevel.Debug" без успеха.

ответ

0

minlevel, maxlevel и level атрибуты на <logger> должны быть фиксированными строками.

В этом случае вы можете использовать <filter>, например.

<nlog> 
    <variable name="loglevel" value="Debug"/> 
    <targets> 
     <target ... /> 
    </targets> 
    <rules> 
     <logger name="*" writeTo="LogFile" > 
      <filter condition="${level} >= ${loglevel}" action="Log"> 
     </logger> 
    </rules> 
</nlog> 

Посмотреть docs

+0

фильтра условие работает, но только если она определена как постоянная, например: 'уровень> = LogLevel.Debug'. Я не смог заставить его работать как переменная: 'level> = $ {loglevel}'. Кроме того, синтаксис для использования, по-видимому, немного отличается от вашего синтаксиса, см. Здесь: https://github.com/NLog/NLog/wiki/Conditions – tigrou

Смежные вопросы