9

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

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 的正确方法是什么?

4

6 回答 6

7

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

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

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

于 2011-10-31T23:39:25.540 回答
2

我建议您尝试 log4net,以防您也想写入不同的源(smtp、文件等)

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

对于网络应用程序:

一般使用:

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

于 2011-10-31T23:37:24.913 回答
2

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

于 2011-10-31T23:39:49.987 回答
1

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

是的,您需要有权创建其他人提到的客户事件源。

于 2011-10-31T23:43:26.247 回答
0

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

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

或者

您以管理员身份运行 Visual Studio

于 2017-03-30T08:37:52.190 回答
-1

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

于 2011-10-31T23:39:38.777 回答