using System;using System.Collections;using System.IO;using System.Text;using System.Threading;using System.Windows.Threading;
namespace
Helper
{
public
static
class
LogHelper
{
private
static
readonly Queue LogQueue =
new
Queue();
private
static
bool _isStreamClose = true;
private
static
bool _isThreadBegin = false;
private
static
StreamWriter _fileStreamWriter;
private
static
readonly string fileName =@
"BugLog.txt"
;
static
int _intervalTime = 10000;
{string logContent = $
"[{DateTime.Now:yyyy-MM-dd hh:mm:ss}] =>{message}"
;
LogQueue.Enqueue(logContent);
if
(!_isThreadBegin)
{
BeginThread();
}
}
public
static
void AddLog(Exception ex)
{
var
logContent = $
"[{DateTime.Now:yyyy-MM-dd hh:mm:ss}]错误发生在:{ex.Source},\r\n 内容:{ex.Message}"
;
logContent += $
"\r\n 跟踪:{ex.StackTrace}"
;
LogQueue.Enqueue(logContent);
if
(!_isThreadBegin)
{
BeginThread();
}
}
{
return
LogQueue.Dequeue();
}
{
_isThreadBegin = true;
_timer.Elapsed += SetLog;
}
{
if
(LogQueue.
Count
== 0)
{
if
(_isStreamClose)
return
;
_fileStreamWriter.
Flush
();
_fileStreamWriter.Close();
_isStreamClose = true;
return
;
}
if
(_isStreamClose)
{
Isexist();string errLogFilePath = Environment.CurrentDirectory + @"\Log\" + fileName.Trim();
if
(!File.Exists(errLogFilePath))
{
FileStream fs1 =
new
FileStream(errLogFilePath, FileMode.Create, FileAccess.Write);
_fileStreamWriter =
new
StreamWriter(fs1);
}
else
{
_fileStreamWriter =
new
StreamWriter(errLogFilePath, true);
}
_isStreamClose = false;
}
var
strLog =
new
StringBuilder();
var
onceTime = 50;
var
lineNum = LogQueue.
Count
> onceTime ? onceTime : LogQueue.
Count
;
for
(
var
i = 0; i < lineNum; i++)
{
strLog.AppendLine(GetLog().ToString());
}
_fileStreamWriter.WriteLine(strLog.ToString());
}
{string path = Environment.CurrentDirectory + @"\Log\";
if
(!File.Exists(path))
{
Directory.CreateDirectory(path);
}
}
}
}