Logback different files for different levels

2019-02-11 02:11发布

I have this appender in my logback.xml

<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <File>logFile.log</File>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <FileNamePattern>logFile.%d{yyyy-MM-dd}.log</FileNamePattern>
        <maxHistory>5</maxHistory>
    </rollingPolicy>

    <layout class="ch.qos.logback.classic.PatternLayout">
        <Pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{35} - %msg%n</Pattern>
    </layout>
</appender> 

<root>
    <level value="ALL" />
    <appender-ref ref="FILE" />
</root>

So at the moment I am saving all my logs to one file. How can I make it like, one file saves only error logs and other saves all other?

And I want to keep using only 1 instance of logger in my code, something like this:

 private static final Logger log = LoggerFactory.getLogger(Main.class);

2条回答
闹够了就滚
2楼-- · 2019-02-11 02:39

This is what I do for Jboss but I guess you'll get the solution.

Create a dedicated appender for error.log as follows,

<appender name="ErrorFile" class="org.jboss.logging.appender.DailyRollingFileAppender">
      <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
      <param name="File" value="${jboss.server.log.dir}/error.log"/>
      <param name="Threshold" value="ERROR"/>
      <param name="Append" value="false"/>

      <!-- Rollover at midnight each day -->
      <param name="DatePattern" value="'.'yyyy-MM-dd"/>

      <!-- Rollover at the top of each hour
      <param name="DatePattern" value="'.'yyyy-MM-dd-HH"/>
      -->

      <layout class="org.apache.log4j.PatternLayout">
         <!-- The default pattern: Date Priority [Category] Message\n -->
         <param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>

         <!-- The full pattern: Date MS Priority [Category] (Thread:NDC) Message\n
         <param name="ConversionPattern" value="%d %-5r %-5p [%c] (%t:%x) %m%n"/>
          -->
      </layout>
   </appender>

Create an appender for the rest of them

 <appender name="File" class="org.jboss.logging.appender.DailyRollingFileAppender">
          <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
          <param name="File" value="${jboss.server.log.dir}/server.log"/>
          <param name="Threshold" value="ALL"/>
          <param name="Append" value="false"/>

          <!-- Rollover at midnight each day -->
          <param name="DatePattern" value="'.'yyyy-MM-dd"/>

          <!-- Rollover at the top of each hour
          <param name="DatePattern" value="'.'yyyy-MM-dd-HH"/>
          -->

          <layout class="org.apache.log4j.PatternLayout">
             <!-- The default pattern: Date Priority [Category] Message\n -->
             <param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>

             <!-- The full pattern: Date MS Priority [Category] (Thread:NDC) Message\n
             <param name="ConversionPattern" value="%d %-5r %-5p [%c] (%t:%x) %m%n"/>
              -->
          </layout>
       </appender>

Then create specific categories for both the above

<category name="your_file_name/package_name">
      <priority value="ERROR"/>
      <appender-ref ref="ErrorFILE"/>
 </category>
 <category name="your_file_name/package_name">
      <priority value="ALL"/>
      <appender-ref ref="File"/>
 </category>
查看更多
Juvenile、少年°
3楼-- · 2019-02-11 02:52

Started looking for logback categories, found filters.

Just add filter description to your appender:

    <filter class="ch.qos.logback.classic.filter.LevelFilter">
        <level>ERROR</level>
        <onMatch>ACCEPT</onMatch>
        <onMismatch>DENY</onMismatch>
    </filter>
查看更多
登录 后发表回答