如何指示 EventLogTraceListener 在特定 Log 中创建
Posted
技术标签:
【中文标题】如何指示 EventLogTraceListener 在特定 Log 中创建【英文标题】:How to direct the EventLogTraceListener to create in a specific Log 【发布时间】:2010-11-11 03:38:01 【问题描述】:以下侦听器将在调用 Trace.WriteLine 时创建一个事件条目。如果源不存在,他将在默认日志通道“应用程序”中创建它。我想指定另一个默认日志通道,但搜索 45 分钟后,我似乎没有找到解决方案。有什么想法吗?
<configuration>
<system.diagnostics>
<trace autoflush="false" indentsize="4">
<listeners>
<add name="myListener"
type="System.Diagnostics.EventLogTraceListener"
initializeData="Source">
</add>
</listeners>
</trace>
</system.diagnostics>
</configuration>
【问题讨论】:
【参考方案1】:不确定是否可以通过配置。
尽管 EventLogTraceListener 确实接受不同的事件日志作为构造函数中的参数。不幸的是,该类是密封的,因此您不能简单地从它派生并为构造函数传递不同的值。
尽管您可以遵循这种方法并构建自己的类(看起来相当简单)。然后在您的配置中引用该类型。 http://weblogs.asp.net/psteele/archive/2006/02/23/438936.aspx
【讨论】:
【参考方案2】:您可以在第一行代码中重新指向监听器。
Trace.Listeners["MyListener"].Attributes["EventLog"] = ConfigurationManager.AppSettings["MyCustomEventLogName"];
该值可以存储在配置文件的<appSettings>
部分,因此它仍然是基于配置的:
<appSettings>
<add key="MyCustomEventLogName" value="CustomEventLogName" />
</appSettings>
【讨论】:
【参考方案3】:我自己也遇到了这个问题,并找到了一个不需要自定义代码的解决方案 - 您可以通过 Powershell 预先创建“源”,这样您就可以设置要使用的日志。
-
通过 Powershell 初始化源代码:
# Run as administrator
# ONLY If you previously ran the application and the source is already associated with the Application channel:
Remove-EventLog -Source MyCustomSource
# Create new log channel <-> source mapping
New-EventLog -LogName CustomLog -Source MyCustomSource
如果您使用之前登录到“应用程序”的相同“源”,请重新启动计算机 - 更改将在重新启动之前应用。
将诊断 XML 中的“源”与新创建的源匹配
<configuration>
<system.diagnostics>
<trace autoflush="false" indentsize="4">
<listeners>
<add name="myListener"
type="System.Diagnostics.EventLogTraceListener"
initializeData="MyCustomSource">
</add>
</listeners>
</trace>
</system.diagnostics>
</configuration>
【讨论】:
【参考方案4】:您可以在这篇博文中找到解决方案:
http://weblogs.asp.net/psteele/438936
真的好用!
【讨论】:
您应该将重要部分放在您的答案帖子中,并添加链接作为参考。以上是关于如何指示 EventLogTraceListener 在特定 Log 中创建的主要内容,如果未能解决你的问题,请参考以下文章