0

我需要将我的 Web 应用程序错误记录到三个不同的文件中

例如:-

     Dashboard --> DashboardLog.Log

     Login Information --> LoginLog.Log 

     AAA Section --> AAALog.Log

我试图根据“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");
4

1 回答 1

0

我知道这可能不是您正在寻找的那种答案,但对于这种特殊情况,我认为拥有多个文件接收器将是最合适(和解耦)的解决方案。

只是为了强制执行前面的声明,拥有不同的记录器也是一种常见做法(正如 Microsoft ILoggerFactory 所做的那样,在不同的类中提供不同的记录器)。

于 2016-09-21T18:43:43.310 回答