1: using System;
2: using System.Configuration;
3: using System.Text;
4: using Microsoft.Practices.EnterpriseLibrary.Common.Configuration;
5: using Microsoft.Practices.EnterpriseLibrary.Logging.Configuration;
6: using Microsoft.Practices.EnterpriseLibrary.Logging.Formatters;
7: using Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners;
8:
9: namespace MyApplication
10: {
11: internal class LoggingConfigurationSource : IConfigurationSource
12: {
13: #region Public Methods
14:
15: public void Add(IConfigurationParameter saveParameter, string sectionName, ConfigurationSection configurationSection)
16: {
17: }
18:
19: public void AddSectionChangeHandler(string sectionName, ConfigurationChangedEventHandler handler)
20: {
21: }
22:
23: public ConfigurationSection GetSection(string sectionName)
24: {
25: if (sectionName.Equals("loggingConfiguration", StringComparison.CurrentCulture))
26: {
27: // Logging configuration
28:
29: LoggingSettings result = new LoggingSettings();
30: result.DefaultCategory = "General";
31: result.TracingEnabled = true;
32: result.LogWarningWhenNoCategoriesMatch = true;
33:
34: // Listners
35:
36: FormattedEventLogTraceListenerData listener = new FormattedEventLogTraceListenerData();
37: listener.Name = "EventLogListener";
38: listener.Source = "Office Extensions";
39: listener.Formatter = "TextFormatter";
40: listener.Log = "MyApplication";
41: listener.MachineName = string.Empty;
42: listener.TraceOutputOptions = System.Diagnostics.TraceOptions.None;
43: listener.Filter = System.Diagnostics.SourceLevels.All;
44: listener.ListenerDataType = typeof(FormattedEventLogTraceListenerData);
45: listener.Type = typeof(FormattedEventLogTraceListener);
46: result.TraceListeners.Add(listener);
47:
48: TraceListenerReferenceData listenerReference = new TraceListenerReferenceData();
49: listenerReference.Name = "EventLogListener";
50:
51: // Formatters
52:
53: StringBuilder template = new StringBuilder();
54: template.AppendLine("Timestamp: {timestamp}");
55: template.AppendLine("Message: {message}");
56: template.AppendLine("Category: {category}");
57: template.AppendLine("Priority: {priority}");
58: template.AppendLine("EventId: {eventid}");
59: template.AppendLine("Severity: {severity}");
60: template.AppendLine("Title:{title}");
61: template.AppendLine("Machine: {machine}");
62: template.AppendLine("Application Domain: {appDomain}");
63: template.AppendLine("Process Id: {processId}");
64: template.AppendLine("Process Name: {processName}");
65: template.AppendLine("Win32 Thread Id: {win32ThreadId}");
66: template.AppendLine("Thread Name: {threadName}");
67: template.AppendLine("Extended Properties: {dictionary({key} - {value})}");
68:
69: TextFormatterData formatter = new TextFormatterData();
70: formatter.Name = "TextFormatter";
71: formatter.Type = typeof(TextFormatter);
72: formatter.Template = template.ToString();
73: result.Formatters.Add(formatter);
74:
75: // Category Sources
76:
77: TraceSourceData exceptionsSource = new TraceSourceData();
78: exceptionsSource.TraceListeners.Add(listenerReference);
79: exceptionsSource.Name = "Exceptions";
80: exceptionsSource.DefaultLevel = System.Diagnostics.SourceLevels.All;
81: result.TraceSources.Add(exceptionsSource);
82:
83: TraceSourceData traceSource = new TraceSourceData();
84: traceSource.TraceListeners.Add(listenerReference);
85: traceSource.Name = "Trace";
86: traceSource.DefaultLevel = System.Diagnostics.SourceLevels.All;
87: result.TraceSources.Add(traceSource);
88:
89: TraceSourceData generalSource = new TraceSourceData();
90: generalSource.TraceListeners.Add(listenerReference);
91: generalSource.Name = "General";
92: generalSource.DefaultLevel = System.Diagnostics.SourceLevels.All;
93: result.TraceSources.Add(generalSource);
94:
95: // Special Sources
96:
97: result.SpecialTraceSources.AllEventsTraceSource.Name = "AllEvents";
98: result.SpecialTraceSources.AllEventsTraceSource.DefaultLevel = System.Diagnostics.SourceLevels.All;
99:
100: result.SpecialTraceSources.NotProcessedTraceSource.Name = "NotProcessed";
101: result.SpecialTraceSources.NotProcessedTraceSource.DefaultLevel = System.Diagnostics.SourceLevels.All;
102:
103: result.SpecialTraceSources.ErrorsTraceSource.Name = "LoggingErrorsAndWarnings";
104: result.SpecialTraceSources.ErrorsTraceSource.DefaultLevel = System.Diagnostics.SourceLevels.All;
105: result.SpecialTraceSources.ErrorsTraceSource.TraceListeners.Clear();
106: result.SpecialTraceSources.ErrorsTraceSource.TraceListeners.Add(listenerReference);
107:
108: // Return
109:
110: return result;
111: }
112:
113: return null;
114: }
115:
116: public void Remove(IConfigurationParameter removeParameter, string sectionName)
117: {
118: }
119:
120: public void RemoveSectionChangeHandler(string sectionName, ConfigurationChangedEventHandler handler)
121: {
122: }
123:
124: #endregion
125: }
126: }
127:
128: using System;
129: using System.Diagnostics;
130: using System.Globalization;
131: using Microsoft.Practices.EnterpriseLibrary.Logging;
132:
133: namespace MyApplication
134: {
135: public static class LoggingHandler
136: {
137: #region Constants
138:
139: private const string CategoryExceptions = "Exceptions";
140: private const int PriorityExceptions = 1000;
141: private const int EventIdExceptions = 1000;
142: private const string TitleExceptions = "Errors Log";
143: private const TraceEventType SeverityExceptions = TraceEventType.Error;
144:
145: #endregion
146:
147: #region Members
148:
149: private static LogWriter writer;
150:
151: #endregion
152:
153: #region Properties
154:
155: internal static LogWriter Writer
156: {
157: get
158: {
159: if (writer == null)
160: {
161: writer = CreateWriter();
162: }
163:
164: return writer;
165: }
166: }
167:
168: #endregion
169:
170: #region Public Methods
171:
172: public static void Exception(Exception ex)
173: {
174: // Validation
175:
176: if (ex == null)
177: {
178: throw new ArgumentNullException();
179: }
180:
181: // Log
182:
183: WriteEntry(CategoryExceptions, TitleExceptions, ex.ToString(), PriorityExceptions, EventIdExceptions, SeverityExceptions);
184: }
185:
186: #endregion
187:
188: #region Private Methods
189:
190: private static void WriteEntry(string category, string title, string message, int priority, int eventId, TraceEventType severity)
191: {
192: LogEntry entry = new LogEntry();
193: entry.Categories.Add(category);
194: entry.TimeStamp = DateTime.Now;
195: entry.EventId = eventId;
196: entry.Message = message;
197: entry.Priority = priority;
198: entry.Severity = severity;
199: entry.Title = title;
200:
201: Writer.Write(entry);
202: }
203:
204: private static LogWriter CreateWriter()
205: {
206: LogWriterFactory factory = new LogWriterFactory(new LoggingConfigurationSource());
207: return factory.Create();
208: }
209:
210: #endregion
211: }
212: }