C#实现异步日志记录类的示例代码
作者:爱吃奶酪的松鼠丶
这篇文章主要为大家详细介绍了C#如何实现异步日志记录类,从而方便下次使用,不用重复造轮子,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下
先定义接口类:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 异常 { internal interface ILog { Task WriteErrorLog(string message); Task WriteInfoLog(string message); Task WriteLog(string logType, string message); } }
在去实现:
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 异常 { internal class Log : ILog { public string LogDirectory { get; set; } public string TimeDirName { get; set; } private string LogFileName { get; set; } private const long maxLogSize = 2*1024*1024; // 2 MB private string FirstLogFileName { get; set; } public Log() { //在根目录创建Log文件夹 IOTools.CreatLogDir("Log"); //初始化 LogDirectory = Path.Combine(Directory.GetCurrentDirectory(), "Log"); TimeDirName = DateTime.Now.ToString("yyyyMMdd"); FirstLogFileName = $"log_{DateTime.Now:yyyyMMddHHmmss}.txt"; } public async Task WriteErrorLog(string message) { await WriteLog("Error",message); } public async Task WriteInfoLog(string message) { await WriteLog("Info", message); } public async Task WriteLog(string logType ,string message) { //创建文件夹 string dirType = TimeDirName + "\\" + logType; IOTools.CreatDir(dirType, LogDirectory); LogFileName=Path.Combine(LogDirectory, dirType, FirstLogFileName); if (!File.Exists(LogFileName)) { using (StreamWriter sw = File.CreateText(LogFileName)) { await sw.WriteLineAsync($"【{logType}】 {DateTime.Now} \r\n {message} \r\n \r\n"); } } else { FileInfo fileInfo = new FileInfo(LogFileName); if (fileInfo.Length > maxLogSize) { string newFileName = $"log_{DateTime.Now:yyyyMMddHHmmss}.txt"; LogFileName = Path.Combine(LogDirectory, dirType, newFileName); using (StreamWriter sw = File.CreateText(LogFileName)) { await sw.WriteLineAsync($"【{logType}】 {DateTime.Now} \r\n {message} \r\n \r\n"); } } else { using (StreamWriter sw = File.AppendText(LogFileName)) { await sw.WriteLineAsync($"【{logType}】 {DateTime.Now} \r\n {message} \r\n \r\n"); } } } } } }
工具类:
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Xml.Linq; namespace 异常 { internal class IOTools { public static void CreatLogDir(string name) { string rootDirectory = Directory.GetCurrentDirectory(); CreatDir(name, rootDirectory); } public static void CreatDir(string name , string path) { if(string.IsNullOrEmpty(name)) throw new ArgumentNullException("name"); if(string.IsNullOrEmpty(path)) throw new ArgumentNullException("path"); string logPath = Path.Combine(path, name); // 判断文件夹是否存在 if (!Directory.Exists(logPath)) { // 在当前项目根目录创建一个新的文件夹 Directory.CreateDirectory(logPath); } } } }
最后实现的效果,简洁明了
如图:
以上就是C#实现异步日志记录类的示例代码的详细内容,更多关于C#异步日志记录类的资料请关注脚本之家其它相关文章!