示例#1
0
        /// <summary>
        /// Formats a message to and sends it to the writer.
        /// </summary>
        /// <param name="message">The message content.</param>
        /// <param name="logLevel">The mesasge type.</param>
        /// <param name="showStackTrace">If true includes a stack trace.</param>
        private void LogMessage(string content, LogLevel level, bool showStackTrace)
        {
            // Include a stack trace if desired
            string stackTrace = null;

            if (showStackTrace)
            {
                string[] lines = Environment.StackTrace.Split(NEW_LINES, StringSplitOptions.RemoveEmptyEntries);

                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < lines.Length; i++)
                {
                    // Don't include the function calls in the logger in the stack trace, as it is not useful
                    if (i > 2 && !lines[i].Contains(typeof(Logger).FullName))
                    {
                        sb.AppendLine(lines[i]);
                    }
                }
                stackTrace = sb.ToString();
            }

            LogMessage message = new LogMessage(level, content, stackTrace);

            // Don't write error messages asynchronously as that helps ensure the message is
            // still logged in case of a fatal error.
            if (level != LogLevel.Error && WRITE_ASNYCHRONOUSLY)
            {
                m_writer.BufferMessage(message);
            }
            else
            {
                m_writer.WriteSynchronous(message);
            }
        }