在C#中写入事件日志 - 在写入应用程序日志时是否需要使用EventLog.CreateEventSource?

sar*_*ake 8 c# event-log event-viewer

当我使用以下代码写入应用程序事件日志时,一切正常:

EventLog log = new EventLog();
log.Source = "Application";
log.WriteEntry("test message", EventLogEntryType.Error);
Run Code Online (Sandbox Code Playgroud)

当我使用来自MSDN和所有其他博客的代码时,我收到了安全错误(我猜是因为CreateEventSource引发了它).

string sSource = "MyWebService";
string sLog = "myApplication";
string sMsg = errorMessage;

if (!EventLog.SourceExists(sSource))
   EventLog.CreateEventSource(sSource, sLog);

 EventLog.WriteEntry(sSource, sMsg, EventLogEntryType.Error);  
Run Code Online (Sandbox Code Playgroud)

那么,如果我需要的是写入默认存在的应用程序日志,是否需要检查源是否存在?

写入EventViewer的正确方法是什么?

ale*_*oot 7

CreateEventSource方法在事件日志中创建新源,这允许您在应用程序自己的组中编写应用程序的日志,而不是在通用Application组中写入.

也许您收到错误,因为您用来创建事件源的用户没有创建它的权限,如果您使用的是Vista/7操作系统,请尝试以管理员身份运行您的程序.

登录事件查看器的正确方法取决于您的需求,如果您的应用程序生成大量日志消息并且您希望将此日志分组到特定于应用程序的容器中,则可能最好创建特定于应用程序的日志事件源并写入登录它,相反,如果您的应用程序生成很少的日志消息,并且不需要将它们组合在一起,您可以使用通用Application日志事件源...

  • 还有一个问题:当我写入通用应用程序源时,在事件查看器中查看时会收到以下消息:"事件(0)的描述是源(应用程序)无法找到.本地计算机可能没有必要的注册表信息或消息DLL文件,以显示来自远程计算机的消息"......然后显示我的自定义消息.我想知道是否有可能不显示这个长的默认消息没有设置源. (2认同)