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
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值