创建普通maven工程
略
修改pom.xml
添加下面依赖:
<dependencies>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
</dependencies>
logback.xml 配置文件
在 resources 文件夹下创建 logback.xml 文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!-- scan="true"开启对配置信息的自动扫描(默认时间为60秒扫描一次) 注:当此文件的配置信息发生变化时,此设置的作用就体现出来了,不需要重启服务 -->
<configuration scan="true">
<!-- 通过property标签,来存放key-value数据,便于后面的动态获取,提高程序的灵活性 -->
<property name="log-dir" value="log" />
<property name="log-name" value="logFile" />
<!-- 配置appender(对日志的处理方法,可以配置多个) -->
<!--
name:自定义,
class:加载指定类(ch.qos.logback.core.ConsoleAppender类将日志输出到控制台),
pattern:指定输出的日志格式
-->
<appender name="consoleAppender"
class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36}:%L- %msg%n</pattern>
<!-- 日志编码 -->
<charset class="java.nio.charset.Charset">UTF-8</charset>
</encoder>
</appender>
<!--
name:自定义,
class:加载指定类(ch.qos.logback.core.rolling.RollingFileAppender类会将日志输出到指定的文件中),
FileNamePattern:文件的全路径名模板 (注:如果最后结尾是gz或者zip等的话,那么会自动打成相应压缩包)
-->
<appender name="fileAppender"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 把日志文件输出到:项目启动的目录下的log文件夹(无则自动创建)下 -->
<!-- 把日志文件输出到:name为log-dir的property标签指定的位置下 -->
<file>${log-dir}/${log-name}.log</file>
<!-- rollingPolicy:滚动策略,都会将该天的日志存为指定的格式的文件 -->
<!-- TimeBasedRollingPolicy策略,每天结束时,会将过时的日志,另存到指定的文件中(无该文件则创建) -->
<rollingPolicy
class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 把过时日志改名,改成 fileNamePattern 格式的名字 -->
<!-- 设置过时时间(单位:<fileNamePattern>标签中%d里最小的时间单位) -->
<fileNamePattern>${log-dir}/${log-name}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- 保留7天的日志,之前的日志会删除掉 -->
<MaxHistory>
7
</MaxHistory>
<!-- 滚动策略可以嵌套;
这里嵌套了一个SizeAndTimeBasedFNATP策略,
主要目的是: 在每天都会拆分日志的前提下,
当该天的日志大于规定大小时,
也进行拆分并以【%i】进行区分,i从0开始
-->
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>5MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<!-- 日志输出格式 -->
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36}:%L- %msg%n</pattern>
<!-- 日志编码,windows默认为GBK,要改成 UTF-8 -->
<charset class="java.nio.charset.Charset">UTF-8</charset>
</encoder>
</appender>
<!-- >>>>>>>>>>>>>>>>>>>>>>>>>配置logger(可以配置多个)>>>>>>>>>>>>>>>>>>>>>>>>> -->
<!--
指定[哪个包]下使用[哪个appender],并设置 记录到日志文件中的日志的最下
级别(低于次级别的日志信息不回输出记录到日志文件中)
注:日志级别有: trace|debug|info|warn|error|fatal
注:当有多处指定了要记录的日志的最下日志级别时,走优先级最高的,优先级:
logback-spring.xml中 > 启动jar包时 > xxx.properties/xxx.yml中
-->
<logger name="top.malaoshi.mapper" level="debug" />
<!--
root:logger的根节点,appender-ref:确定使用哪个appender
level:对整体设置级别,该级别不会影响<logger level=""/> 中的级别
注:如果不指定配置此项,logback不生效
-->
<root level="info">
<appender-ref ref="consoleAppender" />
<appender-ref ref="fileAppender" />
</root>
</configuration>
重点:
<root level="info">定义的日志级别是info,大于等于该级别的打印日志,才会执行<logger name="top.malaoshi.mapper" level="debug" />包下的日志级别是debug,不受<root level="info">的控制
配置详见:
https://www.cnblogs.com/ryelqy/p/10314147.html
测试类
Mapper
package top.malaoshi.mapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Mapper {
static final Logger log= LoggerFactory.getLogger(Mapper.class);
public static void test(){
String content="测试:abc 123 中文";
log.trace("trace级别:: {}-{}",content);
log.debug("debug级别:: {}-{}",content);
log.info("info级别:: {}-{}",content);
log.warn("warn级别:: {}-{}",content);
log.error("error级别:: {}-{}",content);
}
}
主启动类
package top.malaoshi;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import top.malaoshi.mapper.Mapper;
public class Main {
static final Logger log= LoggerFactory.getLogger(Main.class);
public static void main(String[] args) {
String content="hello world!--测试中文";
log.trace("trace级别:: {}-{}",content);
log.debug("debug级别:: {}-{}",content);
log.info("info级别:: {}-{}",content);
log.warn("warn级别:: {}-{}",content);
log.error("error级别:: {}-{}",content);
Mapper.test();
}
}
显示结果:
16:25:28.281 [main] INFO top.malaoshi.Main:14- info级别:: hello world!
16:25:28.284 [main] WARN top.malaoshi.Main:15- warn级别:: hello world!
16:25:28.284 [main] ERROR top.malaoshi.Main:16- error级别:: hello world!
16:25:05.565 [main] DEBUG top.malaoshi.mapper.Mapper:13- debug级别:: abc123
16:25:05.566 [main] INFO top.malaoshi.mapper.Mapper:14- info级别:: abc123
16:25:05.566 [main] WARN top.malaoshi.mapper.Mapper:15- warn级别:: abc123
16:25:05.566 [main] ERROR top.malaoshi.mapper.Mapper:16- error级别:: abc123
为什么显示下面3行?
16:25:28.281 [main] INFO top.malaoshi.Main:14- info级别:: hello world!
16:25:28.284 [main] WARN top.malaoshi.Main:15- warn级别:: hello world!
16:25:28.284 [main] ERROR top.malaoshi.Main:16- error级别:: hello world!
原因:由于在配置文件中设置了:
<root level="info">
<appender-ref ref="consoleAppender" />
<appender-ref ref="fileAppender" />
</root>
所以,只有 日志打印级别 >= info,才会显示到控制台,写入到文件中
为什么显示下面4行?
下面显示了 debug 级别的日志,不符合 日志打印级别 >= info
16:25:05.565 [main] DEBUG top.malaoshi.mapper.Mapper:13- debug级别:: abc123
16:25:05.566 [main] INFO top.malaoshi.mapper.Mapper:14- info级别:: abc123
16:25:05.566 [main] WARN top.malaoshi.mapper.Mapper:15- warn级别:: abc123
16:25:05.566 [main] ERROR top.malaoshi.mapper.Mapper:16- error级别:: abc123
原因:由于在配置文件中设置了:
<logger name="top.malaoshi.mapper" level="debug" />
所以,top.malaoshi.mapper 包及其子包的有效级别是debug,也就是说 日志打印级别 >= debug,就会显示到控制台,写入到文件中
即:不受下面配置的控制:
<root level="info">
<appender-ref ref="consoleAppender" />
<appender-ref ref="fileAppender" />
</root>