Rolling logback logs on filesize and time

后端 未结 3 2182
无人及你
无人及你 2020-11-29 00:04

I\'ve been trying to set up a simple logback project to roll my log files by date and by filesize, and so far I have been unable to get my appender to roll over to another f

相关标签:
3条回答
  • 2020-11-29 00:47

    Although this is an old question, I felt that a working answer is appropriate to help anyone who requires this kind of implementation.

    I use the following logback configuration to provide an HTML log, rolled over by date and filesize, as well as logging to console for debugging output.

    Logfiles are stored in a logs directory with a name of logFile.html while its active, and logFile.2013-mm-dd.i.html when it rolls over, where i is the number of 50MB log files. For instance logFile.2013-01-07.0.html.

    <configuration>
    
      <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <!-- encoders are assigned the type
             ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
        <encoder>
          <charset>UTF-8</charset>
          <pattern>%d{HH:mm:ss.SSS} [%thread] %highlight(%-5level) %cyan(%logger{35}) - %msg %n</pattern>
        </encoder>
      </appender>
    
      <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>logs\logFile.html</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
          <!-- daily rollover -->
          <fileNamePattern>logs\logFile.%d{yyyy-MM-dd}.%i.html</fileNamePattern>
          <timeBasedFileNamingAndTriggeringPolicy
              class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
              <!-- or whenever the file size reaches 50MB -->
            <maxFileSize>50MB</maxFileSize>
          </timeBasedFileNamingAndTriggeringPolicy>
          <!-- keep 30 days' worth of history -->
          <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
          <charset>UTF-8</charset>
          <layout class="ch.qos.logback.classic.html.HTMLLayout">
            <pattern>%d{HH:mm:ss.SSS}%thread%level%logger%line%msg</pattern>
          </layout>         
        </encoder>
      </appender> 
    
      <root level="DEBUG">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE" />     
      </root>
    
    </configuration>
    
    0 讨论(0)
  • 2020-11-29 00:50

    You should be able to set up your log using a FileHandler.

    http://java.sun.com/j2se/1.4.2/docs/api/java/util/logging/FileHandler.html#FileHandler(java.lang.String, int, int)

    This takes a file size limit and rotates the log when it hits that limit.

    0 讨论(0)
  • 2020-11-29 01:00

    Since logback 1.1.7 (released March 2016) a new appender called SizeAndTimeBasedRollingPolicy is available that dramatically simplifies what you need to do:

    <appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>app.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>app-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <maxFileSize>10MB</maxFileSize>    
            <maxHistory>30</maxHistory>
            <totalSizeCap>1GB</totalSizeCap>
        </rollingPolicy>
        <encoder>
            <pattern>%msg%n</pattern>
        </encoder>
    </appender>
    

    See here for further info.

    0 讨论(0)
提交回复
热议问题