Как настроить цель по умолчанию в NLog - PullRequest
3 голосов
/ 26 августа 2010

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

1 Ответ

4 голосов
/ 26 августа 2010

Ладно, если вы новичок в 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();
    }
...