From b3e85daf02f3ea6e4b4fc33defa1a4e2a7ae54dc Mon Sep 17 00:00:00 2001 From: Sean Dague Date: Wed, 6 Feb 2008 20:32:37 +0000 Subject: pass 1 on getting colors back to the console --- OpenSim/Framework/Console/OpenSimAppender.cs | 69 ++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 OpenSim/Framework/Console/OpenSimAppender.cs (limited to 'OpenSim/Framework') diff --git a/OpenSim/Framework/Console/OpenSimAppender.cs b/OpenSim/Framework/Console/OpenSimAppender.cs new file mode 100644 index 0000000..58d27d0 --- /dev/null +++ b/OpenSim/Framework/Console/OpenSimAppender.cs @@ -0,0 +1,69 @@ +using System; +using System.Text; +using System.Text.RegularExpressions; +using System.Globalization; + +using log4net.Core; +using log4net.Layout; +using log4net.Appender; +using log4net.Util; + +namespace OpenSim.Framework.Console +{ + public class OpenSimAppender : AnsiColorTerminalAppender + { + override protected void Append(LoggingEvent le) + { + string loggingMessage = RenderLoggingEvent(le); + string regex = @"^(?.*)\[(?\w+)\](?.*)"; + + Regex RE = new Regex(regex, RegexOptions.Multiline); + MatchCollection matches = RE.Matches(loggingMessage); + // Get some direct matches $1 $4 is a + if (matches.Count == 1) + { + System.Console.Write(matches[0].Groups["Front"].Value); + System.Console.Write("["); + + WriteColorText(DeriveColor(matches[0].Groups["Category"].Value), matches[0].Groups["Category"].Value); + System.Console.Write("]"); + System.Console.Write(matches[0].Groups["End"].Value); + } + else + { + System.Console.WriteLine(loggingMessage); + } + } + + private void WriteColorText(ConsoleColor color, string sender) + { + try + { + lock (this) + { + try + { + System.Console.ForegroundColor = color; + System.Console.Write(sender); + System.Console.ResetColor(); + } + catch (ArgumentNullException) + { + // Some older systems dont support coloured text. + System.Console.WriteLine(sender); + } + } + } + catch (ObjectDisposedException) + { + } + } + + private ConsoleColor DeriveColor(string input) + { + int colIdx = (input.ToUpper().GetHashCode() % 6) + 9; + return (ConsoleColor) colIdx; + } + + } +} \ No newline at end of file -- cgit v1.1