82 lines
1.8 KiB
C#
82 lines
1.8 KiB
C#
|
#define TRACE
|
||
|
using System;
|
||
|
using System.Diagnostics;
|
||
|
using Aitex.Core.Util;
|
||
|
using log4net.Core;
|
||
|
|
||
|
namespace Aitex.Core.RT.Log
|
||
|
{
|
||
|
public class LogManager : ICommonLog
|
||
|
{
|
||
|
private PeriodicJob _loggingJob;
|
||
|
|
||
|
private FixSizeQueue<LogItem> _logQueue;
|
||
|
|
||
|
private LogWriter _writer;
|
||
|
|
||
|
public void Initialize()
|
||
|
{
|
||
|
_logQueue = new FixSizeQueue<LogItem>(1000);
|
||
|
_loggingJob = new PeriodicJob(300, PeriodicRun, "Save Log Job", isStartNow: true);
|
||
|
_writer = new LogWriter();
|
||
|
LOG.InnerLogger = this;
|
||
|
}
|
||
|
|
||
|
public void Terminate()
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
if (_loggingJob != null)
|
||
|
{
|
||
|
_loggingJob.Stop();
|
||
|
_loggingJob = null;
|
||
|
}
|
||
|
}
|
||
|
catch (Exception ex)
|
||
|
{
|
||
|
Trace.WriteLine(ex.Message);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public void Info(string message, bool isTraceOn, string stackFile)
|
||
|
{
|
||
|
CacheLog(message, Level.Info, null, isTraceOn, stackFile);
|
||
|
}
|
||
|
|
||
|
public void Warning(string message, string stackFile)
|
||
|
{
|
||
|
CacheLog(message, Level.Warn, null, isTraceOn: true, stackFile);
|
||
|
}
|
||
|
|
||
|
public void Error(string message, string stackFile)
|
||
|
{
|
||
|
CacheLog(message, Level.Error, null, isTraceOn: true, stackFile);
|
||
|
}
|
||
|
|
||
|
public void Warning(string message, Exception ex, string stackFile)
|
||
|
{
|
||
|
CacheLog(message, Level.Warn, ex, isTraceOn: true, stackFile);
|
||
|
}
|
||
|
|
||
|
public void Error(string message, Exception ex, string stackFile)
|
||
|
{
|
||
|
CacheLog(message, Level.Error, ex, isTraceOn: true, stackFile);
|
||
|
}
|
||
|
|
||
|
private bool PeriodicRun()
|
||
|
{
|
||
|
LogItem obj;
|
||
|
while (_logQueue.TryDequeue(out obj))
|
||
|
{
|
||
|
string text = _writer.Write(obj);
|
||
|
}
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
private void CacheLog(string message, Level level, Exception exception, bool isTraceOn, string stackFile)
|
||
|
{
|
||
|
_logQueue.Enqueue(new LogItem(message, new StackTrace(fNeedFileInfo: true).GetFrame(5), level, exception, stackFile));
|
||
|
}
|
||
|
}
|
||
|
}
|