Sic.Framework/MECF.Framework.Common/Aitex/Core/RT/Log/LogManager.cs

82 lines
1.8 KiB
C#
Raw Normal View History

#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));
}
}
}