NLog: Ограничить имена регистраторов в Enum или другой структуре - PullRequest
0 голосов
/ 16 мая 2018

Я использую NLog для некоторых журналов и благодаря этим ответам: Получение имени регистратора в файл Excel с помощью NLog https://stackoverflow.com/questions/50123661/nlog-in-c-sharp-with-severity-and-categories?noredirect=1#comment87344565_50123661

Я могу регистрировать различные типы событий (например, «Thermal», «Database» и т. Д.) В одном файле с полем регистрации, показывающим тип события. Например, просто звоните:

NLog.LogManager.GetLogger("Database").Debug("Error writing to DB");

Все это прекрасно работает и может быть достаточно. Тем не менее, вы заметите, что любой программист может свободно добавлять любое имя в GetLogger и вводить его с ошибкой. "GetLogger (" Datobuse "). Было бы неплохо, если бы программисту пришлось выбирать из перечисления или другой структуры:

NLog.LogManager.GetLogger(LoggerNames.Database).Debug("Error writing to DB");

Похоже, что это может быть распространенной проблемой и уже может иметь элегантное решение. Я могу представить себе переопределение класса LogManager, но не уверен в специфике. Обратите внимание, что LogManager является публичным статическим классом в библиотеке NLog, поэтому не ясно, как его скрыть. Кроме того, есть приятное свойство: если вы один раз заполняете файл конфигурации в своем проекте приложения, файл конфигурации прекрасно работает для всех проектов в решении, если вы включите NLog в качестве ссылки.

Я пойду по пути создания библиотечного проекта, использующего библиотеку NLog, а затем добавлю, что это мой основной проект, ЕСЛИ МЕНЬШЕ уже есть отличное решение. Могу поспорить, что есть, но еще не видел.

Спасибо

Dave

1 Ответ

0 голосов
/ 16 мая 2018

Если у вас есть «глобальные» имена регистраторов, то простое решение состоит в том, чтобы просто использовать глобальные экземпляры регистратора.

Один и тот же глобальный экземпляр NLog Logger может использоваться в нескольких местах без проблем с многопоточностью.

...