iis – 使用一个日志记录应用程序块日志文件的多个进程

我们在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

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

有办法避免这种情况吗?

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

已知问题

GUID可能会添加到日志文件的文件名之前
RollingFileTraceListener实例“拥有”它正在写入的日志文件和
在写入第一个日志条目时将其锁定以进行独占写访问.它
保持文件锁定,直到实例处理完毕.如果另一个
创建指向同一文件的RollingFileTraceListener实例,
在处置第一个实例之前,第二个实例无法打开它
用于写入的文件,并将写入带有GUID的新文件
名称.

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

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

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

转载注明原文:iis – 使用一个日志记录应用程序块日志文件的多个进程 - 代码日志