Семантическая регистрация в несколько файлов

Мне нужно регистрировать ошибки моего веб-приложения в трех разных файлах

Например:-

     Dashboard --> DashboardLog.Log

     Login Information --> LoginLog.Log 

     AAA Section --> AAALog.Log

Я пытался изменить fileName во время выполнения в соответствии с моим типом из метода "LogToRollingFlatFile". Но выдает ошибку, когда я снова обновляю страницу, говоря, что она используется другим процессом. Кажется, что он не освободил ресурсы журнала предыдущего времени, и при попытке записи снова выдает эту ошибку. Сильфон мой метод изменения пути,

public static void ChangePath(int typeId)
    {
        var listener = new ObservableEventListener();
        listener.DisableEvents(SemanticLoggingEventSource.Log);
        SemanticLoggingEventSource.Log.Dispose();

        listener.EnableEvents(
          SemanticLoggingEventSource.Log, EventLevel.LogAlways,
          SemanticLoggingEventSource.Keywords.Perf | SemanticLoggingEventSource.Keywords.Diagnostic);

        if (typeId == 1)
        {
            listener.LogToRollingFlatFile(
            ConfigurationManager.AppSettings["DashboardLogLocation"].ToString(),
            10,
            "dd-M-yyyy",
            RollFileExistsBehavior.Increment,
            RollInterval.Hour,
            null,
            0,
            true);
        }
        else if (typeId == 2)
        {
            listener.LogToRollingFlatFile(
            ConfigurationManager.AppSettings["LoginLogLocation"].ToString(),
            10,
            "dd-M-yyyy",
            RollFileExistsBehavior.Increment,
            RollInterval.Hour,
            null,
            0,
            true);
        }
        else
        {
            listener.LogToRollingFlatFile(
            ConfigurationManager.AppSettings["AAALogLocation"].ToString(),
            10,
            "dd-M-yyyy",
            RollFileExistsBehavior.Increment,
            RollInterval.Hour,
            null,
            0,
            true);
        }
    }

и вот как это будет вызвано,

        SemanticLoggingUtility.ChangePath(1);
        EventLogger.ErrorLog("Dashboard Error", "test description 1");
        SemanticLoggingUtility.ChangePath(2);
        EventLogger.ErrorLog("Login Error", "test description 2");

1 ответ

Я знаю, что это, вероятно, не тот ответ, который вы ищете, но для этого конкретного случая я думаю, что наличие нескольких файловых приемников будет наиболее подходящим (и отделенным) решением.

Просто для того, чтобы применить предыдущий оператор с разными регистраторами, это также обычная практика (как это делает Microsoft ILoggerFactory, предоставляющий разные регистраторы для разных классов).

Другие вопросы по тегам