/// <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 warrant 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. }