#c# #nlog
#c# #nlog
Вопрос:
В настоящее время я использую NLog и разрешаю пользователям-администраторам устанавливать уровень во время выполнения, используя переменную следующим образом:
<logger name="*" minLevel="${var:myFileLevel}" writeTo="file" />
Я хотел бы знать уровень этого регистратора во время выполнения (поэтому я не могу получить его из файла конфигурации из-за переменной)
Я могу легко получить цель следующим образом:
Target target= LogManager.Configuration.FindTargetByName("file");
но, к сожалению, для целевого объекта нет соответствующих методов для получения уровня. Возможно ли получить уровень ведения журнала во время выполнения?
Комментарии:
1. Почему не проверять
Logger.IsEnabled(logLevel)
или определенныеLogger.Is*Enabled
свойства? Это позволяет вам быть уверенным в том, что настроено для любого данного регистратора.2. @Dennis: я пробовал это, но это не удается, если у вас настроено несколько целей на разных уровнях. Принятое решение — это именно то, что мне нужно.
Ответ №1:
Включенный уровень ведения журнала настраивается в правиле ведения журнала.
Итак, вы могли бы сделать это:
- Добавьте имя правила, чтобы вам было проще найти правило:
<logger name="*" minLevel="${var:myFileLevel}" writeTo="file" ruleName="myrule" />
- Найдите правило и проверьте
Levels
свойство. См. LoggingConfiguration .Метод FindRuleByNamevar rule = LogManager.Configuration.FindRuleByName("myrule"); var levels = rule.Levels; // enabled levels
В этом случае другим вариантом является чтение значения переменной myFileLevel . Для этого вам нужно его отобразить, вы могли бы использовать LogEventInfo.CreateNullEvent()
для этого.
var myFileLevelLayout = LoggingConfiguration.Variables["myFileLevel"]; // Type SimpleLayout
string value = myFileLevelLayout.Render(LogEventInfo.CreateNullEvent())