解决两个问题:
1、日志文件先按日期分割,再按指定大小分割;
2、日志输出到catalina.out;
1、日志输出到catalina.out
在logback.xml里如下配置后就能输出到console里,
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder charset="UTF-8">
<pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS} %5p %c:%L KEY:%X{_TRACE_KEY}] %m%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<root level="info">
<appender-ref ref="console"/>
</root>
</configuration>
然后tomcat的启动脚本catalina.sh(catalina.bat)里有一句(默认就是这样)
if [ -z "$CATALINA_OUT" ] ; then
CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out
fi
于是就能输出到catalina.out文件里了。
2、logback.xml
可参见:
http://aub.iteye.com/blog/1103685
http://blog.csdn.net/jiaolong724/article/details/50608089
logback有两个常用的appender
(ConsoleAppender和RollingFileAppender),分别将日志输出到控制台和文件,两者可同时配置。
RollingFileAppender有两种策略
(RollingPolicy和TriggeringPolicy),分别表示滚动策略,和滚动触发策略。
RollingPolicy的默认实现有TimeBasedRollingPolicy和FixedWindowRollingPolicy
TriggeringPolicy的默认实现有TimeBasedRollingPolicy和SizeBasedTriggeringPolicy等
其中,TimeBasedRollingPolicy既是RollingPolicy也是TriggeringPolicy,不能和其他的RollingPolicy或TriggeringPolicy混用;但是,可以以组合的方式和TimeBasedFileNamingAndTriggeringPolicy进行搭配使用,以实现先按日期分割,再按大小分割的效果。
FixedWindowRollingPolicy和SizeBasedTriggeringPolicy可以搭配使用,起到按文件大小进行滚动的效果。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder charset="UTF-8">
<pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS} %5p %c:%L KEY:%X{_TRACE_KEY}] %m%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 先按时间,再按大小 -->
<appender name="app" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/app.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logs/app.%d{yyyy-MM-dd-}-%i.log</fileNamePattern>
<MaxHistory>100</MaxHistory>
<TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<MaxFileSize>50MB</MaxFileSize>
</TimeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder charset="UTF-8">
<pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS} %5p %c:%L KEY:%X{_TRACE_KEY}] %m%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 仅按时间 -->
<appender name="timeBasedRollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/app.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logs/app.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>60</maxHistory>
</rollingPolicy>
<encoder>
<pattern>[%-5level][%date] [%thread][KEY:%X{_TRACE_KEY}] --%msg--[%M][%F{16},%L]%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 仅按大小 -->
<appender name="sizeBaseRollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/app.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>logs/app.%i.log</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>100</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>100MB</maxFileSize>
</triggeringPolicy>
<encoder>
<pattern>[%-5level][%date] [%thread][KEY:%X{_TRACE_KEY}] --%msg--[%M][%F{16},%L]%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<root level="info">
<appender-ref ref="app"/>
<!--不输出到catalina.out里-->
<!--<appender-ref ref="console"/>-->
</root>
</configuration>