mirror of
https://github.com/opensim/opensim.git
synced 2026-05-19 14:35:44 +08:00
69 lines
2.1 KiB
C#
69 lines
2.1 KiB
C#
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 = @"^(?<Front>.*)\[(?<Category>\w+)\](?<End>.*)";
|
|
|
|
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;
|
|
}
|
|
|
|
}
|
|
} |