C#日志编写
在一个完整的信息系统里面,日志系统是一个非常重要的功能组成部分。它可以记录下系统所产生的所有行为,并按照某种规范表达出来。我们可以使用日志系统所记录的信息为系统进行排错,优化系统的性能,或者根据这些信息调整系统的行为。在安全领域,日志系统的重要地位尤甚,可以说是安全审计方面最主要的工具之一。
日志系统概览
按照系统类型进行区分的话,日志系统可以分为操作系统日志、应用系统日志、安全系统日志等等。每种操作系统的日志都有其自身特有的设计和规范,例如Windows系统的日志通常按照其惯有的应用程序、安全和系统这样的分类方式进行存储,而类似Linux这样的各种Class UNIX系统通常都使用兼容Syslog规范的日志系统。
下面主要讲述的应用程序的本地日志记录方式,这里用文本文件记录日志;
具体应用如下:
编写日志记录类
public class WsdLogger { private static object lockobj = new object(); private string logDirectory; private string loggerDate; private string loggerFile; private string loggerName; private string logThisDirectory; /// <summary> /// 创建日志对象 /// </summary> /// <param name="loggerName">日志文件名</param> public WsdLogger(string loggerName) { if (!string.IsNullOrEmpty(loggerName)) { this.loggerName = loggerName; } else { this.loggerName = "DefaultLogger"; } //创建程序记录日志文件夹 this.logDirectory = new FileInfo(Assembly.GetExecutingAssembly().GetName().CodeBase.Replace("file:///", string.Empty)).DirectoryName + @"\logs"; if (!Directory.Exists(this.logDirectory)) { Directory.CreateDirectory(this.logDirectory); } } /// <summary> /// 写入日志内容 /// </summary> /// <param name="line"></param> public void Write(string line) { try { lock (lockobj) { string str = DateTime.Now.ToString("yyyy-MM-dd"); if ((this.loggerFile == "") || !str.Equals(this.loggerDate)) { this.loggerDate = str; this.logThisDirectory = this.logDirectory + @"\" + this.loggerDate; if (!Directory.Exists(this.logThisDirectory)) { Directory.CreateDirectory(this.logThisDirectory); } this.loggerFile = this.logThisDirectory + @"\" + this.loggerName + ".log"; } if (File.Exists(this.loggerFile)) { //判断如果超过1M就进行文件分割 FileInfo file = new FileInfo(this.loggerFile); if (file.Length > 1048576) { file.CopyTo(this.logThisDirectory + @"\" + this.loggerName + DateTime.Now.ToString("hhmmss") + ".log", true); file.Delete(); } using (StreamWriter writer = File.AppendText(this.loggerFile)) writer.WriteLine(string.Format("{0} {1} {2}", DateTime.Now.ToString("HH:mm:ss:ffff"), Thread.CurrentThread.Name, line)); } if (!File.Exists(this.loggerFile)) using (StreamWriter writer = File.CreateText(this.loggerFile)) writer.WriteLine(string.Format("{0} {1} {2}", DateTime.Now.ToString("HH:mm:ss:ffff"), Thread.CurrentThread.Name, line)); } } catch (Exception exception) { using (StreamWriter writer2 = File.Exists("log.txt") ? File.AppendText("log.txt") : File.CreateText("log.txt")) { try { writer2.WriteLine(exception.ToString()); writer2.Close(); } catch { } } } } public void Write(string line, params object[] objects) { this.Write(string.Format(line, objects)); } }
调用日志记录部分
/// <summary> /// 记录rfid操作日志 /// </summary> /// <param name="log"></param> public static void WriteRfidLog(RFlDLog log, string err) { WsdLogger lg = new WsdLogger("WsdReceiveService"); lg.Write(log.WriteLog(err)); }
如果有更好的方法,望各位提供。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述