OSDN Git Service

Refactor logging, added RadegastAppender.Log event
authorLatif Khalifa <latifer@streamgrid.net>
Thu, 20 May 2010 08:55:47 +0000 (08:55 +0000)
committerLatif Khalifa <latifer@streamgrid.net>
Thu, 20 May 2010 08:55:47 +0000 (08:55 +0000)
git-svn-id: https://radegast.googlecode.com/svn/trunk@641 f7a694da-4d33-11de-9ad6-1127a62b9fcd

Radegast/Core/DebugLogMessage.cs [deleted file]
Radegast/Core/RadegastLogger.cs
Radegast/Radegast.csproj

diff --git a/Radegast/Core/DebugLogMessage.cs b/Radegast/Core/DebugLogMessage.cs
deleted file mode 100644 (file)
index af9baf2..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-// 
-// 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; }
-        }
-    }
-}
index a656888..d3cb47e 100644 (file)
@@ -30,7 +30,6 @@
 //
 using System;
 using System.IO;
-using System.Text.RegularExpressions;
 using log4net.Appender;
 using log4net.Core;
 
@@ -41,47 +40,54 @@ namespace Radegast
     /// </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) { }
         }
@@ -94,14 +100,14 @@ namespace Radegast
                 {
                     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);
                     }
                 }
             }
@@ -116,5 +122,15 @@ namespace Radegast
             return (ConsoleColor)colIdx;
         }
     }
+
+    public class LogEventArgs : EventArgs
+    {
+        public LoggingEvent LogEntry;
+
+        public LogEventArgs(LoggingEvent e)
+        {
+            LogEntry = e;
+        }
+    }
 }
 
index f659b01..8fd632b 100644 (file)
     <Compile Include="Core\RLV\RLVManager.cs" />\r
     <Compile Include="Core\RLV\RLVRule.cs" />\r
     <Compile Include="Core\Settings.cs" />\r
-    <Compile Include="Core\DebugLogMessage.cs" />\r
     <Compile Include="Core\ListItems\RegionSearchResultItem.cs" />\r
     <Compile Include="Core\LSLKeywordParser.cs" />\r
     <Compile Include="Core\LSL\lsl.lexer.cs" />\r