先定义接口类:
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 MBprivate 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);}}}
}
最后实现的效果,简洁明了
如图: