在ASP.NET中写入日志文件

在ASP.NET中写入日志文件,asp.net,logging,Asp.net,Logging,我正在使用file.AppendAllText方法将事件数据写入asp.net httphandler中的日志文件。我关心的是当同时收到多个请求时会发生什么。AppendAllText是否锁定要写入的文件?您可以使用My.Log写入日志文件 编辑:如果使用FileLogTraceListener,则该侦听器是线程安全的 这样做还允许您通过web.config文件控制和配置日志记录。否,您应该有一个静态锁对象来保护日志文件写入,例如 public static object LockingTarg

我正在使用file.AppendAllText方法将事件数据写入asp.net httphandler中的日志文件。我关心的是当同时收到多个请求时会发生什么。AppendAllText是否锁定要写入的文件?

您可以使用My.Log写入日志文件

编辑:如果使用FileLogTraceListener,则该侦听器是线程安全的


这样做还允许您通过web.config文件控制和配置日志记录。

否,您应该有一个静态锁对象来保护日志文件写入,例如

public static object LockingTarget = new object();

public void LogToFile(string msg)
{
    lock(LockingTarget)
    {
        //append to file here as fast as possible
    }
}

我建议使用
TextWriterTraceListener
,而不要试图自己管理它

设置和使用非常简单:

TextWriterTraceListener logListener = new TextWriterTraceListener("C:\log.txt", "My Log Name");
Trace.Listeners.Add(logListener);
然后记录一些东西:

Trace.WriteLine("Log this text");

它的使用非常简单,并且有许多不同类型的SQL、事件日志、文本文件等侦听器。因此,如果要更改侦听器,则无需调整代码。

请注意IIS WebGarden。假设您有不同的进程-->不同的静态对象。所以你可能会遇到并发冲突。Fabrizio是对的,如果你使用的是一个web服务器场,那么所有的赌注都没有了;在这种情况下,我建议改为登录数据库。您可能不希望50台服务器试图写入同一个文本文件!