/// <summary>
        /// Write a message to the log file
        /// </summary>
        /// <param name="message"></param>
        public void WriteLogMessage(NiawaLogMessage message)
        {
            //open file stream
            _stream = new System.IO.StreamWriter(_filename, true);

            //build log message
            StringBuilder sb = new StringBuilder();

            //log date
            sb.Append(message.LogDate.ToString());
            //log type
            sb.Append("|");
            sb.Append(Enum.GetName(message.LogType.GetType(), message.LogType));
            //log message
            sb.Append("|");
            sb.Append(message.LogMessage);
            //log error message
            if (!(message.LogException == null))
            {
                sb.Append("|");
                sb.Append(message.LogException.Message);
                sb.Append(message.LogException.StackTrace);
            }

            //output log message to text file
            _stream.WriteLine(sb);
            IsStreamOpen = true;

            //TODO optimize by moving this to end of string of log messages being written
            CloseFile();
        }
        /// <summary>
        /// Write a message to the console
        /// </summary>
        /// <param name="message"></param>
        public void WriteLogMessage(NiawaLogMessage message)
        {
            //build log message
            StringBuilder sb = new StringBuilder();

            //log date
            sb.Append(message.LogDate.ToString());
            //log type
            sb.Append(" ");
            sb.Append(Enum.GetName(message.LogType.GetType(), message.LogType));
            //log message
            sb.Append(" ");
            sb.Append(message.LogMessage);
            //log error message
            if(!(message.LogException==null))
            {
                sb.Append(": ");
                sb.Append(message.LogException.Message);
                sb.Append(message.LogException.StackTrace);
            }

            //output log message to console
            Console.WriteLine(sb);
        }
 /// <summary>
 /// Instantiate NiawaLogMessageEventArgs and ID is auto-generated
 /// </summary>
 /// <param name="logMessage"></param>
 public NiawaLogMessageEventArgs(NiawaLogMessage logMessage)
 {
     ID = new Guid();
     LogMessage = logMessage;
 }
 /// <summary>
 /// Instantiate NiawaLogMessageEventArgs with explicit ID
 /// </summary>
 /// <param name="id"></param>
 /// <param name="logMessage"></param>
 public NiawaLogMessageEventArgs(Guid id, NiawaLogMessage logMessage)
 {
     ID = id;
     LogMessage = logMessage;
 }
 /// <summary>
 /// Add log message to be written asynchronously
 /// </summary>
 /// <param name="message">Log message to be written</param>
 public void Log(NiawaLogMessage message)
 {
     if (_logMessageTypeLogWriters.ContainsKey(message.LogType))
         _messages.Enqueue(message);
 }
 /// <summary>
 /// Raises a log event to any added listeners.
 /// </summary>
 /// <param name="message"></param>
 public void WriteLogMessage(NiawaLogMessage message)
 {
     //raise event
     if (NiawaLogMessageEvent != null)
         NiawaLogMessageEvent(this, new NiawaLogMessageEventArgs(message));
 }