3

我们在 ASP.NET 2.0 应用程序中使用日志记录应用程序块,该应用程序以下列方式调用:

public class BaseLogEntry : LogEntry
{
    public void CloseLog()
    {
        try
        {
            Logger.Writer.Dispose();
        }
        catch (Exception)
        { }
    }
}

public class GeneralLogEntry : BaseLogEntry
{
    /// <summary>
    /// 
    /// </summary>
    /// <param name="message"></param>
    public GeneralLogEntry(string message) : this(message, 2) { }

    /// <summary>
    /// 
    /// </summary>
    /// <param name="message"></param>
    /// <param name="priority"></param>
    public GeneralLogEntry(string message, int priority): base()
    {
        Categories.Add("General");
        Priority = priority;
        Severity = System.Diagnostics.TraceEventType.Information;
        Message = message;
        CloseLog();
    }
}

当我们将 IIS 中的工作进程数增加到 1 以上时,日志文件会附加一个唯一的 GUID,如下所示:

068aa49c-2bf6-4278-8f91-c6b65fd1ea3aApplication.log

该应用程序生成了几个日志文件,所有类型均为“滚动平面文件跟踪侦听器”

有没有办法避免这种情况?

4

1 回答 1

5

最初来自:(http://ykm001.springnote.com/pages/6348311?print=1现在是重定向到游戏网站的死链接):

已知问题

日志文件的文件名可能会附加一个 GUID。 RollingFileTraceListener 实例“拥有”它正在写入的日志文件,并在写入第一个日志条目时将其锁定为独占写入访问。它保持文件锁定,直到实例被释放。如果创建了另一个指向同一文件的 RollingFileTraceListener 实例,则在释放第一个实例之前,第二个实例无法打开此文件进行写入,并将写入一个带有 GUID 名称的新文件。

RollingFileTraceListener 间接派生自 System.Diagnostics.TextWriterTraceListener。当无法写入具有指定文件名的文件时,此类将文件名更改为包含 GUID。这是因为 RollingFileTraceListener 间接调用其基类 TextWriterTraceListener 上的 EnsureWriter 方法。.NET Reflector 在 System.dll 中显示了 System.Diagnostics.TextWriterTraceListener.EnsureWriter() 的这段代码(稍微重写以提高清晰度):

try
{
    this.writer = new StreamWriter(fileNameWithPath, true, encoding1, 0x1000);
    break;
}
catch (IOException)
{
    Guid guid1 = Guid.NewGuid();
    fileName = guid1.ToString() + fileName;
    fileNameWithPath = Path.Combine(folderPath, fileName );
}

基本上这似乎是一个已知问题,有一个解决方法

http://entlibcontrib.codeplex.com/workitem/7472

使用 NoGUIDRollingFlatFileListener 没有帮助,问题仍然存在(即使在花费大量时间重新编译日志应用程序块之后)。它可能在 EntLib 4 中可以修复,但我坚持使用 Ent Lib 3.1

也许我应该看看替代的日志记录机制

于 2011-08-05T13:02:08.233 回答