Log - slf4j+logback(二) - 配置及使用
1. 去除相关依赖
Maven项目中找到相关的依赖,比如:commons-logging, log4j然后去掉
但是有些显式的dependecy依赖,需要通过exclusions去掉. 仅仅去掉就会使其不能正常工作,还需要添加commons logging到slf4j的桥接器jcl-over-slf4j.
<dependency> <groupId>org.slf4j</groupId> <artifactId>jcl-over-slf4j</artifactId> <version>${jcl.over.slf4j.version}</version> </dependency>
如果有直接使用log4j的组件,也要将log4j排除掉,同时添加log4j-over-slf4。
<dependency> <groupId>org.slf4j</groupId> <artifactId>log4j-over-slf4j</artifactId> </dependency>
2. Logback
启动文件查找顺序:
- logback-test.xml
- logback.groovy
- logback.xml
- 如果上述的文件都找不到,则
logback会使用JDK的SPI机制查找META-INF/services/ch.qos.logback.classic.spi.Configurator中的logback配置实现类,这个实现类必须实现Configuration接口,使用它的实现来进行配置 -
如果上述操作都不成功,
logback就会使用它自带的BasicConfigurator来配置,并将日志输出到console。
3. logback.xml
<?xml version="1.0" encoding="UTF-8"?> <!--scan: 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。 scanPeriod: 设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 debug: 当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 configuration 子节点为 appender、logger、root --> <configuration scan="true" scanPeriod="60 seconds" debug="false"> <!--用于区分不同应用程序的记录--> <contextName>test-app</contextName> <!--日志文件所在目录,如果是tomcat,如下写法日志文件会在则为${TOMCAT_HOME}/bin/logs/目录下--> <property name="LOG_HOME" value="logs"/> <!--控制台--> <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %logger输出日志的logger名 %msg:日志消息,%n是换行符 --> <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] %-5level %logger{36} : %msg%n</pattern> <!--解决乱码问题--> <charset>UTF-8</charset> </encoder> </appender> <!--滚动文件--> <appender name="infoFile" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- ThresholdFilter:临界值过滤器,过滤掉 TRACE 和 DEBUG 级别的日志 --> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>INFO</level> </filter> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${LOG_HOME}/${LOG_FILE}.%d{yyyy-MM-dd}.log.gz</fileNamePattern> <maxHistory>30</maxHistory><!--保存最近30天的日志--> </rollingPolicy> <encoder> <charset>UTF-8</charset> <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] %-5level %logger{36} : %msg%n</pattern> </encoder> </appender> <!--滚动文件--> <appender name="errorFile" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- ThresholdFilter:临界值过滤器,过滤掉 TRACE 和 DEBUG 级别的日志 --> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>error</level> </filter> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${LOG_HOME}/${ERROR_LOG_FILE}.%d{yyyy-MM-dd}.log</fileNamePattern> <maxHistory>30</maxHistory><!--保存最近30天的日志--> </rollingPolicy> <encoder> <charset>UTF-8</charset> <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] %-5level %logger{36} : %msg%n</pattern> </encoder> </appender> <!--将日志输出到logstack--> <!--<appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender"> <destination>47.93.173.81:7002</destination> <encoder class="net.logstash.logback.encoder.LogstashEncoder"> <charset>UTF-8</charset> </encoder> <keepAliveDuration>5 minutes</keepAliveDuration> </appender>--> <!--这里如果是info,spring、mybatis等框架则不会输出:TRACE < DEBUG < INFO < WARN < ERROR--> <!--root是所有logger的祖先,均继承root,如果某一个自定义的logger没有指定level,就会寻找 父logger看有没有指定级别,直到找到root。--> <root level="debug"> <appender-ref ref="stdout"/> <appender-ref ref="infoFile"/> <appender-ref ref="errorFile"/> <appender-ref ref="logstash"/> </root> <!--为某个包单独配置logger 比如定时任务,写代码的包名为:com.seentao.task 步骤如下: 1、定义一个appender,取名为task(随意,只要下面logger引用就行了) appender的配置按照需要即可 2、定义一个logger: <logger name="com.seentao.task" level="DEBUG" additivity="false"> <appender-ref ref="task" /> </logger> 注意:additivity必须设置为false,这样只会交给task这个appender,否则其他appender也会打印com.seentao.task里的log信息。 3、这样,在com.seentao.task的logger就会是上面定义的logger了。 private static Logger logger = LoggerFactory.getLogger(Class1.class); --> </configuration>

浙公网安备 33010602011771号