Я пытаюсь преобразовать существующую библиотеку журналов, используемую кучей приложений, в NLog. Существующий регистрационный код не имеет косвенной направленности, входящие вызовы идут прямо от звонящего к вызову веб-службы. Существующий код регистрации реализован как статический синглтон. Мне нужно сделать это таким образом, чтобы существующие приложения, использующие эту библиотеку, не нуждались в изменении конфигурации или кода, когда они выбирают измененную библиотеку журналов. Позже я могу обновлять приложения по мере необходимости, настраивая новую цель ведения журнала или изменяя код для непосредственного входа в NLog.
Чтобы сделать это, я собирался заставить код статической регистрации проходить через NLog. Существующие вызовы журналирования будут маршрутизироваться через NLog, а существующий вызов веб-службы будет заключен в пользовательскую цель NLog.
Чтобы это работало на старых приложениях без их изменения, мне нужно программно установить пользовательскую цель в качестве значения по умолчанию (если ни одна из них не настроена в файле конфигурации). Я хотел бы сделать это без внесения изменений в конфигурацию многочисленных существующих приложений, поэтому мне нужно сделать это программно.
Проблема в том, что ... не работает. Есть мысли об этом подходе? Ниже приведен код, который я попытался добавить, чтобы подключить существующий класс логгера для создания цели по умолчанию.
Я бы тоже не против зайти в log4net. Просто взглянув на API, я изначально выбрал NLog, так как названия стали более понятными для меня.
public static class LegacyLogger
{
static LegacyLogger()
{
if (LogManager.Configuration == null
|| LogManager.Configuration.GetConfiguredNamedTargets().Count == 0)
{
if (LogManager.Configuration == null)
{
LogManager.Configuration = new LoggingConfiguration();
}
//LogManager.Configuration.AddTarget("LegacyLogger", new NLog.Targets.DebuggerTarget());
LogManager.Configuration.AddTarget("LegacyLogger", new LegacyLoggerTarget());
}
_logger = LogManager.GetCurrentClassLogger();
}