用于ASP.NET应用程序的Singleton compact Logger

我编写了一个Singeton紧凑型记录器,它非常适合ASP.NET应用程序。 只需重新Logger.Log.Info("Hello world!");它然后Logger.Log.Info("Hello world!"); 。 它还会自动记录未处理的exception。

有时我在尝试创建日志文件Stream遇到错误。

例外是:

该进程无法访问文件’C:\ inetpub \ wwwroot \ MyApp \ Logs \ 5-22-2011.log’,因为它正由另一个进程使用。

我检查了Process Explorer,只有w3wp.exe处理了日志文件。 似乎不同的线程出现了问题。 大概每24小时发生一次!

如果它定期发生,您可能需要检查IIS设置,并查看应用程序池是否以24小时间隔进行回收。 (我认为从记忆中默认是29h)

如果是这种情况,您的问题可能是由于IIS“启动”一个新的应用程序池而旧的应用程序池仍在处理请求(重叠的回收 – 这是默认行为),即新的Logger试图在一个实例化在旧的进程被称为析构函数之前的新进程。

编辑:忘记提及(我写答案时已经很晚了),缓解这种情况的一种方法是更改​​日志文件名以包含完整的日期和时间。