代码之家  ›  专栏  ›  技术社区  ›  Jack Pines

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

  •  1
  • Jack Pines  · 技术社区  · 9 年前

    虽然设置不同的日志文件并不困难,每个级别都有不同的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 回复  |  直到 9 年前
        1
  •  2
  •   IsraelKo    9 年前

    您不能在配置文件中执行此操作,但可以使用模式布局转换器进行此操作。

    参见信息 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>
    
    推荐文章