+++ /dev/null
-//
-// Radegast Metaverse Client
-// Copyright (c) 2009, Radegast Development Team
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are met:
-//
-// * Redistributions of source code must retain the above copyright notice,
-// this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the application "Radegast", nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-//
-// $Id$
-//
-using OpenMetaverse;
-
-namespace Radegast
-{
- public class DebugLogMessage
- {
- private string message;
- private Helpers.LogLevel level;
-
- public DebugLogMessage(string message, Helpers.LogLevel level)
- {
- this.message = message;
- this.level = level;
- }
-
- public string Message
- {
- get { return message; }
- }
-
- public Helpers.LogLevel Level
- {
- get { return level; }
- }
- }
-}
//
using System;
using System.IO;
-using System.Text.RegularExpressions;
using log4net.Appender;
using log4net.Core;
/// </summary>
public class RadegastAppender : AnsiColorTerminalAppender
{
- override protected void Append(LoggingEvent le)
- {
- try
- {
- string loggingMessage = RenderLoggingEvent(le);
+ #region Events
+ private static EventHandler<LogEventArgs> m_Log;
- string regex = @"^(?<Front>.*?)\[(?<Category>[^\]]+)\]:?(?<End>.*)";
+ protected static void OnLog(object sender, LogEventArgs e)
+ {
+ EventHandler<LogEventArgs> handler = m_Log;
+ if (handler != null)
+ try { handler(sender, e); }
+ catch { }
+ }
- Regex RE = new Regex(regex, RegexOptions.Multiline);
- MatchCollection matches = RE.Matches(loggingMessage);
+ private static readonly object m_LogLock = new object();
- // Get some direct matches $1 $4 is a
- if (matches.Count == 1)
- {
- System.Console.Write(matches[0].Groups["Front"].Value);
- System.Console.Write("[");
+ /// <summary>Raised when the GridClient object in the main Radegast instance is changed</summary>
+ public static event EventHandler<LogEventArgs> Log
+ {
+ add { lock (m_LogLock) { m_Log += value; } }
+ remove { lock (m_LogLock) { m_Log -= value; } }
+ }
+ #endregion Events
- WriteColorText(DeriveColor(matches[0].Groups["Category"].Value), matches[0].Groups["Category"].Value);
- System.Console.Write("]:");
+ protected override void Append(LoggingEvent le)
+ {
+ try
+ {
+ if (m_Log != null)
+ OnLog(this, new LogEventArgs(le));
+
+ Console.Write("{0} [", le.TimeStamp.ToString("HH:mm:ss"));
+ WriteColorText(DeriveColor(le.Level.Name), le.Level.Name);
+ Console.Write("]: - ");
- if (le.Level == Level.Error)
- {
- WriteColorText(ConsoleColor.Red, matches[0].Groups["End"].Value);
- }
- else if (le.Level == Level.Warn)
- {
- WriteColorText(ConsoleColor.Yellow, matches[0].Groups["End"].Value);
- }
- else
- {
- System.Console.Write(matches[0].Groups["End"].Value);
- }
- System.Console.WriteLine();
+ if (le.Level == Level.Error)
+ {
+ WriteColorText(ConsoleColor.Red, le.MessageObject.ToString());
+ }
+ else if (le.Level == Level.Warn)
+ {
+ WriteColorText(ConsoleColor.Yellow, le.MessageObject.ToString());
}
else
{
- System.Console.WriteLine(loggingMessage);
+ Console.Write(le.MessageObject.ToString());
}
+ Console.WriteLine();
if (RadegastInstance.GlobalInstance.GlobalLogFile != null)
- File.AppendAllText(RadegastInstance.GlobalInstance.GlobalLogFile, loggingMessage + Environment.NewLine);
+ File.AppendAllText(RadegastInstance.GlobalInstance.GlobalLogFile, RenderLoggingEvent(le) + Environment.NewLine);
}
catch (Exception) { }
}
{
try
{
- System.Console.ForegroundColor = color;
- System.Console.Write(sender);
- System.Console.ResetColor();
+ Console.ForegroundColor = color;
+ Console.Write(sender);
+ Console.ResetColor();
}
catch (ArgumentNullException)
{
// Some older systems dont support coloured text.
- System.Console.WriteLine(sender);
+ Console.WriteLine(sender);
}
}
}
return (ConsoleColor)colIdx;
}
}
+
+ public class LogEventArgs : EventArgs
+ {
+ public LoggingEvent LogEntry;
+
+ public LogEventArgs(LoggingEvent e)
+ {
+ LogEntry = e;
+ }
+ }
}