LogHelp 日记分天记录,只记30天日记

public class LogHelp
    {
        /// <summary>
        /// 一天第几个日记文件
        /// </summary>
        private static int _OneDayI = 1;
        /// <summary>
        /// 1只写异常日记,2只写过程日记,4只写测试数据,3=异常+过程,以此类推
        /// 0不写日记,7全部日记
        /// </summary>
        private static int LogMode = 7;
        /// <summary>
        /// 文件名最前面
        /// </summary>
        public static string No = "";
        private static object Block = new object();
        static object synObj = new object();
        /// <summary>
        /// 处理缓存控制器
        /// </summary>
        private static Queue<LogMsg> _HandleCacheCr = new Queue<LogMsg>();

        public static void Init(int logMode)
        {
            LogMode = logMode;
            //if (LogMode == 1)
            //{
            //    Thread td = new Thread(WriteLogThread);
            //    td.Start();
            //}
        }

        private static void WriteLogThread()
        {
            while (LogMode == 1)
            {
                WriteLog();
                Thread.Sleep(1);
            }
        }

        private static void WriteLog()
        {
            if (_HandleCacheCr.Count <= 0) return;
            LogMsg logMsg;
            lock (synObj)
            {
                logMsg = _HandleCacheCr.Dequeue();
            }
            //Write_Log(logMsg.Time.ToString("yyyy-MM-dd HH:mm:ss:ffff") + "   " + logMsg.Msg);
        }

        #region 记录日志
        //public static void WriteLog(string msg)
        //{
        //    if (LogMode != 1) return;
        //    LogMsg logMsg = new LogMsg();
        //    logMsg.Time = DateTime.Now;
        //    logMsg.Msg = msg;
        //    //锁定队列集合,然后插入
        //    lock (synObj)
        //    {
        //        _HandleCacheCr.Enqueue(logMsg);
        //    }

        //}
        /// <summary>
        /// 记录日志
        /// </summary>
        /// <param name="msg"></param>
        public static void WriteLog(string msg, LogType logType = LogType.EXCEPTION)
        {
            int logInt = (int)logType;
            if ((LogMode & 0x01) != logInt && (LogMode & 0x02) != logInt && (LogMode & 0x04) != logInt) return;
            //string path = @"C:\log.txt";
            lock (Block)
            {
                string filename = No + DateTime.Now.ToString("yyyyMMdd");
                //该日志文件会存在windows服务程序目录下
                string path = AppDomain.CurrentDomain.BaseDirectory + "\\Logs\\" + filename + ".txt";
                if (!Directory.Exists(path))//如果不存在,则创建
                {

                    Directory.CreateDirectory(AppDomain.CurrentDomain.BaseDirectory + "\\Logs\\");
                }
                #region 删除前30天的日记
                string sYue = DateTime.Now.AddDays(-90).ToString("yyyyMMdd");

                string[] files = Directory.GetFiles(AppDomain.CurrentDomain.BaseDirectory + "\\Logs", sYue + "*.txt");
                files.ToList().ForEach(x => FileHelp.DeleteFile(x));
                //FileHelp.DeleteFile(AppDomain.CurrentDomain.BaseDirectory + "\\Logs\\" + sYue + ".txt");
                #endregion



                FileInfo file = new FileInfo(path);
                if (!file.Exists)
                {
                    _OneDayI = 1;
                    FileStream fs;
                    fs = File.Create(path);
                    fs.Close();
                }
                else if (file.Length > 30 * 1000 * 1000)
                {
                    FileStream fs;

                    string destinationFile = "";
                    destinationFile = AppDomain.CurrentDomain.BaseDirectory + "\\Logs\\" + filename + "_" + _OneDayI + @".txt";
                    //判断文件是否存在,如果存在,则继续换名称
                    while (File.Exists(destinationFile))
                    {
                        _OneDayI++;
                        destinationFile = AppDomain.CurrentDomain.BaseDirectory + "\\Logs\\" + filename + "_" + _OneDayI + @".txt";
                    }
                    fs = File.Create(destinationFile);
                    fs.Close();

                    file.CopyTo(destinationFile, true);
                    file.Delete();

                    fs = File.Create(path);
                    fs.Close();
                    _OneDayI++;
                }

                using (FileStream fs = new FileStream(path, FileMode.Append, FileAccess.Write))
                {
                    using (StreamWriter sw = new StreamWriter(fs))
                    {
                        sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:ffff") + "   " + msg);
                    }
                }
            }
        }


        #endregion
        /// <summary>
        /// 日记类型
        /// </summary>
        public enum LogType
        {
            /// <summary>
            /// 异常
            /// </summary>
            EXCEPTION = 1,
            /// <summary>
            /// 过程
            /// </summary>
            PROCEDURE = 2,
            /// <summary>
            /// 测试
            /// </summary>
            TEST = 4
        }
        public class LogMsg
        {
            /// <summary>
            /// 写日记的时间
            /// </summary>
            public DateTime Time { get; set; }
            /// <summary>
            /// 信息
            /// </summary>
            public string Msg { get; set; }
        }

    }

 

posted @ 2018-05-10 16:22  三小  阅读(360)  评论(0编辑  收藏  举报