zoukankan      html  css  js  c++  java
  • c# 多线程使用队列顺序写日志的类 (需要再优化)

    using System;
    using System.Collections.Generic;
    using System.Threading;
    
    public  class LogManager
    {
        /// <summary>
        /// 构造函数
        /// </summary>
        static LogManager ()
        {
            Start();
        }
    
        #region 队列方法
    
        /// <summary>
        /// 日志队列
        /// </summary>
        private static Queue<Log> ListQueue = new Queue<Log>();
    
        class Log
        {
            public string File { get; set; }
            public string Msg { get; set; }
        }
    
    
        public static void WriteLog(string logFile, string msg)
        {
            Log log = new Log()
            {
                File = logFile,
                Msg = msg
            };
    
            ListQueue.Enqueue(log);
        }
    
        private static void Start()//启动
        {
    
            WriteLog("ULog", "Start");
            Thread thread = new Thread(threadStart);
            thread.IsBackground = true;
            thread.Start();
    
        }
    
        private static void threadStart()
        {
            while (true)
            {
                if (ListQueue.Count > 0)
                {
                    try
                    {
                        ScanQueue();
                    }
                    catch (Exception ex)
                    {
                        throw;
                        //LO_LogInfo.WLlog(ex.ToString());
                    }
                }
                else
                {
                    //没有任务,休息3秒钟
                    Thread.Sleep(1000);
                }
            }
        }
        //要执行的方法
        private static void ScanQueue()
        {
            while (ListQueue.Count > 0)
            {
                try
                {
                    //从队列中取出
                    Log log = ListQueue.Dequeue();
                    ThreadLog(log.File, log.Msg);
    
                    //Console.WriteLine(queueinfo.feedid);
                    //取出的queueinfo就可以用了,里面有你要的东西
                    //以下就是处理程序了
                    //。。。。。。
    
                }
                catch (Exception ex)
                {
                    throw;
                }
            }
        }
    
        #endregion
    
        private static string logPath = string.Empty;
    
        /// <summary>
        /// 保存日志的文件夹
        /// </summary>
        public static string LogPath
        {
            get
            {
                if (logPath == string.Empty)
                {
                    if (System.Web.HttpContext.Current == null)
                        // Windows Forms 应用
                        logPath = AppDomain.CurrentDomain.BaseDirectory + @"Logs";
                    else
                        // Web 应用
                        logPath = AppDomain.CurrentDomain.BaseDirectory + @"Logs";
                }
                return logPath;
            }
            set { logPath = value; }
        }
    
        private static string logFielPrefix = string.Empty;
        /// <summary>
        /// 日志文件前缀
        /// </summary>
        public static string LogFielPrefix
        {
            get { return logFielPrefix; }
            set { logFielPrefix = value; }
        }
    
    
        /// <summary>
        /// 写日志
        /// </summary>
        private  static void ThreadLog(string logFile, string msg)
        {
            try
            {
                System.IO.StreamWriter sw = System.IO.File.AppendText(
                    LogPath + DateTime.Now.ToString("yyyyMMdd") +
                    LogFielPrefix + " " + logFile + ".Log"
    
                    );
                sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff : ") + msg);
                sw.Close();
            }
            catch
            { }
        }
    
        /// <summary>
        /// 写日志
        /// </summary>
        public static void WriteLog(LogFile logFile, string msg)
        {
            WriteLog(logFile.ToString(), msg);
        }
    }
    
    /// <summary>
    /// 日志类型
    /// </summary>
    public enum LogFile
    {
        Trace,
        Warning,
        Error,
        SQL
    }
    

      

  • 相关阅读:
    Sokect简单入门(1)TCP协议一
    Tomcat内存溢出 解决方法
    服务器配置 ssl 证书,Nginx配置
    优秀的博客文章记录
    SpringBoot实现优雅的关机
    关于 redis 的 数据类型 和 内存模型
    微信, qq 支付宝 等相关开发 资源 记录
    设计模式 之 单列设计模式
    Swagger
    MQ服务器奔溃解决过程
  • 原文地址:https://www.cnblogs.com/wujiangling/p/10015762.html
Copyright © 2011-2022 走看看