13 using System.Collections.Generic;
18 using System.Globalization;
47 string message =
string.Empty;
48 string callerName =
string.Empty;
50 DateTime time = DateTime.MinValue;
55 this.message = message;
56 this.callerName = callerName;
57 this.eventId = eventId;
58 this.time = messageTime;
70 set { eventType = value; }
75 get {
return message; }
76 set { message = value; }
79 public string CallerName
81 get {
return callerName; }
82 set { callerName = value; }
87 get {
return eventId; }
88 set { eventId = value; }
94 public static class EventManager
96 public delegate
void ShowNotificationDlgt(
string message,
bool isErrorMessage);
97 public static ShowNotificationDlgt showNotificationDlgt = null;
101 static event MessageEventDlgt messageEventHandler;
107 static EventLog eventLog = null;
110 static AutoResetEvent autoEvent =
new AutoResetEvent(
false);
111 static Queue<MessageEventArgs> messageQueue =
new Queue<MessageEventArgs>();
112 static Thread eventThread = null;
114 public static AutoResetEvent logFileSyncEvent =
new AutoResetEvent(
true);
116 static System.Reflection.Assembly assembly =
System.Reflection.Assembly.GetEntryAssembly();
117 public static string locallAssemblyPath = Path.GetDirectoryName(assembly.Location);
119 static char taskStringSeperator =
'|';
121 public static string FormatDateTime(DateTime date)
123 return date.ToString(
"yyyy-MM-ddTHH:mm:ss.fff");
126 static EventManager()
128 if (eventThread == null)
130 eventThread =
new Thread(
new ThreadStart(ProcessMessage));
131 eventThread.Name =
"EventManagerProcessThread";
136 public static void WriteMessage(
int eventId,
string callerName,
EventLevel evnetType,
string message)
138 if (evnetType > level)
147 messageQueue.Enqueue(messageEventArgs);
154 public static string EventSource
156 get {
return eventSource; }
157 set { eventSource = value; }
160 public static string EventLogName
162 get {
return eventLogName; }
163 set { eventLogName = value; }
166 public static void Stop()
173 public static MessageEventDlgt MessageEventHandler
175 get {
return messageEventHandler; }
176 set { messageEventHandler = value; }
181 get {
return level; }
182 set { level = value; }
187 get {
return output; }
188 set { output = value; }
191 public static string LogFileName
193 get {
return logFileName; }
194 set { logFileName = value; }
197 private static void SendMessageToNamedpipe(
MessageEventArgs messageEventArg)
210 private static string ConvertEventArgToSring(
MessageEventArgs messageEventArg)
212 string text = FormatDateTime(messageEventArg.
Time)
213 + taskStringSeperator + messageEventArg.
Type 214 + taskStringSeperator + messageEventArg.
EventID 215 + taskStringSeperator + messageEventArg.
CallerName 216 + taskStringSeperator + messageEventArg.
Message;
224 string[] strs = message.Split(
new char[] { taskStringSeperator });
232 DateTime time = DateTime.ParseExact(strs[0],
"yyyy-MM-ddTHH:mm:ss.fff", CultureInfo.InvariantCulture);
234 int id =
int.Parse(strs[2]);
235 string callerName = strs[3];
236 string txt = strs[4];
247 string logFileFullPath = Path.Combine(locallAssemblyPath, logFileName);
249 if (
File.Exists(logFileFullPath))
251 FileInfo fileInfo =
new FileInfo(logFileFullPath);
255 if (
File.Exists(logFileFullPath +
".1"))
257 File.Delete(logFileFullPath +
".1");
260 File.Move(logFileFullPath, logFileFullPath +
".1");
265 EventManager.logFileSyncEvent.WaitOne();
267 string text = ConvertEventArgToSring(messageEventArg).Replace(
"\n",
"") + Environment.NewLine;
268 File.AppendAllText(logFileFullPath, text);
270 EventManager.logFileSyncEvent.Set();
272 if (null != showNotificationDlgt)
284 private static void SendMessageToEventView(
MessageEventArgs messageEventArg)
289 string text = DateTime.Now.ToString(
"G")
290 +
":" + messageEventArg.
Type 292 +
":" + messageEventArg.
Message;
294 if (null == eventLog)
296 if (!EventLog.SourceExists(eventSource))
298 EventLog.CreateEventSource(eventSource, eventLogName);
301 eventLog =
new EventLog(eventLogName,
".", eventSource);
304 switch (messageEventArg.
Type)
308 eventLog.WriteEntry(messageEventArg.
Message +
"\n\n Caller:" + messageEventArg.
CallerName 309 , (EventLogEntryType)messageEventArg.
Type, messageEventArg.
EventID);
314 eventLog.WriteEntry(messageEventArg.
Message +
"\n\n Caller:" + messageEventArg.
CallerName 315 , EventLogEntryType.Information, messageEventArg.
EventID);
327 static void PrintWarning(
string info)
329 ConsoleColor oldColor =
Console.ForegroundColor;
330 Console.ForegroundColor = ConsoleColor.Yellow;
332 Console.ForegroundColor = oldColor;
335 static void PrintError(
string info)
337 ConsoleColor oldColor =
Console.ForegroundColor;
338 Console.ForegroundColor = ConsoleColor.Red;
340 Console.ForegroundColor = oldColor;
347 string text =
"Id:" + messageEventArg.
EventID 348 +
":" + messageEventArg.
CallerName + Environment.NewLine
349 + messageEventArg.
Message + Environment.NewLine;
370 private static void ProcessMessage()
376 if (messageQueue.Count == 0)
378 int result = WaitHandle.WaitAny(waitHandles);
390 if( messageQueue.Count > 0)
392 message = messageQueue.Dequeue();
405 case EventOutputType.EventView: SendMessageToEventView(message);
break;
408 case EventOutputType.CallbackDelegate: messageEventHandler(message);
break;
409 case EventOutputType.NamedPipe: SendMessageToNamedpipe(message);
break;
411 case EventOutputType.DbgView:
System.Diagnostics.Debug.WriteLine(ConvertEventArgToSring(message));
break;
416 Console.WriteLine(
"Log message exception:" + ex.Message +
".\r\nMessage:" + message);
421 SendMessageToFile(message);
425 Console.WriteLine(
"Write message exception:" + ex.Message +
".\r\nMessage:" + message);
static string EventSource
static string EventLogFileName
static EventLevel EventLevel
static int MaxEventLogFileSize
static ManualResetEvent StopEvent
MessageEventArgs(int eventId, string callerName, EventLevel eventType, string message, DateTime messageTime)
static EventOutputType EventOutputType
static string EventLogName