【问题标题】:How should I write to EventLog我应该如何写入 EventLog
【发布时间】:2021-07-03 03:37:20
【问题描述】:

可能我只是误解了System.Diagnostics.EventLog,但我无法以我的应用名称写入 EventLog。项目是 ASP.NET Web 服务 (.NET Framework 4),在 NETWORK SERVICE 用户下工作。

我试过这个并且它有效(如提到的here):

using (System.Diagnostics.EventLog eventLog = new System.Diagnostics.EventLog())
{
    eventLog.Source = "Application";
    eventLog.WriteEntry("MY LOG INFO", System.Diagnostics.EventLogEntryType.Information);
}

Application 不是我的应用程序的名称。所以我尝试将eventLog.Source = "Application"; 更改为eventLog.Source = System.Diagnostics.Process.GetCurrentProcess().ProcessName;。结果是异常找不到源,但有些...here。 ProcessName 是 w3wp,对我来说没问题,但我不能写日志。所以我尝试使用 logName 参数重载构造函数,但没有成功。

如果我理解得很好,WriteLog 方法在某些情况下需要访问注册表(答案here)?好的,这需要更多然后更新 dll。很好的建议是在安装过程中写上提到的注册表更改。但是我的更改是分布式 dll 中的“仅”更新,而不是新安装。

MSDB 很刻薄,我发现了一些关于 EventLogPermissionAttribute(here) 和 EventLogPermission(here) 的信息,但它对我一点帮助都没有。我尝试使用它,但总是遇到同样的异常。没有例子。

最后我找到这个 (source):

EventLogPermission eventLogPermission = new EventLogPermission(EventLogPermissionAccess.Administer, ".");
eventLogPermission.PermitOnly();
if (!EventLog.SourceExists(source))
{
    EventLog.CreateEventSource(source, "Application");
}
EventLog.WriteEntry(source, message, entryType);

但它以类似的异常结束。现在它说的很少:它无法访问“安全”协议。

所以,问题是:我应该如何写入 EventLog?或者确实有必要更新注册表(我可以通过我们的更新工具来完成,但我不相信我想要这样做)。

我还想了解System.Diagnostics.EventLog 的工作原理以及它在后台做什么,以便更好地理解我的代码(如果它对我有用的话)。

【问题讨论】:

    标签: c# event-log


    【解决方案1】:

    您需要管理员权限才能创建自定义事件日志源,而NETWORK SERVICE 没有该权限。您需要更新安装程序以创建该日志源,然后安装程序必须以管理员身份运行。

    【讨论】:

    • 这证实了我的研究。最后,我选择了另一种方法。将日志写入我有权访问的文件更容易。谢谢
    猜你喜欢
    • 2017-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-19
    • 2010-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多