using Newtonsoft.Json; using OfficeOpenXml.FormulaParsing.Excel.Functions.Math; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net.Http.Json; using System.Reflection.Metadata; using System.Text; using System.Threading.Tasks; using WIDESEA_Core.Extensions; namespace WIDESEA_Comm.LogInfo { /// /// 日志写入 /// public partial class WriteLog { private int fileSize; public static WriteLog log; static string EquipName; private string logFileName; public string FileLogPath { set; get; } /// /// 写入日志(不要多线程操作同一文件,一个设备一个文件夹) /// public static void Write_Log(string groupName, string logName, string content, object data = null) { string basePath = System.Environment.CurrentDirectory + "/Log/" + $"/{groupName}/{DateTime.Now.ToString("yyyy_MM_dd")}"; #region 删除文件夹内指定日期前文件夹 string name = Environment.CurrentDirectory + "/Log/" + $"/{groupName}"; if (Directory.Exists(name)) DeleteFoldersOlderThan(name, DateTime.Now.AddDays(-30)); #endregion //如果日志文件目录不存在,则创建 if (!Directory.Exists(basePath)) { Directory.CreateDirectory(basePath); } try { FileStream fs = new FileStream(basePath + "/" + logName + $"_{DateTime.Now.ToString("yyyy_MM_dd")}_Log.txt", FileMode.Append); StreamWriter strwriter = new StreamWriter(fs); try { DateTime d = DateTime.Now; strwriter.WriteLine(d.ToString()); strwriter.WriteLine(content); if (data != null) { //strwriter.WriteLine(JsonConvert.SerializeObject(data)); strwriter.WriteLine(data); } strwriter.WriteLine("-------------------------------"); strwriter.WriteLine(); strwriter.Flush(); } catch { } finally { strwriter.Close(); fs.Close(); } } catch { } } public static WriteLog Info(string equipName) { EquipName = equipName; //if (log == null) log = new WriteLog("Info" + equipName); log.FileLogPath = AppContext.BaseDirectory + "\\log\\Info\\" + DateTime.Now.ToString("yyyyMMdd") /*+ "\\" + EquipName + "_" + DateTime.Now.ToString("yyyyMMdd")*/ + "\\"; #region 删除文件夹内指定日期前文件夹 string name = AppContext.BaseDirectory + "\\log\\Info\\"; if (Directory.Exists(name)) DeleteFoldersOlderThan(name, DateTime.Now.AddDays(-30)); #endregion return log; } private WriteLog(string equipName) { //初始化大于399M日志文件将自动删除; this.fileSize = 2048 * 1024 * 200;//50M 2048 * 1024 * 200= 419430000字节(b)=399.9996185兆字节(mb) //默认路径 //this.FileLogPath = AppContext.BaseDirectory + "\\log\\" + EquipName + "\\"; EquipName = equipName; if (!string.IsNullOrEmpty(equipName)) this.logFileName = equipName + "_log" + DateTime.Now.ToString("yyyyMMdd") + ".log"; else this.logFileName = "log" + DateTime.Now.ToString("yyyyMMdd") + ".log"; //this.logFileName = EquipName + "_log" + DateTime.Now.ToString("yyyyMMdd") + ".log"; } object flag = new object(); public void Write(string Message, string equipName) { lock (flag) { if (!string.IsNullOrEmpty(equipName)) this.logFileName = equipName + "_log" + DateTime.Now.ToString("yyyyMMdd") + ".log"; else this.logFileName = "log" + DateTime.Now.ToString("yyyyMMdd") + ".log"; this.Write(this.logFileName, Message, equipName); } } public void Write(string LogFileName, string Message, string equipName) { //DirectoryInfo path=new DirectoryInfo(LogFileName); //如果日志文件目录不存在,则创建 if (!Directory.Exists(this.FileLogPath)) { Directory.CreateDirectory(this.FileLogPath); } FileInfo finfo = new FileInfo(this.FileLogPath + LogFileName); if (finfo.Exists && finfo.Length > fileSize) { finfo.Delete(); } try { FileStream fs = new FileStream(this.FileLogPath + LogFileName, FileMode.Append); StreamWriter strwriter = new StreamWriter(fs); try { DateTime d = DateTime.Now; strwriter.WriteLine("时间:" + d.ToString()); strwriter.WriteLine(Message); strwriter.WriteLine(); strwriter.Flush(); } catch (Exception ee) { //Console.WriteLine("日志文件写入失败信息:" + ee.ToString()); } finally { strwriter.Close(); strwriter = null; fs.Close(); fs = null; } } catch (Exception ee) { //Console.WriteLine("日志文件没有打开,详细信息如下:"); } } #region 自动清除日志 /// /// 删除文件夹内指定日期前文件夹 /// /// /// public static void DeleteFoldersOlderThan(string folderPath, DateTime cutOffDate) { DirectoryInfo di = new DirectoryInfo(folderPath); foreach (DirectoryInfo subDir in di.GetDirectories()) { // 获取文件夹的最后访问时间 DateTime lastAccess = subDir.CreationTime; //DateTime lastAccess = subDir.LastAccessTime; // 如果文件夹的最后访问时间早于或等于截止日期,则删除该文件夹 if (lastAccess <= cutOffDate) { try { Directory.Delete(subDir.FullName, true); // 递归删除文件夹及其内容 //Console.WriteLine($"文件 {subDir.FullName} 已删除。"); } catch (Exception ex) { //Console.WriteLine($"无法删除文件 {subDir.FullName}: {ex.Message}"); } } } } /// /// 删除文件夹内指定日期前文件 /// /// /// public static void DeleteFilesOlderThan(string directoryPath, DateTime cutOffDate) { DirectoryInfo directoryInfo = new DirectoryInfo(directoryPath); // 获取所有文件并筛选出创建日期在指定日期之前的文件 FileInfo[] filesToDelete = directoryInfo.GetFiles() .Where(f => f.CreationTime < cutOffDate).ToArray(); foreach (FileInfo file in filesToDelete) { try { file.Delete(); // 删除文件 Console.WriteLine($"文件 {file.FullName} 已删除。"); } catch (Exception ex) { Console.WriteLine($"无法删除文件 {file.FullName}: {ex.Message}"); } } } //public static void Main() //{ // string path = @"C:\YourDirectoryPath"; // 替换为你的目录路径 // DateTime cutOff = new DateTime(2023, 3, 31); // 设置删除文件的截止日期 // DeleteFilesOlderThan(path, cutOff); //} #endregion } }