自己写的一个C#日志管理类

本文介绍了一个使用C#编写的自定义日志管理类,旨在方便地记录和管理应用程序的日志信息,提高软件的可维护性和问题排查效率。
使用方法:在任意界面下调用LogsSystem.Instance.Print(string[,LogLevel]);函数即可。string是要输入的日志记录,LogLevel是日志等级。有信息(INFO)、警告(WARN)、错误(ERROR)三个等级
在WPF模式下将listbox赋值给类内部用于对外部显示。如不需要对外显示可以删除AddLogItemInvoke与相关函数或用其他函数如Print代替

下面是代码:

public class LogsSystem
{
    #region 单例模式
    private static LogsSystem _instance;
    public static LogsSystem Instance
    {
        get
        {
            if (_instance == null)
            {
                _instance = new LogsSystem();
            }
            return _instance;
        }
    }
    #endregion
 
    private string logDate;
    private string logPath;
    private string logFileName;
    private ListBox listBox;
 
    public LogsSystem()
    {
        SetLogFileInfo();
        listBox = MainWindow.instance.LogList;
    }
 
    /// <summary>
    /// 设置文件IO的信息
    /// logDate:日期
    /// logPath:文件夹地址
    /// logFileName:日志文件完整地址
    /// </summary>
    private void SetLogFileInfo()
    {
        try
        {
            logDate = DateTime.Now.ToString("yyyy-MM-dd");
            logPath = Environment.CurrentDirectory + "/Logs/";
            logFileName = logPath + logDate + ".log";
        }
        catch (Exception ex)
        {
            AddLogItemInvoke("发生异常:" + ex);
        }
    }
 
    /// <summary>
    /// 用于跨天数的日志记录更改
    /// 每次调用文件时先调用该函数检查一遍日期是否更换
    /// </summary>
    private void CheckLogFileInfo()
    {
        if (logDate != DateTime.Now.ToString("yyyy-MM-dd"))
        {
            SetLogFileInfo();//重新设置文件信息
        }
    }
 
    /// <summary>
    /// 打印日志
    /// </summary>
    /// <param name="mainLog">日志主体内容</param>
    /// <param name="level">日志等级</param>
    public void Print(string mainLog, LogLevel level = LogLevel.INFO)
    {
        CheckLogFileInfo();//检查是否已经更换日期了
        try
        {
            string log = string.Format("[{0} {1}] : {2}", DateTime.Now.ToString("HH:mm:ss"), level.ToString(), mainLog);
 
            //写入数据
            FileStream fs = new FileStream(logFileName, FileMode.Append);
            StreamWriter sw = new StreamWriter(fs);
            sw.WriteLine(log);
            sw.Close();
            fs.Close();
 
            //写入控制台
            if (listBox != null)
            {
                AddLogItemInvoke(log);
            }
        }
        catch (IOException ie)
        {
            if (listBox != null)
            {
                AddLogItemInvoke("发生文件IO错误:" + ie);
            }
        }
        catch (Exception ex)
        {
            if (listBox != null)
            {
                AddLogItemInvoke("发生文件异常:" + ex);
            }
        }
    }
 
    #region 多线程写入控件委托
    private delegate void AddLogItemDelegate(ListBox listbox, string log);
    private void AddLogItem(ListBox listbox, string log)
    {
        listbox.Items.Add(log);
        listbox.ScrollIntoView(listbox.Items.GetItemAt(listbox.Items.Count - 1));
    }
 
    private void AddLogItemInvoke(string log)
    {
        MainWindow.instance.Dispatcher.BeginInvoke(new AddLogItemDelegate(AddLogItem), this.listBox, log);
    }
    #endregion
 
    #region 对外接口
    /// <summary>
    /// 获取日志文件夹
    /// </summary>
    /// <returns>日志文件夹地址</returns>
    public string GetLogFileFolderDir()
    {
        CheckLogFileInfo();
        return logPath.Replace(@"\\",@"\").Replace(@"/",@"\");
    }
 
    /// <summary>
    /// 获取日志文件
    /// </summary>
    /// <returns>日志文件地址</returns>
    public string GetLogFileDir()
    {
        CheckLogFileInfo();
        return logFileName.Replace(@"\\", @"\").Replace(@"/", @"\");
    }
    #endregion
 
}
 
public enum LogLevel
{
    INFO = 0, WARN = 1, ERROR = 2
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值