【问题标题】:log4net - conversionPattern per level for single FileAppender?log4net - 单个 FileAppender 的每级转换模式?
【发布时间】:2015-10-27 13:23:27
【问题描述】:

虽然设置不同的日志文件并不困难,每个文件都有不同的转换模式,每个级别,我希望对除错误之外的所有日志文件进行最少的日志记录,我想要一个详细的日志条目。这是我当前配置的 sn-p:

<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>

我希望将这两种配置都放入一个日志文件中,只是每个配置都有不同的转换模式。这个可以吗?

【问题讨论】:

    标签: configuration log4net fileappender


    【解决方案1】:

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

    查看信息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>
    

    【讨论】:

    • 谢谢,你解释得很好。我正在努力以编程方式自定义 %date 的格式。你的解决方案在这方面帮助了我。
    猜你喜欢
    • 1970-01-01
    • 2010-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多