Log4Net不会在事件查看器中创建自定义事件日志

时间:2012-06-12 20:13:24

标签: c# log4net event-log

我的WPF应用使用Log4Net将消息记录到事件查看器。这在大多数机器上都很好用。但是,我的办公室里有两台机器出现问题。一个是带有2 GB内存的物理Windows 7机器,另一个是运行XP的虚拟机,它还有2 GB内存。

问题是即使用户使用具有管理员权限的帐户登录,系统也不会让他们创建我为我的应用程序设置的自定义事件日志。这导致我的程序死亡。

我可以在所有Log调用上添加错误处理,但我对此的感觉是我不应该。消息被记录在catch处理程序中,用于已经发生的另一个错误。如果无法记录错误信息,我该怎么办呢?

无论如何,我试图在昨天的XP虚拟机上创建自定义事件日志,但仍未创建。我需要做什么才能在这两台机器上创建自定义事件日志?

2 个答案:

答案 0 :(得分:1)

事实证明,问题根本不在于日志记录代码中。我的程序使用WPF作为GUI。它的启动序列在UI线程上执行最少量的工作,因此它可以尽快显示UI。

其余的初始化是在后台线程上完成的。我知道发生了错误,但我在事件查看器的日志列表中找不到自定义错误日志。事实证明,我的代码没有在数据库中找到它需要的一些数据并试图报告错误。这是一个两步过程,包括首先将错误记录到日志中,然后显示自定义MessageBox对话框。当程序试图显示此对话框时,我得到XamlParseException

长话短说,崩溃程序的问题是XamlParseException。这是因为我在后台线程上调用自定义MessageBox's Show方法,而不是在UI线程上调用。因为我在事件查看器中找不到自定义事件源,所以我找不到错误,所以我认为错误是一个permisions问题。

顺便说一句,我确实尝试在一个点上手动创建事件日志,昨天我检查了注册表并找到了自定义事件源的条目。

这里还有另一台机器遇到同样的问题。我确定这是同一个问题。我正在为错误处理添加逻辑,以确保始终在UI线程上调用自定义MessageBox,这样如果同样的问题再次出现,程序就不会像那样轰炸。

答案 1 :(得分:0)

我们需要看看你是如何尝试在XP机器上创建事件日志的......

通常,您需要阅读:http://msdn.microsoft.com/en-us/library/49dwckkz(v=vs.80).aspx

特别是关于何时创建自定义事件日志的说明:

“通常,在安装应用程序期间创建新的事件源。这样可以让操作系统有时间刷新其已注册事件源列表及其配置。如果操作系统尚未刷新其列表如果事件源和您尝试使用新源编写事件,则写入操作将失败。如果在安装期间创建源不是一个选项,则尝试在第一次写入操作之前创建源,可能在应用程序期间初始化。如果选择此方法,请确保您的初始化代码在计算机上以管理员权限运行。这些权限是创建新事件源所必需的。“

尝试在第一个日志记录事件之前创建自定义日志以使用它。