2 using System.Diagnostics;
7 namespace Pithos.Client.WPF.Diagnostics
9 public class Log4NetForwarder : TraceListener
11 public override void Write(string message)
16 public override void Write(object o)
21 public override void Write(object o, string category)
23 WriteLine(o, category);
26 public override void Write(string message, string category)
28 WriteLine(message, category);
31 public override void WriteLine(string message)
33 Log(message, Level.Debug);
37 public override void WriteLine(object o)
39 Log(o.ToString(), Level.Debug);
42 public override void WriteLine(object o, string category)
44 using (ThreadContext.Stacks["Category"].Push(category))
46 Log(o.ToString(), Level.Debug);
50 public override void WriteLine(string message, string category)
52 using (ThreadContext.Stacks["Category"].Push(category))
54 Log(message, Level.Debug);
58 public override void Fail(string message)
60 Log(message, Level.Error);
63 public override void Fail(string message, string detailMessage)
65 Log(String.Format("{0} {1}", message, detailMessage), Level.Error);
70 public override void TraceEvent(TraceEventCache eventCache, string source, TraceEventType eventType, int id)
72 var message = String.Format("Event ID: [{0}]", id);
73 Log(source, eventType, message);
76 public override void TraceEvent(TraceEventCache eventCache, string source, TraceEventType eventType, int id, string format, params object[] args)
78 var builder = new StringBuilder();
79 builder.AppendFormat("Event ID: [{0}] ", id);
80 builder.AppendFormat(format, args);
81 var message = builder.ToString();
83 Log(source, eventType, message);
86 public override void TraceEvent(TraceEventCache eventCache, string source, TraceEventType eventType, int id, string message)
88 Log(source, eventType, message);
91 private void Log(string source, TraceEventType eventType, string message)
93 var log = LogManager.GetLogger(source);
94 var level = GetLevel(eventType);
95 log.Logger.Log(GetType(), level, message, null);
98 private void Log(string message, Level level)
100 var stack = new StackTrace();
101 var type = stack.GetFrame(0).GetMethod().DeclaringType;
102 var log = LogManager.GetLogger(type);
103 log.Logger.Log(GetType(), level, message, null);
107 private static Level GetLevel(TraceEventType eventType)
109 var level = Level.Debug;
112 case TraceEventType.Information:
115 case TraceEventType.Verbose:
116 level = Level.Verbose;
118 case TraceEventType.Warning:
121 case TraceEventType.Critical:
122 level = Level.Critical;
124 case TraceEventType.Error: