自制迷你日志类
写网站程序的时候,都要把异常写入日志吧,比较常用的是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记录下来,因为我感觉他们没什么用,这里唯一难点的就是写日志加锁,为何要加锁呢,因为同一文件同一时间只能被一个进行写入呀,把日志类搞成静态类也是出于这个考虑的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端