private static LogLevel currentLogLevel = LogLevel.debug; // TODO default to Info when this class is implimented. #endregion Fields #region Methods /// <summary> /// Log message. /// </summary> /// <param name="message"> /// The message. /// </param> public static void LogMessage(LogMessage message) { if (message.LogLevel <= currentLogLevel) { //Debug.WriteLine(message.Content); } // TODO cache logging. }
/// <summary> /// Called when a log message is created. /// </summary> /// <param name="msg"> /// The Log Message /// </param> protected virtual void OnMessageLogged(LogMessage msg) { var onMessageLogged = this.MessageLogged; if (onMessageLogged != null) { onMessageLogged.Invoke(this, new LogEventArgs(msg)); } }
/// <summary> /// Helper method for logging content to disk /// </summary> /// <param name="msg"> /// Log message to write. /// </param> private void LogMessageToDisk(LogMessage msg) { if (!this.isDiskLoggingEnabled) { return; } try { lock (this.FileWriterLock) { if (this.fileWriter != null && this.fileWriter.BaseStream.CanWrite) { this.fileWriter.WriteLine(msg.Content); } } } catch (Exception exc) { Debug.WriteLine(exc); // This exception doesn't warrent user interaction, but it should be logged } }
/// <summary> /// Log message. /// </summary> /// <param name="content"> /// The content. /// </param> /// <param name="type"> /// The type. /// </param> /// <param name="level"> /// The level. /// </param> public void LogMessage(string content, LogMessageType type, LogLevel level) { if (!this.isLoggingEnabled) { return; } if (level >= this.currentLogLevel) { return; } LogMessage msg = new LogMessage(content, type, level, this.messageIndex); lock (this.lockObject) { this.messageIndex = this.messageIndex + 1; this.logMessages.Add(msg); this.logBuilder.AppendLine(msg.Content); this.LogMessageToDisk(msg); if (this.logMessages.Count > 50000) { this.messageIndex = this.messageIndex + 1; msg = new LogMessage( "Log Service Pausing. Too Many Log messages. This may indicate a problem with your encode.", LogMessageType.Application, LogLevel.Error, this.messageIndex); this.logMessages.Add(msg); this.logBuilder.AppendLine(msg.Content); this.LogMessageToDisk(msg); this.Disable(); } } this.OnMessageLogged(msg); // Must be outside lock to be thread safe. }