C# 自定义创建日志类型

namespace PSCMonitoringSoftware
{
    internal class LogProvider : BaseViewModel
    {
        private object logLock = new object();
        StringBuilder logStr = new StringBuilder();
        public string _statePathh { get; set; }
        public string _alarmPath { get; set; }
        public string _faultPath { get; set; }
        public string _operationPath { get; set; }

        public LogProvider()
        {
            string StatePath = System.Environment.CurrentDirectory + "\\Logs\\StateLog";
            string AlarmPath = System.Environment.CurrentDirectory + "\\Logs\\AlarmLog";
            string FaultPath = System.Environment.CurrentDirectory + "\\Logs\\FaultLog"; 
            string OperationPath = System.Environment.CurrentDirectory + "\\Logs\\OperationLog";
            if (!Directory.Exists(StatePath)) //若此文件夹不存在
            {
                Directory.CreateDirectory(StatePath); //创建此文件夹
            }
            if (!Directory.Exists(AlarmPath)) //若此文件夹不存在
            {
                Directory.CreateDirectory(AlarmPath); //创建此文件夹
            }
            if (!Directory.Exists(FaultPath)) //若此文件夹不存在
            {
                Directory.CreateDirectory(FaultPath); //创建此文件夹
            }
            if (!Directory.Exists(OperationPath)) //若此文件夹不存在
            {
                Directory.CreateDirectory(OperationPath); //创建此文件夹
            }
            _statePathh = StatePath;
            _alarmPath = AlarmPath;
            _faultPath = FaultPath;
            _operationPath = OperationPath;

        }

        public void WriteLog(string msg, LogType logType)
        {
            WriteLog(new Log
            {
                Time = DateTime.Now,
                LogType = logType,
                Message = msg,
            });
        }
        /// <summary>
        /// 写入日志
        /// </summary>
        /// <param name="log"></param>
        private void WriteLog(Log log)
        {
            lock (logLock)
            {
                logStr.Append(log.Time + ":"+log.Message.ToString()+"\r\n");
                string fileName = string.Empty;//文件名
                string fullPath = string.Empty;//整个文件夹路径
                switch (log.LogType)
                {
                    case LogType.State:
                         fileName = DateTime.Now.ToString("yyyyMMdd") + ".log";
                         fullPath = Path.Combine(_statePathh, fileName);
                        break;
                    case LogType.Alarm:
                        fileName = DateTime.Now.ToString("yyyyMMdd") + ".log";
                        fullPath = Path.Combine(_alarmPath, fileName);
                        break;
                    case LogType.Fault:
                        fileName = DateTime.Now.ToString("yyyyMMdd") + ".log";
                        fullPath = Path.Combine(_faultPath, fileName);
                        break;
                    case LogType.Operation:
                        fileName = DateTime.Now.ToString("yyyyMMdd") + ".log";
                        fullPath = Path.Combine(_operationPath, fileName);
                        break;
                    default:
                        break;
                }
                File.AppendAllText(fullPath, logStr.ToString());
                logStr.Clear();
            }
        }

        //删除指定日期文件,保留7天
        public void StateDispose()
        {
            string Days = ConfigurationManager.AppSettings["Days"];
            int days = Convert.ToInt32(Days);
            string file = DateTime.Now.ToString("yyyyMMdd") + ".log";
            string path = Path.Combine(_statePathh, file);
            try
            {
                var now = DateTime.Now;
                foreach (var f in Directory.GetFileSystemEntries(_statePathh).Where(f => File.Exists(f)))
                {
                    var t = File.GetCreationTime(f);
                    var elapsedTicks = now.Ticks - t.Ticks;
                    var elaspsedSpan = new TimeSpan(elapsedTicks);
                    if (elaspsedSpan.TotalDays > days)
                    {
                        File.Delete(f);
                    }
                }
            }
            catch (Exception ex)
            {

            }
        }


        public void DataCleaning(int day,string FilePath)
        {
            string file = DateTime.Now.ToString("yyyyMMdd") + ".log";
            string path = Path.Combine(FilePath, file);
            try
            {
                var now = DateTime.Now;
                foreach (var f in Directory.GetFileSystemEntries(FilePath).Where(f => File.Exists(f)))
                {
                    var t = File.GetCreationTime(f);
                    var elapsedTicks = now.Ticks - t.Ticks;
                    var elaspsedSpan = new TimeSpan(elapsedTicks);
                    if (elaspsedSpan.TotalDays > day)
                    {
                        File.Delete(f);
                    }
                }
            }
            catch (Exception ex)
            {

            }
        }

        public void RecordLogs(string DeviceName, string msg, LogType logType)
        {
            DoorDAL doorDAL = new DoorDAL();
            Logging logging = new Logging()
            {
                OperationTime = DateTime.Now,
                DeviceName = DeviceName,
                OperationDescription = msg,
                LogType = (int)logType
            };
            doorDAL.InserLoging(logging);
        }

    }

    internal class Log
    {
        public DateTime Time { get; set; }
        public string Message { get; set; }
        public LogType LogType { get; set; }

        public string ErrorFile { get; set; }
        public string ErrorMethod { get; set; }
        public int ErrorLineNum { get; set; }

        //public override string ToString()
        //{
        //    // 2022-12-31 20:00:00  [INFO]  Message
        //    // 2022-12-31 20:00:00  [ERROR]  Message
        //    //     文件:ErrorFile
        //    //           ErrorMethod[Line: ErrorLineNum]
        //    if (this.LogType == LogType.LOG)
        //    {
        //        return $"{Time.ToString("yyyy-MM-dd HH:mm:ss")}  [{LogType.ToString()}]  {Message}\r\n";
        //    }
        //    else if (this.LogType == LogType.ERROR)
        //    {
        //        return $"{Time.ToString("yyyy-MM-dd HH:mm:ss")}  [{LogType.ToString()}]  {Message}\r\n" +
        //            $"\t异常文件:{ErrorFile}\r\n" +
        //            $"\t异常位置:{ErrorMethod}  [Line:{ErrorLineNum}]\r\n\r\n";
        //    }
        //    return base.ToString();
        //}
    }
    internal enum LogType
    {
        /// <summary>
        /// 状态类记录
        /// </summary>
        State,

        /// <summary>
        /// 故障类记录
        /// </summary>
        Alarm,

        /// <summary>
        /// 报警类记录
        /// </summary>
        Fault,

        /// <summary>
        /// 操作类记录
        /// </summary>
        Operation
    }
}

使用方式:

 logProvider.WriteLog("Error........", LogType.Alarm); 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值