创建了log4net EventLog自定义日志名,但未使用

时间:2012-03-06 18:33:57

标签: c# windows-7 log4net event-log

在一个项目中,我正在使用log4net记录事件日志。我需要创建一个自定义日志,所以所有人都会去那里。我已经尝试将事件添加到不同的日志中,但它有效,但由于某些原因,现在无法从配置文件中更改日志名称。即使我改变它,它将保留前一个并登录它。以下是我的app.config示例:

<appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date{yyyy-MMMM-dd HH:mm:ss, fff} [%thread] %level %message %exception%newline"/>
  </layout>
  <filter type="log4net.Filter.LevelRangeFilter">
    <levelMin value="DEBUG" />
    <levelMax value="FATAL" />
  </filter>
  <ApplicationName>TestLoggerFichierConfig</ApplicationName>
  <LogName>AgentLogger</LogName>
</appender>

我读到添加新日志时必须重新启动事件日志,以便在其中显示最近的事件。我这样做了,它允许我看到已经创建的新日志,但没有任何东西会去那里。是否可以强制Log4Net停止使用以前的日志而不是使用我在app.config中定义的日志?

感谢您的帮助。

更新
似乎le EventLogs识别源应用程序并决定将新事件放入日志中,因为他记得它以前去过的地方。当我第一次设置logName时,它工作正常。如果我停止应用程序,更改日志名称并重新启动它,事件仍将转到上一个日志。如果事件日志中不存在logName,则会创建它,但不会使用它!可能有一些事情要做,但它不在log4net的一侧,在这个级别更改Windows设置可能会很危险。我在同一个app.config文件上创建了两个eventLogAppender,两者都指向不同的日志。虽然事件得到了相同的日志。很明显,问题不是来自log4net,我的问题的解决方案将无法通过代码解决。感谢您提供了很好的建议。

3 个答案:

答案 0 :(得分:1)

您的配置可能有些问题,而且根本就没有告诉您这一点,因为log4net本身的设计永远不会抛出错误。

您可以打开log4net的内部调试,但不要在启用log4net调试的情况下部署到生产环境。如果使用log4net调试开关部署您的产品,最终会发生奇怪。

http://haacked.com/archive/2006/09/27/Log4Net_Troubleshooting.aspx

http://logging.apache.org/log4net/release/faq.html(请参阅问题排查部分)

答案 1 :(得分:1)

我遇到了这个并没有归结为log4net,而是将源重新映射到新的自定义日志。我把log4net从等式中拿出来,发现问题直接发生在EventLog类上,我最终找到了EventLog.CreateEventSource is not creating a custom log

我认为这也是Windows service always writes to custom log and application log

背后的原因

答案 2 :(得分:0)

首先,我建议您打开内部调试,如发布的链接ntcolonel中所示。将其添加到您的配置文件中:

<add key="log4net.Internal.Debug" value="true"/>

也许我并不完全理解你的问题,但我想确保你们都创建了appender并且正确地告诉log4net你想要实际使用那个appender:

  <log4net debug="true">
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
  <file value="Logs\SomeApplication.xml"/>
  <appendToFile value="true"/>
  <rollingStyle value="Size"/>
  <countDirection value="1"/>
  <maxSizeRollBackups value="30"/>
  <maximumFileSize value="10MB"/>
  <staticLogFileName value="true"/>
  <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
  <layout type="log4net.Layout.XmlLayoutSchemaLog4j">
    <locationInfo value="true"/>
  </layout>
</appender>

<appender name="SmtpAppender" type="log4net.Appender.SmtpAppender">
  <to value="SomeDistributionList@somehost.com"/>
  <from value="SomeApplication@somehost.com"/>
  <subject type="log4net.Util.PatternString" value="Some Application Error - %property{log4net:HostName}"/>
  <smtpHost value="smtp.somehost.com"/>
  <bufferSize value="1"/>
  <threshold value="ERROR"/>
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date %property{log4net:HostName} %logger %level %newline%newline%property{ExceptionThrottleInformation}%newline%newline%message%newline"/>
  </layout>
  <filter type="SomeNamespace.SomeSubNamespace.Log4Net.ExceptionThrottleFilter, SomeSubNamespace">
    <threshold value="10"/>
    <thresholdTimeoutSeconds value="60"/>
    <timeoutSecondsBetweenMessages value="600000"/>
    <exceptionText value="Timeout expired"/>
  </filter>
</appender>

<appender name="DatabaseAppender" type="SomeNamespace.SomeSubNamespace.DatabaseTraceAppender, SomeSubNamespace">
  <hoursToKeepInformationalTraces value="48"/>
  <hoursToKeepErrorTraces value="96"/>
  <threshold value="INFO"/>
</appender>

<root>
  <level value="INFO"/>
  <appender-ref ref="RollingFileAppender"/>
  <appender-ref ref="SmtpAppender"/>
  <appender-ref ref="DatabaseAppender"/>
</root>

请注意,虽然我有多个appender,但我引用了在root标记中调用的内容。由于您没有发布整个配置文件,因此很难判断一切是否符合要求。