分支自 SuZhouGuanHong/TaiYuanTaiZhong

dengjunjie
2024-06-28 1e38f44af86775a341e4d0e4411d24ad35e417d3
´úÂë¹ÜÀí/PCS/WCS_Server/WIDESEA_Comm/LogInfo/WriteLog.cs
@@ -1,11 +1,14 @@
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
{
@@ -14,12 +17,24 @@
    /// </summary>
    public partial class WriteLog
    {
        private int fileSize;
        public static WriteLog log;
        static string EquipName;
        private string logFileName;
        public string FileLogPath { set; get; }
        /// <summary>
        /// å†™å…¥æ—¥å¿—(不要多线程操作同一文件,一个设备一个文件夹)
        /// </summary>
        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))
            {
@@ -27,7 +42,7 @@
            }
            try
            {
                FileStream fs = new FileStream(basePath + "/" + logName + $"{DateTime.Now.ToString("yyyy_MM_dd")}_Log.txt", FileMode.Append);
                FileStream fs = new FileStream(basePath + "/" + logName + $"_{DateTime.Now.ToString("yyyy_MM_dd")}_Log.txt", FileMode.Append);
                StreamWriter strwriter = new StreamWriter(fs);
                try
                {
@@ -36,7 +51,8 @@
                    strwriter.WriteLine(content);
                    if (data != null)
                    {
                        strwriter.WriteLine(JsonConvert.SerializeObject(data));
                        //strwriter.WriteLine(JsonConvert.SerializeObject(data));
                        strwriter.WriteLine(data);
                    }
                    strwriter.WriteLine("-------------------------------");
                    strwriter.WriteLine();
@@ -51,5 +67,160 @@
            }
            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 è‡ªåŠ¨æ¸…é™¤æ—¥å¿—
        /// <summary>
        /// åˆ é™¤æ–‡ä»¶å¤¹å†…指定日期前文件夹
        /// </summary>
        /// <param name="folderPath"></param>
        /// <param name="cutOffDate"></param>
        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}");
                    }
                }
            }
        }
        /// <summary>
        /// åˆ é™¤æ–‡ä»¶å¤¹å†…指定日期前文件
        /// </summary>
        /// <param name="directoryPath"></param>
        /// <param name="cutOffDate"></param>
        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
    }
}