版权声明:本文为博主原创文章,未经博主允许不得转载。 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()是创建日志文件。