使用log4net写入不同的记录器 [英] Using log4net to write to different loggers

查看:88
本文介绍了使用log4net写入不同的记录器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用log4net进行日志记录. 我希望它同时写入文件和事件日志.

I am using log4net to do my logging. I would like it to write to a file and to the eventlog at the same time.

由于某种原因,我在日志文件中发现了两次消息.

For some reason, I find the messages twice in my logfile.

这是我的app.config-section:

This is my app.config-section :

<log4net>
    <root>
        <level value="INFO" />
        <appender-ref ref="LogFileAppender" />
        <appender-ref ref="EventLogAppender" />
    </root>
    <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender" >
        <param name="File" value="c:\temp\DIS-logfile.txt" />
        <param name="AppendToFile" value="true" />
        <rollingStyle value="Size" />
        <maxSizeRollBackups value="10" />
        <maximumFileSize value="10MB" />
        <staticLogFileName value="true" />
        <layout type="log4net.Layout.PatternLayout">
            <param name="ConversionPattern" value="%date %-5level %logger - %message%newline" />
        </layout>
    </appender>
    <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
        <param name="Indigo.DataIntakeService" value="eventlog" />
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%date %-5level %logger - %message%newline" />
            </layout>
    </appender>
</log4net>

在我的代码中,我必须执行以下操作:

In my code I have tof following :

private static readonly ILog Log = log4net.LogManager.GetLogger("DataIntakeService");
private static readonly ILog LogEvents = log4net.LogManager.GetLogger("EventLogAppender");

static void Main(string[] args)
{
    log4net.Config.XmlConfigurator.Configure();
}

public static void LogInfo(string message)
{
    Log.Info(message);
    LogEvents.Info(message);
}

它会根据请求写入我的日志文件,但是消息也应该发送到我的事件查看器,但不会发生.它将这些消息也写到日志文件中.

It writes to my log-file, as requested, but the messages should also go to my eventviewer and that doesn't happen. It writes those messages to the logfile as well.

我哪里出错了?

推荐答案

您已经配置了Log4Net,以便根记录器将日志记录到文件和事件日志附加程序中. 所有记录器都继承此配置,因此您的记录器"DataIntakeService"和"EventLogAppender"都记录到这些附加程序.

You have configured Log4Net so that the root logger logs to both file and event log appenders. All loggers inherit this configuration, so both your loggers "DataIntakeService" and "EventLogAppender" log to these appenders.

如果在事件查看器中看不到日志消息,则可能是因为您的应用程序无权创建事件源.

If you don't see log messages in event viewer, it may be because your application doesn't have permission to create the Event source.

更新

我如何配置它,以便DataIntakeService记录到文件,另一个记录到eventviewer?

How can i configure it so the DataIntakeService logs to the file and the other one to the eventviewer ?

这是一个示例配置:

<log4net>
  <root>
    <level value="INFO" />
    <appender-ref ref="LogFileAppender" />
  </root>
  <logger name="EventLogAppender" additivity="False">
    <level value="INFO" />
    <appender-ref ref="EventLogAppender" />
  </logger>
  <appender>
  ... 

使用此示例:

  • 根记录器(以及所有子记录器,除非另有明确配置)将记录到LogFileAppender.您的DataIntakeService记录器未明确配置,因此会继承此配置.

  • The root logger (and hence all child loggers unless explicitly configured otherwise) will log to LogFileAppender. Your DataIntakeService logger isn't explicitly configured, so inherits this configuration.

EventLogAppender记录器已明确配置为登录到EventLogAppender,并且配置为不继承父记录器(additivity="false")的设置.因此,它不会记录到LogFileAppender.如果设置additivity="true",它将继承设置并登录到LogFileAppenderEventLogAppender.

The EventLogAppender logger is explicitly configured to log to EventLogAppender, and is configured not to inherit settings from parent loggers (additivity="false"). Therefore it doesn't log to LogFileAppender. If you set additivity="true" it will inherit settings and log to both LogFileAppender and EventLogAppender.

顺便提一句,命名记录器EventLogAppender可能有点令人困惑:EventLogLogger可能是一个更好的名字.

Incidentally, naming a logger EventLogAppender is perhaps a bit confusing: EventLogLogger might be a better name.

这篇关于使用log4net写入不同的记录器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆