Как настроить цель по умолчанию в NLog

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

person Frank Schwieterman    schedule 26.08.2010    source источник


Ответы (1)


Хорошо, если вы новичок в NLog, как и я, советуем вам ознакомиться с примерами, установленными с установщиком, обо всем. В этом случае мне понадобились:

public static class LegacyLogger
{
    static LegacyLogger()
    {
        if (LogManager.Configuration == null
            || LogManager.Configuration.GetConfiguredNamedTargets().Count == 0)
        {
            NLog.Config.SimpleConfigurator.ConfigureForTargetLogging(new LegacyLoggerTarget(), LogLevel.Trace);
        }

        _logger = LogManager.GetCurrentClassLogger();
    }
person Frank Schwieterman    schedule 26.08.2010