Esempio n. 1
0
        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.
        }
Esempio n. 2
0
 /// <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));
     }
 }
Esempio n. 3
0
        /// <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
            }
        }
Esempio n. 4
0
        /// <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.
        }