log4net - 单个FileAppender的每个级别的conversionPattern?

时间:2015-08-04 23:40:13

标签: configuration log4net fileappender

虽然设置不同的日志文件并不困难,每个日志文件的每个级别都有不同的conversionPattern,但我希望除了错误之外的所有日志文件都有最少的日志记录,我喜欢详细的日志条目。这是我当前配置的一小部分:

<appender name="WarningsAndBelowFileAppender" type="log4net.Appender.FileAppender">
  <file value="log.txt" />
  <appendToFile value="false" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%m%n" />
  </layout>
  <filter type="log4net.Filter.LevelRangeFilter">
    <levelMax value="WARN" />
  </filter>
</appender>

<appender name="ErrorsFileAppender" type="log4net.Appender.FileAppender">
  <file value="errors.txt" />
  <appendToFile value="false" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%d [%t] %-5p %c [%x] - %m%n" />
  </layout>
  <threshold value="ERROR" />
</appender>

我希望将这两种配置都放在一个日志文件中,每个配置只有不同的conversionPatterns。可以这样做吗?

1 个答案:

答案 0 :(得分:0)

你不能在配置文件中这样做,但你可以使用模式布局转换器。

请参阅信息here

这应该是转换后的代码:

class MyMessageConverter : PatternLayoutConverter
{
    protected override void Convert(TextWriter writer, LoggingEvent loggingEvent)
    {
        if (loggingEvent.Level.Value <= Level.Warn.Value)
        {
            writer.Write(loggingEvent.RenderedMessage);
        }
        else
        {
            writer.Write("{0} [{1}] {2,5} {3} - {4}",
                loggingEvent.TimeStamp,
                loggingEvent.ThreadName,
                loggingEvent.Level.Name,
                loggingEvent.LocationInformation.ClassName,
                loggingEvent.RenderedMessage);

        }
    }
}

这是配置文件:

<appender name="FileAppender" type="log4net.Appender.FileAppender">
  <file value="log.txt" />
  <appendToFile value="false" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%MSG%n" />
      <converter>
        <name value="MSG" />
        <type value="yournamespace.MyMessageConverter " />
      </converter>
  </layout>
</appender>
相关问题