2 using System.Diagnostics;
4 using System.Threading.Tasks;
8 namespace Pithos.Client.WPF.Diagnostics
10 public class Log4NetForwarder : TraceListener
12 public override void Write(string message)
17 public override void Write(object o)
22 public override void Write(object o, string category)
24 WriteLine(o, category);
27 public override void Write(string message, string category)
29 WriteLine(message, category);
32 public override void WriteLine(string message)
34 Log(message, Level.Debug);
38 public override void WriteLine(object o)
40 Log(o.ToString(), Level.Debug);
43 public override void WriteLine(object o, string category)
45 using (ThreadContext.Stacks["Category"].Push(category))
47 Log(o.ToString(), Level.Debug);
51 public override void WriteLine(string message, string category)
53 using (ThreadContext.Stacks["Category"].Push(category))
55 Log(message, Level.Debug);
59 public override void Fail(string message)
61 Log(message, Level.Error);
64 public override void Fail(string message, string detailMessage)
66 Log(String.Format("{0} {1}", message, detailMessage), Level.Error);
71 public override void TraceEvent(TraceEventCache eventCache, string source, TraceEventType eventType, int id)
73 var message = String.Format("Event ID: [{0}]", id);
74 Log(source, eventType, message);
77 public override void TraceEvent(TraceEventCache eventCache, string source, TraceEventType eventType, int id, string format, params object[] args)
79 var builder = new StringBuilder();
80 builder.AppendFormat("Event ID: [{0}] ", id);
81 builder.AppendFormat(format, args);
82 var message = builder.ToString();
84 Log(source, eventType, message);
87 public override void TraceEvent(TraceEventCache eventCache, string source, TraceEventType eventType, int id, string message)
89 Log(source, eventType, message);
92 private void Log(string source, TraceEventType eventType, string message)
96 var log = LogManager.GetLogger(source);
97 var level = GetLevel(eventType);
98 TaskEx.Run(()=>log.Logger.Log(GetType(), level, message, null));
106 private void Log(string message, Level level)
111 var stack = new StackTrace();
112 var type = stack.GetFrame(0).GetMethod().DeclaringType;
113 var log = LogManager.GetLogger(type);
114 log.Logger.Log(GetType(), level, message, null);
122 private static Level GetLevel(TraceEventType eventType)
124 var level = Level.Debug;
127 case TraceEventType.Information:
130 case TraceEventType.Verbose:
131 level = Level.Verbose;
133 case TraceEventType.Warning:
136 case TraceEventType.Critical:
139 case TraceEventType.Error: