【问题标题】:Log4Net won't create custom event log in event viewerLog4Net 不会在事件查看器中创建自定义事件日志
【发布时间】:2012-06-12 20:13:24
【问题描述】:

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

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

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

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

托尼

【问题讨论】:

  • 如何在 Windows XP 机器上创建事件日志?显示一些代码?

标签: c# log4net event-log


【解决方案1】:

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

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

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

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

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

【讨论】:

    【解决方案2】:

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

    一般情况下,您需要阅读以下内容:http://msdn.microsoft.com/en-us/library/49dwckkz(v=vs.80).aspx

    特别是讨论何时创建自定义事件日志的注释:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多