ssm中使用logback日志
前言:在我的另一篇博客中(springboot日志框架)介绍现在所流行的一些日志框架,本文主要针对ssm中使用logback日志。
引入依赖
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
在类路径下(src/main/resources)新建一个logback.xml文件
这里贴出一个模板,下面会有解释
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!-- 定义参数常量 -->
<!-- TRACE<DEBUG<INFO<WARN<ERROR -->
<!-- logger.trace("msg") logger.debug... -->
<property name="log.level" value="debug" />
<property name="log.maxHistory" value="30" />
<property name="log.filePath" value="${catalina.base}/logs/webapps" />
<property name="log.pattern"
value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n" />
<!-- 控制台输出设置 -->
<appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
</appender>
<!-- DEBUG级别文件记录 -->
<appender name="debugAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 文件路径 -->
<file>${log.filePath}/debug.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 文件名称 -->
<fileNamePattern>${log.filePath}/debug/debug.%d{yyyy-MM-dd}.log.gz
</fileNamePattern>
<!-- 文件最大保存历史数量 -->
<maxHistory>${log.maxHistory}</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>DEBUG</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- INFO -->
<appender name="infoAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 文件路径 -->
<file>${log.filePath}/info.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 文件名称 -->
<fileNamePattern>${log.filePath}/info/info.%d{yyyy-MM-dd}.log.gz
</fileNamePattern>
<!-- 文件最大保存历史数量 -->
<maxHistory>${log.maxHistory}</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<logger name="com.zfc" level="${log.level}" additivity="true">
<appender-ref ref="debugAppender"/>
<appender-ref ref="infoAppender"/>
</logger>
<root level="info">
<appender-ref ref="consoleAppender"/>
</root>
</configuration>
使用
如果用上面的模板,那么需要改57行的 ,name的值为 你要打印日志的范围,我设置的是在com.zfc包下都可以使用日志。
Logger logger = LoggerFactory.getLogger(getClass()); 先new出一个LoggerFactory,然后在你的代码处要打印日志的地方,使用logger.level();
level 级别: RACE<DEBUG<INFO<WARN<ERROR
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
........
@Test
public void testLog(){
Logger logger = LoggerFactory.getLogger(getClass());
logger.debug("》》》》》》》》》你好debug日志")
logger.info("》》》》》》》》》你好info日志");
}
模版解析
<configuration scan="true" scanPeriod="60 seconds" debug="false">
- scan : 就是扫描,
- scanPeriod : 扫描的间隔时期
就是每60秒会扫描日志配置文件,是否改变,如果改变了,就会自动更新。
<property name="log.level" value="debug" />
<property name="log.maxHistory" value="30" />
<property name="log.filePath" value="${catalina.base}/logs/webapps" />
<property name="log.pattern"
value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n" />
property 标签 在这里我们来标记常量,就是对于一些重复使用的值,就封装成一个常量,使用时,就用${name}.
- 第一个赋值了日志默认的输出级别
- 第二个赋值了日志存在的最大个数
- 第三个赋值了日志输出文件的路径
- 第四个赋值了日志的输入格式 时间 : 线程 :日志级别 :在哪个类下或者自己起的名字:日志内容
<appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
</appender>
- appender 在这里面我们设置日志级别的输出的 一些属性设置。
- name : 这里可以随便起,当然要符合规范,下面要用到
- class:这个跟你要打印到控制台,还是输出到文件里(属性)有关系。
- 这里一打印到控制台为例,那么class就写上 ch.qos.logback.core.ConsoleAppender
- encoder:将日志事件转换为字节数组 ,还可以写入到文件中
- patten:就是设置日志输出的格式 ,那么我们这里就用我们设置的常量就好了。
<appender name="debugAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 文件路径 -->
<file>${log.filePath}/debug.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 文件名称 -->
<fileNamePattern>${log.filePath}/debug/debug.%d{yyyy-MM-dd}.log.gz
</fileNamePattern>
<!-- 文件最大保存历史数量 -->
<maxHistory>${log.maxHistory}</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>DEBUG</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
- class=“ch.qos.logback.core.rolling.RollingFileAppender” 这里就是滚动日志文件类型,就是每天都会有一个日志文件(当然是你要用了到日志)
- file: 这是生成日志文件的路径 ,这里使用了常量值 ,然后后面加上文件名了。
- rollingPolicy: 这里配置了滚动日志的属性。
- fileNamePattern :
- 例子:2019.4.26号的日志文件名为debug.log ,那么2019.4.27 这个日志就变为了debug.2019-4-26.log.gz.
- (.gz 这里将昨天的日志文件进行压缩)
- filter: 过滤器 ,就是只接受这个级别的日志信息 。
<logger name="com.zfc" level="${log.level}" additivity="true">
<appender-ref ref="debugAppender"/>
<appender-ref ref="infoAppender"/>
</logger>
<root level="info">
<appender-ref ref="consoleAppender"/>
</root>
-
root : 就是根配置,就是默认输出的日志级别格式就是打印到控制台,级别是level(在不设置logger的时候,就用它)
logger: 就是将上面我们appender中的设置,生效。
name:日志可以用的范围
level:默认级别
additivity(true):就是root 里面的配置加到logger中去,级别会变成logger中的级别
appender-ref: 就是我们上面 appender 标签中的name属性的值。