【问题标题】:Write to a log file in ASP.NET在 ASP.NET 中写入日志文件
【发布时间】:2008-11-12 18:32:09
【问题描述】:

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

【问题讨论】:

    标签: asp.net logging


    【解决方案1】:

    我建议使用TextWriterTraceListener,而不是尝试自己管理。

    设置和使用非常简单:

    TextWriterTraceListener logListener = new TextWriterTraceListener("C:\log.txt", "My Log Name");
    Trace.Listeners.Add(logListener);
    

    然后记录一些东西:

    Trace.WriteLine("Log this text");
    

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

    【讨论】:

      【解决方案2】:

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

      public static object LockingTarget = new object();
      
      public void LogToFile(string msg)
      {
          lock(LockingTarget)
          {
              //append to file here as fast as possible
          }
      }
      

      【讨论】:

      • 关注IIS WebGarden。 AFAIK 你有不同的过程-> 不同的静态对象。所以你可能会遇到并发冲突。
      • Fabrizio 是对的,如果您使用的是网络农场,那么所有的赌注都是错误的;在这种情况下,我建议改为登录到数据库。您可能不希望 50 个服务器尝试写入同一个文本文件!
      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-31
        • 1970-01-01
        • 2012-04-06
        • 1970-01-01
        相关资源
        最近更新 更多