我的應用使用的是c# FileLogTraceListener日志類記錄日志,采用的是多執行緒,設定LogFileCreationScheduleOption.Daily用來每天生成新的日志檔案。記錄日志很正常,當我修改系統時間時(即會產生新的日志檔案),就會拋出錯誤,如圖所示。
我覺得是個bug,我查看原始碼能發現當呼叫CloseCurrentStream()函式時,m_Stream會被設定成null,造成了錯誤。FileLogTraceListener類在msdn上說的是 執行緒安全的,看來并非如此。大家覺得是什么原因?

建工程時,references需要參考“Microsoft.VisualBasic”
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using Microsoft.VisualBasic.Logging;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("start");
Tracelog.StartTrace();
for (int i = 0; i < 10; i++)
{
Thread backthread = new Thread(new ThreadStart(Worker));
backthread.Start();
}
}
public static void Worker()
{
while (true)
{
//Console.WriteLine("start");
Tracelog.Trace(Tracelog.INFO, "test");
}
}
}
public class Tracelog
{
public static int INFO = 0;
public static int ERROR = 1;
public static FileLogTraceListener myListener;
//private static readonly object Lock = new object();
public static void StartTrace()
{
try
{
//lock (Lock)
{
myListener = new FileLogTraceListener("myListener");
myListener.LogFileCreationSchedule = LogFileCreationScheduleOption.Daily;
myListener.CustomLocation = "log";
myListener.BaseFileName = "log";
myListener.MaxFileSize = 10 * 1024 * 1024;
myListener.WriteLine("Trace start");
myListener.Flush();
}
}
catch (Exception e)
{
Console.WriteLine("StartTrace error" + e.ToString());
}
}
public static void Trace(int type, string message)
{
try
{
//lock (Lock)
{
myListener.WriteLine(message);
myListener.Flush();
}
}
catch (Exception e)
{
Console.WriteLine("Trace error message:" + e.ToString());
}
}
}
}
uj5u.com熱心網友回復:
自己頂,大佬們求支持uj5u.com熱心網友回復:
頂頂頂頂頂頂uj5u.com熱心網友回復:
沒用過FileLogTraceListener。我當時用的 log4net
https://blog.csdn.net/hanjun0612/article/details/50924404
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/43110.html
標籤:C#
上一篇:uint num2 = < PrivateImplementationDetails >.ComputeStringHash(text4);
下一篇:請問一下這種sql該怎么寫
