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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/SANYUNI/article/details/53527695

日志记录类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()是创建日志文件。

代码下载

猜你喜欢

转载自blog.csdn.net/SANYUNI/article/details/53527695