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 stack = new StackTrace();
97 var type = stack.GetFrame(0).GetMethod().DeclaringType;
99 var log = LogManager.GetLogger(source);
100 var level = GetLevel(eventType);
101 TaskEx.Run(()=>log.Logger.Log(GetType(), level, message, null));
109 private void Log(string message, Level level)
114 var stack = new StackTrace();
115 var type = stack.GetFrame(0).GetMethod().DeclaringType;
116 var log = LogManager.GetLogger(type);
117 log.Logger.Log(GetType(), level, message, null);
125 private static Level GetLevel(TraceEventType eventType)
127 var level = Level.Debug;
130 case TraceEventType.Information:
133 case TraceEventType.Verbose:
134 level = Level.Verbose;
136 case TraceEventType.Warning:
139 case TraceEventType.Critical:
140 level = Level.Critical;
142 case TraceEventType.Error: