2010-06-21 Atsushi Enomoto <atsushi@ximian.com>
[mcs.git] / class / System / System.Diagnostics / EventLogTraceListener.cs
blobe6ce4a3de18b51d2fb5b434a9e40965c3ff3f221
1 //
2 // System.Diagnostics.EventLogTraceListener.cs
3 //
4 // Authors:
5 // Jonathan Pryor (jonpryor@vt.edu)
6 // Andreas Nahr (ClassDevelopment@A-SoftTech.com)
7 //
8 // (C) 2002 Jonathan Pryor
9 // (C) 2003 Andreas Nahr
13 // Permission is hereby granted, free of charge, to any person obtaining
14 // a copy of this software and associated documentation files (the
15 // "Software"), to deal in the Software without restriction, including
16 // without limitation the rights to use, copy, modify, merge, publish,
17 // distribute, sublicense, and/or sell copies of the Software, and to
18 // permit persons to whom the Software is furnished to do so, subject to
19 // the following conditions:
20 //
21 // The above copyright notice and this permission notice shall be
22 // included in all copies or substantial portions of the Software.
23 //
24 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
25 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
26 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
27 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
28 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
29 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
30 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
33 using System.Collections;
34 using System.Runtime.InteropServices;
35 using System.Security.Permissions;
37 namespace System.Diagnostics
39 [PermissionSet (SecurityAction.LinkDemand, Unrestricted = true)]
40 public sealed class EventLogTraceListener : TraceListener
42 private EventLog event_log;
43 private string name;
45 public EventLogTraceListener ()
49 public EventLogTraceListener (EventLog eventLog)
51 if (eventLog == null)
52 throw new ArgumentNullException ("eventLog");
53 this.event_log = eventLog;
56 public EventLogTraceListener (string source)
58 if (source == null)
59 throw new ArgumentNullException ("source");
60 event_log = new EventLog ();
61 event_log.Source = source;
64 public EventLog EventLog {
65 get { return event_log; }
66 set { event_log = value; }
69 public override string Name {
70 get { return name != null ? name : event_log.Source; }
71 set { name = value; }
74 public override void Close ()
76 event_log.Close ();
79 protected override void Dispose (bool disposing)
81 if (disposing)
82 event_log.Dispose ();
85 public override void Write (string message)
87 #if NET_2_0
88 TraceData (new TraceEventCache (), event_log.Source,
89 TraceEventType.Information, 0, message);
90 #else
91 event_log.WriteEntry (message);
92 #endif
95 public override void WriteLine (string message)
97 Write (message);
100 #if NET_2_0
101 [ComVisible (false)]
102 public override void TraceData (TraceEventCache eventCache,
103 string source, TraceEventType eventType,
104 int id, object data)
106 EventLogEntryType type;
107 switch (eventType) {
108 case TraceEventType.Critical:
109 case TraceEventType.Error:
110 type = EventLogEntryType.Error;
111 break;
112 case TraceEventType.Warning:
113 type = EventLogEntryType.Warning;
114 break;
115 default:
116 type = EventLogEntryType.Information;
117 break;
119 event_log.WriteEntry (data != null ? data.ToString () : String.Empty, type, id, 0);
122 [ComVisible (false)]
123 public override void TraceData (TraceEventCache eventCache,
124 string source, TraceEventType eventType,
125 int id, params object [] data)
127 string s = String.Empty;
128 if (data != null) {
129 string [] arr = new string [data.Length];
130 for (int i = 0; i < data.Length; i++)
131 arr [i] = data [i] != null ? data [i].ToString () : String.Empty;
132 s = String.Join (", ", arr);
134 TraceData (eventCache, source, eventType, id, s);
137 [ComVisible (false)]
138 public override void TraceEvent (TraceEventCache eventCache,
139 string source, TraceEventType eventType,
140 int id, string message)
142 TraceData (eventCache, source, eventType, id, message);
145 [ComVisible (false)]
146 public override void TraceEvent (TraceEventCache eventCache,
147 string source, TraceEventType eventType,
148 int id, string format, params object [] args)
150 TraceEvent (eventCache, source, eventType, id, format != null ? String.Format (format, args) : null);
152 #endif