7

以下侦听器将在调用 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>
4

4 回答 4

3

不确定您是否可以通过配置。

尽管 EventLogTraceListener 确实接受不同的事件日志作为构造函数中的参数。不幸的是,该类是密封的,因此您不能简单地从它派生并为构造函数传递不同的值。

尽管您可以遵循这种方法并构建自己的类(似乎相当简单)。然后在您的配置中引用该类型。 http://weblogs.asp.net/psteele/archive/2006/02/23/438936.aspx

于 2009-07-15T20:50:02.680 回答
0

您可以在第一行代码中重新指向侦听器。

Trace.Listeners["MyListener"].Attributes["EventLog"] = ConfigurationManager.AppSettings["MyCustomEventLogName"];

该值可以存储在<appSettings>配置文件的部分中,因此它仍然是基于配置的:

<appSettings>
    <add key="MyCustomEventLogName" value="CustomEventLogName" />
</appSettings>
于 2017-08-03T10:00:53.577 回答
0

我自己刚刚遇到了这个问题,并找到了一个不需要自定义代码的解决方案 - 您可以通过 Powershell 预先创建“源”,这样您就可以设置要使用的日志。

  1. 通过 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
  1. 如果您使用之前登录到“应用程序”的相同“源”,请重新启动机器 - 更改将在重新启动之前应用。

  2. 将诊断 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>
于 2021-05-25T15:46:19.137 回答
-1

您可以在此博客文章中找到解决方案:

http://weblogs.asp.net/psteele/438936

真的行!

于 2015-03-16T16:41:57.653 回答