目录
2.需要在xml日志配置文件中添加占位符——自定义参数 %X{键值}
背景:在做项目的时候想要自定义一些项目中想要输出的日志
springboot自带的日志
当项目中没有配置的时候springboot会默认输出自带的日志格式
配置新日志文件
1.新建日志配置文件
想要自定义log日志文件的话 需要自定义一个log文件——命名很重要
2.编写配置文件内容
编写默认格式的log日志
配置文件的内容---当文件创建出来以后如果里边什么都不写的话 那么当我们启动项目就会出现控制台什么都不打的情况 (Banner除外 Banner也可以设置成自己喜欢的样子——后面给大家介绍)
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<!--配置为空-->
</configuration>
编写默认的日志配置文件——使用默认的相当于没有配置
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<!-- 控制台打印——使用springboot默认日志格式-->
<!-- 这个文件会默认覆盖springboot的日志 如果里边什么也不写的话 那么启动程序的时候就会什么也不显示 -->
<!--这个是引入了springboot的默认日志格式-->
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!-- 引入预设默认样式 引入后打印的就像是最一开始springboot打印的日志了 这个里边的${CONSOLE_LOG_PATTERN} 是ExternalLibraries中springframework.boot:spring-boot:2.6.2中的defaults.xml中CONSOLE_LOG_PATTERN-->
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>${CONSOLE_LOG_CHARSET}</charset>
</encoder>
</appender>
<!-- 指定日志输出级别 以及启用的APPender 这里使用的我们上边的ConsoleAppender-->
<!-- 日志级别:从低到高 TRACE<DEBUG<INFO<WARN<ERROR<FATAL springboot默认只会打印INFO以上的级别信息-->
<root level="INFO">
<appender-ref ref="CONSOLE"/>
</root>
<!-- 控制台打印——使用springboot默认日志格式-->
</configuration>
控制台打印——和没有配置的时候输出的一样
3.编写自定义log日志——文件打印
我们只需要配置一个对应的Appender就可以了
引入用于文件日志记录的RollingFileAppender
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<!-- 控制台打印——使用springboot默认日志格式-->
<!-- 这个文件会默认覆盖springboot的日志 如果里边什么也不写的话 那么启动程序的时候就会什么也不显示 -->
<!--这个是引入了springboot的默认日志格式-->
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!-- 引入预设默认样式 引入后打印的就像是最一开始springboot打印的日志了 这个里边的${CONSOLE_LOG_PATTERN} 是ExternalLibraries中springframework.boot:spring-boot:2.6.2中的defaults.xml中CONSOLE_LOG_PATTERN-->
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>${CONSOLE_LOG_CHARSET}</charset>
<!-- 引入预设默认样式 引入后打印的就像是最一开始springboot打印的日志了 这个里边的${CONSOLE_LOG_PATTERN} 是ExternalLibraries中springframework.boot:spring-boot:2.6.2中的defaults.xml中CONSOLE_LOG_PATTERN-->
</encoder>
</appender>
<!--ch.qos.logback.core.rolling.RollingFileAppender用于文件日志记录,并且支持滚动 有滚动策略-->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder>
<!-- 依然使用默认的日志格式-->
<pattern>${FILE_LOG_PATTERN}</pattern>
<charset>${FILE_LOG_CHARSET}</charset>
</encoder>
<!-- 自定义滚动策略,防止日志文件无限变大,也就是日志文件写到什么时候为止,重新创建一个新的日志文件-->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 文件保存位置以及文件命名规则,这里用到了%d{yyyy-MM-dd}表示当前日期,%i表示这一天的第N个日志-->
<FileNamePattern>log/%d{yyyy-MM-dd}-spring-%i.log</FileNamePattern>
<!-- 到期自动清理日志文件-->
<cleanHistoryOnStart>true</cleanHistoryOnStart>
<!-- 最大日志保留时间-->
<maxHistory>7</maxHistory>
<!-- 最大单个日志文件大小-->
<maxFileSize>10MB</maxFileSize>
</rollingPolicy>
</appender>
<!--ch.qos.logback.core.rolling.RollingFileAppender用于文件日志记录,并且支持滚动 有滚动策略-->
<!-- 指定日志输出级别 以及启用的APPender 这里使用的我们上边的ConsoleAppender-->
<!-- 日志级别:从低到高 TRACE<DEBUG<INFO<WARN<ERROR<FATAL springboot默认只会打印INFO以上的级别信息-->
<root level="INFO">
<appender-ref ref="CONSOLE"/>
<!-- 一定要在这写上 不然不会生效 -->
<appender-ref ref="FILE"/>
</root>
<!-- 控制台打印——使用springboot默认日志格式-->
</configuration>
配置完成后当我们启动项目的时候就会发现我们的Appender自动给我们生成了一个存储日志的包和一个日志文件
修改官方提供的日志格式
官方文档:LOGBack官网
logback内置的日志字段还是比较少的,如果我们需要打印有关业务的更多内容,包括自定义的一些数据,需要借助logback MDC机制 MDC为“Mapped Diagnostic Context”(映射诊断上下文) 即将一些运行时的上下文数据通过logback打印出来,此时我们需要借助rog.sl4j.MDC类
日志的基本字段
例如:我么现在需要记录是哪个用户访问我们网站的日志,只要是此用户访问我网站,都会在日志中携带该用户的id,我们希望每条日志中都携带这样一段信息文本,而官方提供的字段无法实现此功能,这时就需要使用MDC机制:
1.这里需要使用到 @Slf4j
@Slf4j
@Controller
public class MainController{
@RequestMapping("/login")
public String login(){
//这里使用Session代替id 实际使用可以替换成想要记录的字段
MDC.put("reqId",request.getSession().getId());
log.info("用户访问了一次登录界面")
return "login";
}
}
2.需要在xml日志配置文件中添加占位符——自定义参数 %X{键值}
当我们向MDC中添加信息后,只要是当前线程(本质是ThreadLocal实现)下输出的日志,都会自动替换占位符
<!-- %clr是springboot定义的()中的是要显示的字段和值 {faint}也是springboot定义的 -->
%clr([%X{reqId}]){faint}
3.修改格式
1.先将默认的日志格式复制进我们的日志配置文件
复制到logback-spring.xml
2.替换自定义字段
去掉CONSOLE_LOG_PATTERN
!!!注意最后边还有半个 “ } ” 也要去掉
添加新定义的字段
测试:
@Controller
@RequestMapping("/demo")
public class DemoController {
@RequestMapping("/login")
public String login(HttpServletRequest request){
//这里用Session代替ID
MDC.put("reqId",request.getSession().getId());
return "login";
}
4.启动项目
我们可以看到这里多了一个括号 (在 --- 后边)
发送请求--我们可以看到我们终端的Session就被记录下来了
还可以在这个类后边添加 描述 ------使用需要添加@Slf4j 注解
log.info("手动添加日志信息")
到此 我们的日志的自定义和格式替换就修改完毕了 大家可以根据实际需求 去按需打印项目日志了。
附赠:自定义Banner
通过最一开始我们使用空白logback-spring.xml文件覆盖springboot默认日志的时候可以看到 Banner部分与日志部分是独立的,springboot启动后会先打印Banner部分,那么我们自然可以自定义配置Banner 的样式
步骤:
1.在resources下新建Banner.txt文件
2.在banner中设置想要展示的图案——在这个链接中自己挑选
我们还可以Banner中添加一些版本信息 例如springboot的版本等等
Banner图案大全https://www.bootschool.net/ascii-art
___
./ _) O
_.---._|____\__________________,-------.------------==-.____|]
____ / ##-|=======--------===-----==-|-----=|=-------------._______)
(####L-.________________/ /___|__________________________ ______| )-------.
\###| ________________) `--- |---------------------===== ,_____| _____/========"
|##F-' | /\ --- | __mmmmm__________(======|...---''/
|###/ (_\ \ |_______ ' "-L nn [mf] | |
|##| """" \__________________| |
/##/ ) //(( // || _,-/
/##/ / /\\_V_// |,-" (
\#/ ./ / `---" \ \
v /_ / \ `.
/_ `-.___/ \ `.
`-.___/ ". `. -- GO 消灭 bug
". `.
". _,"
".-"
当前springboot版本: ${spring-boot.version}
实现效果:
如果想要更简单的设置Banner,可以参考这个步骤,仅需一步就可以实现自定义Banner
Banner的设置就非常简单了 喜欢的小伙伴抓紧设置起来吧!!!