62,074
社区成员
发帖
与我相关
我的任务
分享
private static object WriteLogFlag = new object();
private static int AsyncWritelogHold = 20;
private static int AsyncWriteLogCount = 0;
public static void WriteLogToFileSystem(string className, object message, EventLogEntryType type)
{
lock (WriteLogFlag)
{
if (AsyncWriteLogCount >= AsyncWritelogHold)
{
WriteLogToFileSystem2("WriteLogToFileSystem", new { _ = "消息积压", AsyncWriteLogCount, AsyncWritelogHold }, EventLogEntryType.Warning);
return; //丢掉日志具体内容,节省时间
}
++AsyncWriteLogCount;
}
WriteLogToFileSystem2(className, message, type);
}
private static void WriteLogToFileSystem2(string className, object message, EventLogEntryType type)
{
var content = GetEventString(message); //无法确保对象引用message不被修改,因此此语据不能异步处理
var dir = new DirectoryInfo(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Log", DateTime.Now.ToString("yyyy_MM_dd")));
var file = new FileInfo(Path.Combine(dir.FullName, className + "_" + type.ToString() + ".txt"));
var sp = new string('-', 20);
var msg = string.Format("{0} {1} {0}\r\n\r\n{2}\r\n\r\n", sp, DateTime.Now.ToString("HH:mm:ss.fff"), content);
ThreadPool.QueueUserWorkItem(h =>
{
lock (WriteLogFlag)
{
--AsyncWriteLogCount;
CreateDir(dir);
using (var fw = file.Open(FileMode.Append, FileAccess.Write))
using (var sw = new StreamWriter(fw))
{
sw.Write(msg);
sw.Close();
}
}
});
}
private static string GetEventString(object message)
{
string msg;
if (message is Exception || message is string)
msg = message.ToString();
else
{
try
{
msg = JToken.FromObject(message).ToString();
}
catch
{
msg = message.ToString();
}
}
return msg;
}
}
if (!File.Exists(path))
{
using (FileStream fileStream = File.Create(path))
{
byte[] bytes = new UTF8Encoding(true).GetBytes(text + "\r\n");
fileStream.Write(bytes, 0, bytes.Length);
}
}
else
{
using (StreamWriter streamWriter = new StreamWriter(path, true))
{
streamWriter.WriteLine(text);
}
}
2、确定服务器C盘是否有权限写文件
try
{//写LOG文件内容
System.IO.StreamWriter sw = System.IO.File.AppendText("C:/log/" + DateTime.Now.ToString("yyyyMMdd") + ".Log");
sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss: ") + "Warning" + "-" + "aaa");
sw.Close();
}
catch(Exceptionex)
{
//记录下来
}
加上try catch,看这段代码是否抛出异常?
C盘是否没有写入权限?