C#实现日志记录 支持按日期多文件保存

日志记录类LogHelper,支持按照日期保存,保存的信息带时间信息,具体的日志内容如下:

2016-12-08 23:56:45:787 [Notice]sadfsafasfffffffffffffffffffffffffffffffffffffffff

2016-12-08 23:56:45:787 [Notice]sadfsafasfffffffffffffffffffffffffffffffffffffffff

2016-12-08 23:56:45:787 [Notice]sadfsafasfffffffffffffffffffffffffffffffffffffffff

2016-12-08 23:56:45:787 [Notice]sadfsafasfffffffffffffffffffffffffffffffffffffffff

2016-12-08 23:56:45:787 [Notice]sadfsafasfffffffffffffffffffffffffffffffffffffffff

2016-12-08 23:56:45:787 [Notice]sadfsafasfffffffffffffffffffffffffffffffffffffffff

具体实现方式是创建一个队列存放要写入到文件中的数据,在一个Task里面把内容再写入文件中。写入文件的方式是写入文件时打开文件写完后关闭文件,如果采用把文件打开一直写入的方式,在使用其他程序打开文件时会造成文件被另外一个进程使用的问题。
Task中在一个While循环内从队列取数据写入文件,如果没有就Sleep,代码如下:

        void WriteLogFunc()
        {
            while(true)
            {
                if (CurrentLogCount() > 0)
                {
                    string strWriteLog = GetLog();
                    WriteLogToFile(strWriteLog);
                }
                else
                    Thread.Sleep(1000);
            }
        }

写文件的代码如下:

        void WriteLogToFile(string writeLog)
        {
            if (!IsDirectoryExist())
                return;
            if (!IsLastFileExist())
                return;
            string writeFilePath = dicPath + "\\" + FileList.Last();
            if(IsLogContentOutOfSize(writeFilePath,writeLog))
            {
                if(!IsCreateLogFile(ref writeFilePath))
                {
                    return;
                }
            }
            FileStream fstream = null;
            StreamWriter streamWriter = null;
            try
            {
                fstream = new FileStream(writeFilePath,FileMode.Append,FileAccess.Write,FileShare.ReadWrite);
                streamWriter = new StreamWriter(fstream,Encoding.UTF8);
                streamWriter.WriteLine(writeLog);
                streamWriter.Flush();
            }
            catch(Exception e)
            {

            }
            finally
            {
                streamWriter?.Close();
                fstream?.Close();
            }
        }

IsLogContentOutOfSize()是判断写入的内容有没有超过文件大小限制,IsLastFileExist()是判断日志文件夹中是否由日志文件,IsCreateLogFile()是创建日志文件。

代码下载

posted on 2016-12-09 00:24 sanyu 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/sanyu/p/9954420.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值