在网易的时候,项目整体框架都是已经被大神搭建好了的,很多事情都不用操心,比如用户权限控制,session过滤,ip限制,大部分jar包依赖以及项目日志配置。后来自己写项目的时候,觉得用不到,就也自动略过了,这周在跑爬虫项目的时候,被控制台上一屏一屏的INFO给吓到了,眨眼的功夫貌似看到一处报错,赶紧停止,向上翻了好几页才找到,整个人都不好了。
我想是时候做一下log管理了。
开始想用log4j,但是被师兄严厉制止。
“log4j是很low的东西”
师兄一边爱抚着他那能够八百标兵奔北坡北坡标兵奔八百的超大屏幕一边心不在焉的说。
“要用logback,我们都用这个”
师兄葱白的手指在闪烁着象牙光泽的键盘上敲击几下,发给我这个蹩脚的单词。
老实如我,只好开始去研究logback。
先是官网: http://logback.qos.ch/
然后是一个大神写的系列文章: http://blog.csdn.net/haidage/article/details/6794529
依赖如下:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.7</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.1.3</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.3</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
其中org.slf4j是logback必须依赖的,我自己配一个也没啥,logback-core和logback-core是logback的两个核心jar包,commons-long是为了避免一些不必要的麻烦。
官网介绍的是只有一个依赖:
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.0.13</version>
</dependency>
logback默认的会在resource文件夹下面(反正就是在classpath里面找啦)找一个叫做logback.xml的配置文件,这个是源码里面写死了的,你名字叫做fucklogback.xml是无论如何也没办法让它加载到。这个配置文件配起来超级简单。 http://blog.csdn.net/haidage/article/details/6794529这几篇文章里面配的讲的很详细了。
贴一下我配的:
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{40} - %msg%n</pattern>
</layout>
</appender>
<!-- 所有日志文件-->
<appender name="AllLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>log/abcchina/all/%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{40} - %msg%n</pattern>
</encoder>
</appender>
<!-- 为某个包下的所有类指定Appender 这里也可以指定类名称例如:com.aa.bb.ClassName-->
<logger name="com.liushuqing" level="INFO" additivity="false">
<appender-ref ref="stdout"/>
</logger>
<logger name="org.springframework" level="ERROR" additivity="false">
</logger>
<logger name="us.codecraft" level="ERROR" additivity="false">
</logger>
<logger name="org.apache.velocity" level="ERROR" additivity="false">
</logger>
<logger name="ch.qos.logback" level="ERROR" additivity="false">
</logger>
<root level="INFO">
<appender-ref ref="AllLog"/>
<appender-ref ref="stdout"/>
</root>
很直白,name写的就是需要配置的包,这个包可能是你自己项目的也可能是你用的依赖的。比如我自己com.liushuqing下面的,所有的日志只要级别在INFO以上,都要在屏幕输出,而我讨厌看到的那些系统日志,比如spring和apache的,只有报错的也就是ERROR我才让它输出,这样干扰信息就少多了。最后那些没有被配置到的呢,自然就交给了那个名字叫做root的托管了,毕竟它名字牛逼,不找它找谁。