System.Drawing: added email to icon and test file headers
[mono.git] / mcs / class / System / System.Diagnostics / EventLogTraceListener.cs
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
10 //
11
12 //
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.
31 //
32
33 using System.Collections;
34 using System.Runtime.InteropServices;
35 using System.Security.Permissions;
36
37 namespace System.Diagnostics 
38 {
39         [PermissionSet (SecurityAction.LinkDemand, Unrestricted = true)]
40         public sealed class EventLogTraceListener : TraceListener 
41         {
42                 private EventLog event_log;
43                 private string name;
44
45                 public EventLogTraceListener ()
46                 {
47                 }
48
49                 public EventLogTraceListener (EventLog eventLog)
50                 {
51                         if (eventLog == null)
52                                 throw new ArgumentNullException ("eventLog");
53                         this.event_log = eventLog;
54                 }
55
56                 public EventLogTraceListener (string source)
57                 {
58                         if (source == null)
59                                 throw new ArgumentNullException ("source");
60                         event_log = new EventLog ();
61                         event_log.Source = source;
62                 }
63
64                 public EventLog EventLog {
65                         get { return event_log; }
66                         set { event_log = value; }
67                 }
68
69                 public override string Name {
70                         get { return name != null ? name : event_log.Source; }
71                         set { name = value; }
72                 }
73
74                 public override void Close ()
75                 {
76                         event_log.Close ();
77                 }
78
79                 protected override void Dispose (bool disposing)
80                 {
81                         if (disposing)
82                                 event_log.Dispose ();
83                 }
84
85                 public override void Write (string message)
86                 {
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
93                 }
94
95                 public override void WriteLine (string message)
96                 {
97                         Write (message);
98                 }
99
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)
105                 {
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;
118                         }
119                         event_log.WriteEntry (data != null ? data.ToString () : String.Empty, type, id, 0);
120                 }
121
122                 [ComVisible (false)]
123                 public override void TraceData (TraceEventCache eventCache,
124                                                 string source, TraceEventType eventType,
125                                                 int id, params object [] data)
126                 {
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);
133                         }
134                         TraceData (eventCache, source, eventType, id, s);
135                 }
136
137                 [ComVisible (false)]
138                 public override void TraceEvent (TraceEventCache eventCache,
139                                                  string source, TraceEventType eventType,
140                                                  int id, string message)
141                 {
142                         TraceData (eventCache, source, eventType, id, message);
143                 }
144
145                 [ComVisible (false)]
146                 public override void TraceEvent (TraceEventCache eventCache,
147                                                  string source, TraceEventType eventType,
148                                                  int id, string format, params object [] args)
149                 {
150                         TraceEvent (eventCache, source, eventType, id, format != null ? String.Format (format, args) : null);
151                 }
152 #endif
153         }
154 }
155