Я пытаюсь преобразовать существующую библиотеку ведения журналов, используемую множеством приложений, для использования 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();
}