继续上篇文章log4jdbc-log4j2留下的问题,就是logback日志切分的问题。
上一篇是介绍log4jdbc-log4j2 和log4j的使用,那么这边我就介绍一下log4jdbc-log4j2 和slf4j、logback的结合使用
我们来假想这么一种情况,当系统出现了问题,我们需要快速分析问题出在哪里并解决。
(1) 首先我们需要知道故障发生的时间,然后查看日志,当我跟踪日志的时候,发现就只有一个log,而且这个log超大,普通的一般的编辑器根本无法打开这种超大的日志文件,就算能打开,找到故障发生点的日志也不是一件容易的事情,是不是很头疼。
这个时候我们就会想要是日志能给我按照天给我存储就好了,那样我就能快速的定位日志在哪里了。
如果访问量比较大,就算按天访问,每天的log文件也很大怎么办,而且我们硬盘有限,也没有必要把所有的日志都保存起来,我只需要保存最近10天的日志就行,过期的就自动删除。
而且要是能把错误日志和访问日志分开存储那就更好了。现在我们就来学习一下logback(也是log4j的作者),因为logback已经提供了我们上面所说的功能。
那么今天我们就来使用slf4j和logback来实现上述功能。
1、我们需要Logback-classic.jar,Logback-classic.jar依赖slf4j-api.jar和logback-core.jar,所以我们需要这三个jar
2、我们需要告诉log4jdbc-log4j2我们要使用slf4j日志,那么怎么才能告诉它呢?
我们需要在classpath下新建log4jdbc.log4j2.properties文件
log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
3 、配置Logger
这里有6个Logger供我们配置,而log4j只有一个Logger啊,我们先来看看这6个logger:
这几个Logger都是和jdbc数据库有关的,对开发人员来说,我想要的就是简洁的sql语句就行,所以我我们一般常用jdbc.sqltiming,jdbc.resultsettable
那我们来看看logback.xml示例
<?xml version="1.0" encoding="UTF-8"?> <configuration> <!-- 该配置主要是打印 logback 的配置信息 --> <statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener"/> <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <appender name="ACCESS" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 按天回滚 daily --> <fileNamePattern>logs/access-%d{yyyy-MM-dd}.log</fileNamePattern> <!-- 日志最大的历史 10天 --> <maxHistory>10</maxHistory> </rollingPolicy> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern> </encoder> <!-- 日志级别限制 --> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>INFO</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY </onMismatch> </filter> <!--日志文件最大的大小 --> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <MaxFileSize>10MB</MaxFileSize> </triggeringPolicy> </appender> <!--sql 打印在控制台--> <logger name="jdbc.sqltiming" level="INFO"> <appender-ref ref="console" /> </logger> <logger name="jdbc.resultsettable" level="INFO"></logger> <logger name="jdbc.sqlonly" level="OFF"></logger> <logger name="jdbc.audit" level="OFF"></logger> <logger name="jdbc.resultset" level="OFF"></logger> <logger name="jdbc.connection" level="OFF"></logger> <!--同时记录log日志--> <root level="INFO"> <appender-ref ref="ACCESS" /> </root> </configuration>
配置文件中的appender 可以配置多个,其实您还可以配置一个错误的日志文件,只需要把日志级别限制修改成ERROR就行,同时在添加到root中就行了,其他的具体配置我们可以参考http://logback.qos.ch/manual/index.html logback的官网。