• C#日志类


    public static class LogHelper
        {
            private static readonly Queue<Dictionary<string, string>> Que = new Queue<Dictionary<string, string>>();
            private static readonly Object Object = new Object();
            private static EnumLogLevel LogType { get; set; }
    
            static LogHelper()
            {
                ThreadPool.QueueUserWorkItem(s =>
                {
                    while (true)
                    {
                        if (Que.Count <= 0)
                        {
                            Thread.Sleep(5000);
                            continue;
                        }
                        lock (Object)
                        {
                            if (Que.Count <= 0)
                            {
                                Thread.Sleep(5000);
                                continue;
                            }
                            var currentDirectory = AppDomain.CurrentDomain.BaseDirectory;
                            var path = string.Format("{0}Logs\", currentDirectory);
                            if (!Directory.Exists(path)) { Directory.CreateDirectory(path); }
                            var fileName = Path.Combine(path, DateTime.Now.ToString("yyyy-MM-dd") + ".log");
                            using (var fs = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite))
                            {
                                using (var sw = new StreamWriter(fs))
                                {
                                    sw.BaseStream.Seek(0, SeekOrigin.End);
                                    var col = Que.Dequeue();
                                    foreach (KeyValuePair<string, string> m in col)
                                    {
                                        sw.WriteLine(m.Key + ":{0}", m.Value);
                                    }
                                    sw.Flush(); sw.Dispose(); sw.Close();
                                }
                            }
                        }
                    }
                });
            }
            public static string WriteLog(this string str, EnumLogLevel type = EnumLogLevel.Info)
            {
                var logLevel = ConfigurationManager.AppSettings["LogLevel"];
                var level = string.IsNullOrWhiteSpace(logLevel) ? EnumLogLevel.Info.ToString() : logLevel;
    
                if ((int)type < (int)Enum.Parse(typeof(EnumLogLevel), level))
                {
                    return string.Empty;
                }
                lock (Object)
                {
                    LogType = type;
                    var st = new StackTrace(new StackFrame(1, true));
                    StackFrame sf = st.GetFrame(0);
                    var dic = new Dictionary<string, string>
                    {
                        {"发生时间", DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss:ffff dddd")},
                        {"日志级别", LogType.ToString()},
                        {"日志消息", str},
                        {"当前方法", sf.GetMethod().Name},
                        {"发生位置", st.ToString()}
                    };
                    Que.Enqueue(dic);
                }
                return str;
            }
        }
    
        /// <summary>
        /// All: 表示最低的日志等级。
        /// Debug: 这个等级表示用于调试程序的正常的事件信息;
        /// Info: 默认的等级
        /// Warn: 表示可能对系统有损害的情况;
        /// Error: 表示较严重的错误等级,但是程序可以继续运行的信息;
        /// Fatal: 表示非常严重的错误等级,记录极有可能导致应用程序终止运行的致命错误信息;
        /// Off: 表示最高的等级,如果一个logger的等级标记为Off, 将不会记录任何信息;
        /// </summary>
        public enum EnumLogLevel
        {
            All,
            Debug,
            Info,
            Warn,
            Error,
            Fatal,
            Off
        }
    
  • 相关阅读:
    xtrabackup之Innobackupex全备数据库
    没有Where条件下group by走索引
    Oracle中查看无效的对象、约束、触发器和索引
    udev/raw/asmlib/多路径 配置asm
    自适应游标共享技术02(一个简单的例子来走近ACS)
    自适应游标共享技术03(常用分析脚本)
    监控进程是否存在
    MySQL运行状态show status详解
    MySQL 加锁处理分析
    使用RMAN验证备份的有效性
  • 原文地址:https://www.cnblogs.com/etoumao/p/12771445.html
Copyright © 2020-2023  润新知