繁体   English   中英

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

[英]Writing to event log in C# - do I need to use EventLog.CreateEventSource when writing to Application log?

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

EventLog log = new EventLog();
log.Source = "Application";
log.WriteEntry("test message", EventLogEntryType.Error);

当我使用来自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);  

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

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

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

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

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

我建议你试试log4net,以防你想写不同的来源(smtp,文件等)

http://logging.apache.org/log4net/release/config-examples.html#eventlogappender

对于网络应用:

一般使用:

winforms / windows服务的类似解决方案。

您需要具有管理员权限才能创建事件源。 在第一个中,您没有使用自定义源。

直接的WriteEntry将转到默认的应用程序源。 SourceExists和CreateEventSource是您要创建自己的自定义源,这将更容易在事件查看器中找到任何日志条目。

是的,您需要拥有创建客户事件源的权利,正如其他人所提到的那样。

您需要管理员权限才能运行您的应用程序

您可以通过进入应用程序的调试文件夹来运行您的应用程序,然后右键单击您的.exe文件并以管理员身份运行

要么

您以管理员身份运行Visual Studio

您无需创建事件源。 在生成与语言无关或具有替换的事件时,它可能是一个很大的优势,但它是可选的,至少对于.NET程序(BCL提供默认事件源)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM