Statistics
| Branch: | Revision:

root / trunk / Pithos.Client.WPF / Diagnostics / log4netForwarder.cs @ 0a9d4d18

History | View | Annotate | Download (4.1 kB)

1 c1396e6d pkanavos
using System;
2 c1396e6d pkanavos
using System.Diagnostics;
3 c1396e6d pkanavos
using System.Text;
4 97d149c1 pkanavos
using System.Threading.Tasks;
5 c1396e6d pkanavos
using log4net;
6 c1396e6d pkanavos
using log4net.Core;
7 c1396e6d pkanavos
8 c1396e6d pkanavos
namespace Pithos.Client.WPF.Diagnostics
9 c1396e6d pkanavos
{
10 c1396e6d pkanavos
    public class Log4NetForwarder : TraceListener
11 c1396e6d pkanavos
    {
12 c1396e6d pkanavos
        public override void Write(string message)
13 c1396e6d pkanavos
        {
14 c1396e6d pkanavos
            WriteLine(message);
15 c1396e6d pkanavos
        }
16 c1396e6d pkanavos
17 c1396e6d pkanavos
        public override void Write(object o)
18 c1396e6d pkanavos
        {
19 c1396e6d pkanavos
            WriteLine(o);
20 c1396e6d pkanavos
        }
21 c1396e6d pkanavos
22 c1396e6d pkanavos
        public override void Write(object o, string category)
23 c1396e6d pkanavos
        {
24 c1396e6d pkanavos
            WriteLine(o, category);
25 c1396e6d pkanavos
        }
26 c1396e6d pkanavos
27 c1396e6d pkanavos
        public override void Write(string message, string category)
28 c1396e6d pkanavos
        {
29 c1396e6d pkanavos
            WriteLine(message, category);
30 c1396e6d pkanavos
        }
31 c1396e6d pkanavos
32 c1396e6d pkanavos
        public override void WriteLine(string message)
33 c1396e6d pkanavos
        {
34 c1396e6d pkanavos
            Log(message, Level.Debug);
35 c1396e6d pkanavos
        }
36 c1396e6d pkanavos
37 c1396e6d pkanavos
38 c1396e6d pkanavos
        public override void WriteLine(object o)
39 c1396e6d pkanavos
        {
40 c1396e6d pkanavos
            Log(o.ToString(), Level.Debug);
41 c1396e6d pkanavos
        }
42 c1396e6d pkanavos
43 c1396e6d pkanavos
        public override void WriteLine(object o, string category)
44 c1396e6d pkanavos
        {
45 c1396e6d pkanavos
            using (ThreadContext.Stacks["Category"].Push(category))
46 c1396e6d pkanavos
            {
47 c1396e6d pkanavos
                Log(o.ToString(), Level.Debug);
48 c1396e6d pkanavos
            }
49 c1396e6d pkanavos
        }
50 c1396e6d pkanavos
51 c1396e6d pkanavos
        public override void WriteLine(string message, string category)
52 c1396e6d pkanavos
        {
53 c1396e6d pkanavos
            using (ThreadContext.Stacks["Category"].Push(category))
54 c1396e6d pkanavos
            {
55 c1396e6d pkanavos
                Log(message, Level.Debug);
56 c1396e6d pkanavos
            }
57 c1396e6d pkanavos
        }
58 c1396e6d pkanavos
59 c1396e6d pkanavos
        public override void Fail(string message)
60 c1396e6d pkanavos
        {
61 c1396e6d pkanavos
            Log(message, Level.Error);
62 c1396e6d pkanavos
        }
63 c1396e6d pkanavos
64 c1396e6d pkanavos
        public override void Fail(string message, string detailMessage)
65 c1396e6d pkanavos
        {
66 c1396e6d pkanavos
            Log(String.Format("{0} {1}", message, detailMessage), Level.Error);
67 c1396e6d pkanavos
        }
68 c1396e6d pkanavos
69 c1396e6d pkanavos
70 c1396e6d pkanavos
71 c1396e6d pkanavos
        public override void TraceEvent(TraceEventCache eventCache, string source, TraceEventType eventType, int id)
72 c1396e6d pkanavos
        {
73 c1396e6d pkanavos
            var message = String.Format("Event ID: [{0}]", id);
74 c1396e6d pkanavos
            Log(source, eventType, message);
75 c1396e6d pkanavos
        }
76 c1396e6d pkanavos
77 c1396e6d pkanavos
        public override void TraceEvent(TraceEventCache eventCache, string source, TraceEventType eventType, int id, string format, params object[] args)
78 c1396e6d pkanavos
        {
79 c1396e6d pkanavos
            var builder = new StringBuilder();
80 c1396e6d pkanavos
            builder.AppendFormat("Event ID: [{0}] ", id);
81 c1396e6d pkanavos
            builder.AppendFormat(format, args);
82 c1396e6d pkanavos
            var message = builder.ToString();
83 c1396e6d pkanavos
84 c1396e6d pkanavos
            Log(source, eventType, message);
85 c1396e6d pkanavos
        }
86 c1396e6d pkanavos
87 c1396e6d pkanavos
        public override void TraceEvent(TraceEventCache eventCache, string source, TraceEventType eventType, int id, string message)
88 c1396e6d pkanavos
        {
89 c1396e6d pkanavos
            Log(source, eventType, message);
90 c1396e6d pkanavos
        }
91 c1396e6d pkanavos
92 c1396e6d pkanavos
        private void Log(string source, TraceEventType eventType, string message)
93 c1396e6d pkanavos
        {
94 97d149c1 pkanavos
            try
95 97d149c1 pkanavos
            {
96 0a9d4d18 pkanavos
                var stack = new StackTrace();
97 0a9d4d18 pkanavos
                var type = stack.GetFrame(0).GetMethod().DeclaringType;
98 0a9d4d18 pkanavos
99 97d149c1 pkanavos
                var log = LogManager.GetLogger(source);
100 97d149c1 pkanavos
                var level = GetLevel(eventType);
101 97d149c1 pkanavos
                TaskEx.Run(()=>log.Logger.Log(GetType(), level, message, null));
102 97d149c1 pkanavos
            }
103 97d149c1 pkanavos
            catch(Exception ex)
104 97d149c1 pkanavos
            {
105 97d149c1 pkanavos
                
106 97d149c1 pkanavos
            }
107 c1396e6d pkanavos
        }
108 c1396e6d pkanavos
109 c1396e6d pkanavos
        private void Log(string message, Level level)
110 c1396e6d pkanavos
        {
111 97d149c1 pkanavos
            try
112 97d149c1 pkanavos
            {
113 97d149c1 pkanavos
114 c1396e6d pkanavos
            var stack = new StackTrace();
115 c1396e6d pkanavos
            var type = stack.GetFrame(0).GetMethod().DeclaringType;
116 c1396e6d pkanavos
            var log = LogManager.GetLogger(type);
117 c1396e6d pkanavos
            log.Logger.Log(GetType(), level, message, null);
118 97d149c1 pkanavos
            }
119 97d149c1 pkanavos
            catch (Exception)
120 97d149c1 pkanavos
            {
121 97d149c1 pkanavos
            }
122 c1396e6d pkanavos
        }
123 c1396e6d pkanavos
124 c1396e6d pkanavos
125 c1396e6d pkanavos
        private static Level GetLevel(TraceEventType eventType)
126 c1396e6d pkanavos
        {
127 c1396e6d pkanavos
            var level = Level.Debug;
128 c1396e6d pkanavos
            switch (eventType)
129 c1396e6d pkanavos
            {
130 c1396e6d pkanavos
                case TraceEventType.Information:
131 c1396e6d pkanavos
                    level = Level.Info;
132 c1396e6d pkanavos
                    break;
133 c1396e6d pkanavos
                case TraceEventType.Verbose:
134 c1396e6d pkanavos
                    level = Level.Verbose;
135 c1396e6d pkanavos
                    break;
136 c1396e6d pkanavos
                case TraceEventType.Warning:
137 c1396e6d pkanavos
                    level = Level.Warn;
138 c1396e6d pkanavos
                    break;
139 c1396e6d pkanavos
                case TraceEventType.Critical:
140 c1396e6d pkanavos
                    level = Level.Critical;
141 c1396e6d pkanavos
                    break;
142 c1396e6d pkanavos
                case TraceEventType.Error:
143 c1396e6d pkanavos
                    level = Level.Error;
144 c1396e6d pkanavos
                    break;
145 c1396e6d pkanavos
            }
146 c1396e6d pkanavos
            return level;
147 c1396e6d pkanavos
        }
148 c1396e6d pkanavos
    }
149 c1396e6d pkanavos
150 c1396e6d pkanavos
}