写网站程序的时候,都要把异常写入日志吧,比较常用的是Log4Net,不过我要求不高,只需要把异常和信息记在网站服务器的网站目录下就可以了,于是我自己写了一个。
public static class Logger { private static readonly object Obj = new object(); public static void Log(string title, string msg) { LogError(title, msg); } public static void Error(string title, Exception ex) { if (ex == null) { return; } var sb = new StringBuilder(); sb.AppendLine(ex.Message).AppendLine(ex.StackTrace); foreach (IDictionary value in ex.Data.Values) { if (value != null) { foreach (DictionaryEntry entry in value) { sb.Append("Key:").Append(entry.Key).Append(",Value:").AppendLine(entry.Value.ToString()); } } } if (ex.InnerException != null) { sb.Append("InnerMessage:") .AppendLine(ex.InnerException.Message) .Append("InnerStackTrace:") .AppendLine(ex.InnerException.StackTrace); foreach (IDictionary value in ex.InnerException.Data.Values) { if (value != null) { foreach (DictionaryEntry entry in value) { sb.Append("InnerKey:") .Append(entry.Key) .Append(",InnerValue:") .AppendLine(entry.Value.ToString()); } } } } LogError(title, sb.ToString()); } private static void LogError(string title, string msg) { string filePath = Path.GetDirectoryName(HttpRuntime.AppDomainAppPath) + "\\log\\" + DateTime.Now.ToString("yyyy-MM-dd") + ".txt"; lock (Obj) { try { File.AppendAllText(filePath, string.Format("{0:HH:mm:ss}:{1}:{2}\r\n", DateTime.Now, title, msg)); } catch (Exception e) { Console.WriteLine(e); } } } }
记录普通信息没什么难的,记录异常的话就要选择记录哪些信息了,这里我没把Source,HelpLink和TargetSite记录下来,因为我感觉他们没什么用,这里唯一难点的就是写日志加锁,为何要加锁呢,因为同一文件同一时间只能被一个进行写入呀,把日志类搞成静态类也是出于这个考虑的。
时间: 2024-10-24 04:42:33