你好我使用多线程放置日志有问题,我的功能就像这样
public static void AddToLog(string message)
{
using (FileStream fs = new FileStream(ExeDir + @"\logs.txt", FileMode.OpenOrCreate, FileAccess.Write))
{
using (StreamWriter mStreamWriter = new StreamWriter(fs))
{
mStreamWriter.BaseStream.Seek(0, SeekOrigin.End);
mStreamWriter.WriteLine(message + " at " + DateTime.Now.ToLongTimeString() + "." +
DateTime.Now.Millisecond);
mStreamWriter.Flush();
}
}
}
好吧,我每次创建这个对象,所以我无法锁定它,问题是当我打开它时,最好的方法是什么?
答案 0 :(得分:3)
我在使用多线程放置日志时遇到问题
您应该使用日志记录库。有很多可用于.NET,例如log4net。另见:
如果您想自己实现它,那么请将应用程序的日志记录分解为单个组件。在应用程序启动时打开文件一次,并通过定义良好的接口执行日志记录,并在实现中进行适当的同步。不要直接从应用程序中的许多不同位置写入同一个日志文件。
答案 1 :(得分:1)
同时查看FileShare修饰符(http://msdn.microsoft.com/en-us/library/system.io.fileshare.aspx)
(但是用于记录库建议的+1)
答案 2 :(得分:1)
您的方法已经是静态的,如果您使用的是应用程序的一个实例,只需添加
private static object logLock = new object();
public static void AddToLog(string message)
{
lock(logLock) // or with a timeout
{
...
但我认为@Mark有更好的建议来使用特殊的库。