抛弃log4j改用logback
公司的新平台最近日志总出问题:
- 满容量后不自动备份,并且把该日志内容全部刷掉。。
- 满容量后不自动备份,继续写,导致日志文件异常之大。。
关于log4j的配置,RollingFileAppender几年来都是这么用的没什么好说的,
问题原因我还没找到,但估计多少和JDK升级到1.6有关
分割线============================================
logback的主页,链接一下:http://logback.qos.ch/
logback是log4j的创始人开发的新一代日志组件,性能更好,功能更强大!
logback实现了SLF4J,所以我们可以直接依赖SLF4J的接口~~
需要的jar:
slf4j-api-1.6.3.jar;
logback-core-0.9.30.jar
logback-classic-0.9.30.jar
可选的jar:
logback-access-0.9.30.jar
slf4j的版本要求不高,看教程是1.6.2,我用的是1.6.3
logback-access这个是Web控制台,JavaEE的可以考虑试试。
调用:
import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class Hello { /** * @param args */ public static void main(String[] args) { Logger log = LoggerFactory.getLogger(Hello.class); log.info("hello world"); } }
注意,依赖的是SLF4J
然后运行一下就能看到效果了。
这里logback有一个默认的日志配置,如果classpath中找不到logback.xml或logback-test.xml,就会启用这个默认的配置。
关于logback的配置,总体思路和log4j类似,内置的日志类型更为丰富,详见:http://logback.qos.ch/manual/index.html
这里给一个我使用下来觉得不错的配置,供大家参考:
<configuration scan="true" scanPeriod="30 seconds"> <appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender"> <prudent>true</prudent> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern> log/myApp-%d{yyyy-MM-dd}.%i.log</fileNamePattern> <maxHistory>30</maxHistory> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>10MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> <encoder> <pattern>%date %level [%thread] %logger.%class{0}#%method [%file:%line] %msg%n</pattern> </encoder> </appender> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%date %level [%thread] %logger.%class{0}#%method [%file:%line] %msg%n</pattern> </encoder> </appender> <root level="info"> <appender-ref ref="STDOUT" /> </root> <logger name="myApp"> <appender-ref ref="ROLLING" /> </logger> </configuration>
最后说一下改造后的效果:
恩,非常理想,为啥我不早点用这好东西