因此,这个想法开始创建多线程感知日志挂钩 因此,一个文件日志可以在任何我们喜欢的地方转储有关所有这些线程的信息。
我写了一些接缝来做它,虽然我不确定这个代码是否应该在.net 4.0中使用(锁确实保存了这个文件写的任务,我相信)..但不确定是否应该是一个队列左右,以便多个线程添加他们的文本和编写器,写入并出列。
另一方面,也许这已经足够了,然后我增加了很多复杂性,我最担心的是,由于Lock(锁定器),代码可能会被冻结。
public static class LogWriter
{
private static object locker = new Object();
public static void Write ( string Filepath,string text )
{
lock (locker)
{
using (FileStream file = new FileStream(Filepath, FileMode.Append, FileAccess.Write, FileShare.Read))
using (StreamWriter writer = new StreamWriter(file, Encoding.Unicode))
{
writer.WriteLine(text);
}
}
}
}
答案 0 :(得分:1)
一般来说,我认为您可以假设您的代码可以正常运行。如果多个线程同时调用Write
,则lock
将有效地使它们一次向文件追加文本。
在查看代码时会想到一些事情:
Write
都会创建一个新的FileStream
和StreamWriter
并在最后处理它。这听起来非常昂贵,最好将file
和writer
保留在静态变量中并在最后关闭它们一般来说,我认为您最好的选择是查看一些现有的日志框架,看看是否可以使用它们。您不需要编写自己的“创建多线程感知日志记录挂钩”,其他人在您之前已经这样做了。
一些好的日志框架是NLog,Serilog,log4net,ELMAH ......我认为最好的办法是使用这些日志框架。