#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 _logQueue; private LogWriter _writer; public void Initialize() { _logQueue = new FixSizeQueue(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)); } } }