Merge pull request #439 from mono-soc-2012/garyb/iconfix
[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                         TraceData (new TraceEventCache (), event_log.Source,
88                                    TraceEventType.Information, 0, message);
89                 }
90
91                 public override void WriteLine (string message)
92                 {
93                         Write (message);
94                 }
95
96                 [ComVisible (false)]
97                 public override void TraceData (TraceEventCache eventCache,
98                                                 string source, TraceEventType eventType,
99                                                 int id, object data)
100                 {
101                         EventLogEntryType type;
102                         switch (eventType) {
103                         case TraceEventType.Critical:
104                         case TraceEventType.Error:
105                                 type = EventLogEntryType.Error;
106                                 break;
107                         case TraceEventType.Warning:
108                                 type = EventLogEntryType.Warning;
109                                 break;
110                         default:
111                                 type = EventLogEntryType.Information;
112                                 break;
113                         }
114                         event_log.WriteEntry (data != null ? data.ToString () : String.Empty, type, id, 0);
115                 }
116
117                 [ComVisible (false)]
118                 public override void TraceData (TraceEventCache eventCache,
119                                                 string source, TraceEventType eventType,
120                                                 int id, params object [] data)
121                 {
122                         string s = String.Empty;
123                         if (data != null) {
124                                 string [] arr = new string [data.Length];
125                                 for (int i = 0; i < data.Length; i++)
126                                         arr [i] = data [i] != null ? data [i].ToString () : String.Empty;
127                                 s = String.Join (", ", arr);
128                         }
129                         TraceData (eventCache, source, eventType, id, s);
130                 }
131
132                 [ComVisible (false)]
133                 public override void TraceEvent (TraceEventCache eventCache,
134                                                  string source, TraceEventType eventType,
135                                                  int id, string message)
136                 {
137                         TraceData (eventCache, source, eventType, id, message);
138                 }
139
140                 [ComVisible (false)]
141                 public override void TraceEvent (TraceEventCache eventCache,
142                                                  string source, TraceEventType eventType,
143                                                  int id, string format, params object [] args)
144                 {
145                         TraceEvent (eventCache, source, eventType, id, format != null ? String.Format (format, args) : null);
146                 }
147         }
148 }
149