2 // System.Diagnostics.EventLogTraceListener.cs
5 // Jonathan Pryor (jonpryor@vt.edu)
6 // Andreas Nahr (ClassDevelopment@A-SoftTech.com)
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:
21 // The above copyright notice and this permission notice shall be
22 // included in all copies or substantial portions of the Software.
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
;
45 public EventLogTraceListener ()
49 public EventLogTraceListener (EventLog eventLog
)
52 throw new ArgumentNullException ("eventLog");
53 this.event_log
= eventLog
;
56 public EventLogTraceListener (string source
)
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; }
74 public override void Close ()
79 protected override void Dispose (bool disposing
)
85 public override void Write (string message
)
88 TraceData (new TraceEventCache (), event_log
.Source
,
89 TraceEventType
.Information
, 0, message
);
91 event_log
.WriteEntry (message
);
95 public override void WriteLine (string message
)
102 public override void TraceData (TraceEventCache eventCache
,
103 string source
, TraceEventType eventType
,
106 EventLogEntryType type
;
108 case TraceEventType
.Critical
:
109 case TraceEventType
.Error
:
110 type
= EventLogEntryType
.Error
;
112 case TraceEventType
.Warning
:
113 type
= EventLogEntryType
.Warning
;
116 type
= EventLogEntryType
.Information
;
119 event_log
.WriteEntry (data
!= null ? data
.ToString () : String
.Empty
, type
, id
, 0);
123 public override void TraceData (TraceEventCache eventCache
,
124 string source
, TraceEventType eventType
,
125 int id
, params object [] data
)
127 string s
= String
.Empty
;
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
);
138 public override void TraceEvent (TraceEventCache eventCache
,
139 string source
, TraceEventType eventType
,
140 int id
, string message
)
142 TraceData (eventCache
, source
, eventType
, id
, message
);
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);