• 日志帮助类


    从网上找了些资源,借鉴整理之后,自己随便写了一个。

        public class LogHelper
        {
            #region 构造函数、析构函数、单一实体
    
            private LogHelper() 
            {
                _threadWriteLog = new Thread(new ThreadStart(WriteLog));
                _threadWriteLog.Start();
            }
    
            ~LogHelper()
            {
                if (_threadWriteLog != null)
                {
                    _threadWriteLog.Abort();
                    _threadWriteLog = null;
                }
            }
    
            private static LogHelper logHelper;
            private static readonly object sysRoot = new object();
            /// <summary>
            /// 日志类的单一实体
            /// </summary>
            public static LogHelper LogHelperSingle
            {
                get
                {
                    if (logHelper == null)
                    {
                        lock (sysRoot)
                        {
                            if (logHelper == null)
                            {
                                logHelper = new LogHelper();
                            }
                        }
                    }
                    return logHelper;
                }
            }
    
            #endregion
    
            #region 属性
    
            private string _path = string.Empty;
            /// <summary>
            /// 日志路径
            /// </summary>
            public string LogPath
            {
                set { this._path = value; }
                get
                {
                    if (string.IsNullOrEmpty(this._path))
                    {
                        this._path = string.Format("{0}\Log", Application.StartupPath);
                    }
                    return this._path;
                }
            }
    
            private string _logName;
            /// <summary>
            /// 日志名称
            /// </summary>
            public string LogName
            {
                set { this._logName = value; }
                get
                {
                    if (string.IsNullOrEmpty(this._logName))
                    {
                        DateTime t = DateTime.Now;
                        this._logName = string.Format("{0}{1}{2}.txt", t.Year, t.Month, t.Day);
                    }
                    return this._logName;
                }
            }
            /// <summary>
            /// 日志信息
            /// </summary>
            private List<string[]> _logInfo = new List<string[]>();
            /// <summary>
            /// 写日志线程
            /// </summary>
            Thread _threadWriteLog = null;
    
            #endregion
    
            #region 对外方法
    
            /// <summary>
            /// 写日志
            /// </summary>
            /// <param name="exc">错误</param>
            /// <param name="fileName">try...catch 所在页面</param>
            public void WriteErrorLog(Exception exc, string fileName)
            {
                string[] log = GetErrorLogInfo(exc, fileName);
                this._logInfo.Add(log);
            }
    
            /// <summary>
            /// 记录常规日志
            /// </summary>
            /// <param name="message">日志信息</param>
            public void WriteRoutineLog(string message)
            {
                string[] log = GetRoutineLog(message);
                this._logInfo.Add(log);
            }
    
            #endregion
    
            #region 对内方法
    
            /// <summary>
            /// 记录日志
            /// </summary>
            private void WriteLog()
            {
                while (true)
                {
                    Thread.Sleep(200);
                    if (_logInfo.Count > 0)
                    {
                        string[] info = _logInfo[0];
                        WriteLog(info, this.LogPath, this.LogName);
                        this._logInfo.RemoveAt(0);             
                    }
                }
            }
    
            /// <summary>
            /// 得到异常信息的字符串数组
            /// </summary>
            /// <param name="exc">异常对象</param>
            /// <returns>字符串数组</returns>
            private string[] GetErrorLogInfo(Exception exc, string fileName)
            {
                string[] info = new string[7];
                info[0] = string.Format("记录时间:{0}", DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"));
                info[1] = string.Format("异常实例:{0}", exc.InnerException != null ? exc.InnerException.ToString() : string.Empty);
                info[2] = string.Format("try..catch所在页面:{0}", fileName);
                info[3] = string.Format("引发异常的方法:{0}", exc.TargetSite.ToString());
                info[4] = string.Format("导致错误的应用程序或对象的名称:{0}", exc.Source);
                info[5] = string.Format("错误信息:{0}", exc.Message);
                info[6] = string.Empty;
                return info;
            }
    
            /// <summary>
            /// 得到常规日志记录
            /// </summary>
            /// <param name="message">日志信息</param>
            private string[] GetRoutineLog(string message)
            {
                string[] log = new string[3];
                log[0] = string.Format("记录时间:{0}", DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"));
                log[1] = string.Format("记录信息:{0}", message);
                log[2] = string.Empty;
                return log;
            }
    
            /// <summary>
            /// 记录日志
            /// </summary>
            /// <param name="log">日志信息</param>
            /// <param name="path">日志路径</param>
            /// <param name="logName">日志名称</param>
            private void WriteLog(string[] log, string path, string logName)
            {
                string fullName = string.Format(@"{0}{1}", path.TrimEnd('\'), logName);
                if (!File.Exists(fullName))
                {
                    if (!Directory.Exists(path))
                    {
                        Directory.CreateDirectory(path);
                    }
                    using (FileStream fs = new FileStream(fullName, FileMode.Create))
                    {
                        using (StreamWriter sw = new StreamWriter(fs))
                        {
                            for (int i = 0; i < log.Length; i++)
                            {
                                sw.WriteLine(log[i]);
                            }
                        }
                    }
                }
                else
                {
                    using (FileStream fs = new FileStream(fullName, FileMode.Append))
                    {
                        using (StreamWriter sw = new StreamWriter(fs))
                        {
                            for (int i = 0; i < log.Length; i++)
                            {
                                sw.WriteLine(log[i]);
                            }
                        }
                    }
                }
            }
    
            #endregion
        }
  • 相关阅读:
    运维工程师的四个阶段
    必须知道的Linux内核常识详解
    Centos7/RHEL7 开启kdump
    sort实现ip排序
    如何判断是否开启超线程
    Django---进阶12
    Django---进阶11
    前端---进阶8
    前端---进阶7
    前端---进阶6
  • 原文地址:https://www.cnblogs.com/rogation/p/3419055.html
Copyright © 2020-2023  润新知