/* * QUANTCONNECT.COM - Democratizing Finance, Empowering Individuals. * Lean Algorithmic Trading Engine v2.0. Copyright 2014 QuantConnect Corporation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ using System; using System.Collections.Concurrent; using System.Globalization; using System.IO; namespace QuantConnect.Logging { /// /// ILogHandler implementation that queues all logs and writes them when instructed. /// public class QueueLogHandler : ILogHandler { private readonly ConcurrentQueue _logs; private const string DateFormat = "yyyyMMdd HH:mm:ss"; private readonly TextWriter _trace; private readonly TextWriter _error; /// /// Public access to the queue for log processing. /// public ConcurrentQueue Logs { get { return _logs; } } /// /// LOgging event delegate /// public delegate void LogEventRaised(LogEntry log); /// /// Logging Event Handler /// public event LogEventRaised LogEvent; /// /// Initializes a new instance of the class. /// public QueueLogHandler() { _logs = new ConcurrentQueue(); _trace = Console.Out; _error = Console.Error; } /// /// Write error message to log /// /// The error text to log public void Error(string text) { var log = new LogEntry(text, DateTime.UtcNow, LogType.Error); _logs.Enqueue(log); OnLogEvent(log); Console.ForegroundColor = ConsoleColor.Red; _error.WriteLine(DateTime.Now.ToString(DateFormat, CultureInfo.InvariantCulture) + " Error:: " + text); Console.ResetColor(); } /// /// Write debug message to log /// /// The debug text to log public void Debug(string text) { var log = new LogEntry(text, DateTime.UtcNow, LogType.Debug); _logs.Enqueue(log); OnLogEvent(log); _trace.WriteLine(DateTime.Now.ToString(DateFormat, CultureInfo.InvariantCulture) + " Debug:: " + text); } /// /// Write debug message to log /// /// The trace text to log public void Trace(string text) { var log = new LogEntry(text, DateTime.UtcNow, LogType.Trace); _logs.Enqueue(log); OnLogEvent(log); _trace.WriteLine(DateTime.Now.ToString(DateFormat, CultureInfo.InvariantCulture) + " Trace:: " + text); } /// /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. /// /// 2 public void Dispose() { } /// /// Raise a log event safely /// protected virtual void OnLogEvent(LogEntry log) { var handler = LogEvent; if (handler != null) { handler(log); } } } }