mewl/gflpsad;bjk[pxdsf’bgmkljxckSystem.out.println()
只输出到控制台,输出没有级别,性能低下log4J
老、性能低下,后代log4j2
其他团队 和 logback
原作者SLF4j
日志的门面,所有的日志框架都去实现接口
学习 logback
性能强大和功能全面
基础模板
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%t] %p %C - %m%n</pattern>
</encoder>
</appender>
<root level="debug">
<appender-ref ref="console" />
</root>
</configuration>
使用 lombok
插件在需要的类添加 @Slf4j
, lombok
会创建全局的一个 log
日志对象
滚动日志,当日志文件过大打开会卡,
日志的输出格式
%d:指定日志输出的日期格式
%t:当前执行日志输出的线程名称
%p:日志的输出级别
%C:输出日志所在的类的完整类名
%m:日志消息
%n:换行符
输出类型
配置 logger 的根,并通过 level 指定输出的日志级别
输出级别从小到大的顺序为 trace(线性)<debug(调试)<info(消息)<warn(警告)<error(异常)
输出级别的控制 例如,如果 level 设置为 info 级别,系统中小于 info 级别的日志就不会被打印出来
trace 线性-占位符(断点)的作用,比如(=======)
debug 调试,比如输出变量信息
info 消息,比如付款成功
warn 警告,遇到了一些报错,但不会导致应用程序崩溃或无法继续工作
error 异常,比如报错
为什么需要日志级别,就像多环境开发一样,为了上线后防止输出对运维没有作用的信息
推荐配置
日志配置
<?xml version="1.0" encoding="UTF-8"?>
<!-- configuration 是配置的根节点
scan 当设置为true时,如果配置文件发生了改变,将会重新加载,默认值为true
scanPeriod 设置扫描的间隔时间,默认值为1分钟
-->
<configuration scan="true" scanPeriod="60 seconds">
<!-- appender 指定日志输出类型,可以是控制台、文件、数据库等
ConsoleAppender 这个类就是用于将日志输出到控制台 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<!-- encoder 设置输出编码以及输出格式 -->
<encoder>
<!-- 日志的输出格式
%d 指定日志输出的日期格式
%t 当前执行日志输出的线程名称
%p 日志的输出级别()
%C 输出日志所在的类的完整类型
%m 日志消息
%n 换行符
-->
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%t] %p %C - %m%n</pattern>
</encoder>
</appender>
<!-- appender 指定日志输出类型,可以是控制台、文件、数据库等
FileAppender 这个类就是用于将日志输出到日志文件 -->
<appender name="file" class="ch.qos.logback.core.FileAppender">
<!-- 日志文件的保存路径和文件名,可以是相对路径也可以是绝对路径-->
<file>ch02/logs/service.log</file>
<!-- append 设置为true 表示日志每次都会追加到文件的末尾,
false 这是先清空原有日志,然后再重新输入,默认值为 true
-->
<append>true</append>
<!-- encoder 设置输出编码以及输出格式 -->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%t] %p %C - %m%n</pattern>
</encoder>
</appender>
<!-- 配置 logger 的根,并通过 level 指定输出的日志级别
输出级别从小到大的顺序为 trace(线性)<debug(调试)<info(消息)<warn(警告)<error(异常)
输出级别的控制 例如,如果 level 设置为 info 级别,系统中小于 info 级别的日志就不会被打印出来
trace 线性-占位符(断点)的作用,比如(=======)
debug 调试,比如输出变量信息
info 消息,比如付款成功
warn 警告,遇到了一些报错,但不会导致应用程序崩溃或无法继续工作
error 异常,比如报错
为什么需要日志级别,就像多环境开发一样,为了上线后防止输出对运维没有作用的信息
-->
<root level="trace">
<!-- 引用上面的输出类型,ref 引用的是 appender 的 name 属性的值
也可以引用多个类型,这样就可以同时输出到不同的目的地
-->
<appender-ref ref="console"/>
<appender-ref ref="file"/>
</root>
</configuration>
滚动日志配置
<?xml version="1.0" encoding="UTF-8"?>
<!-- configuration 是配置的根节点
scan 当设置为true时,如果配置文件发生了改变,将会重新加载,默认值为true
scanPeriod 设置扫描的间隔时间,默认值为1分钟
-->
<configuration scan="true" scanPeriod="60 seconds">
<!-- appender 指定日志输出类型,可以是控制台、文件、数据库等
ConsoleAppender 这个类就是用于将日志输出到控制台 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<!-- encoder 设置输出编码以及输出格式 -->
<encoder>
<!-- 日志的输出格式
%d 指定日志输出的日期格式
%t 当前执行日志输出的线程名称
%p 日志的输出级别()
%C 输出日志所在的类的完整类型
%m 日志消息
%n 换行符
-->
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%t] %p %C - %m%n</pattern>
</encoder>
</appender>
<!-- appender 指定日志输出类型,可以是控制台、文件、数据库等
FileAppender 这个类就是用于将日志输出到日志文件
RollingFileAppender 滚动日志,按照一定规则生成滚动日志,比如按照日期每天产生一个日志文件
-->
<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 配置滚动策略,TimeBasedFileNamingAndTriggeringPolicy 是比较常用的一种滚动日志规则
用于制定日期时间的日志文件
-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 按照日期每天生成一个日志文件 -->
<fileNamePattern>ch03/logs/%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 保存归档日志的最大数量 -->
<maxHistory>30</maxHistory>
</rollingPolicy>
<!-- encoder 设置输出编码以及输出格式 -->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%t] %p %C - %m%n</pattern>
</encoder>
</appender>
<!-- 配置 logger 的根,并通过 level 指定输出的日志级别
输出级别从小到大的顺序为 trace(线性)<debug(调试)<info(消息)<warn(警告)<error(异常)
输出级别的控制 例如,如果 level 设置为 info 级别,系统中小于 info 级别的日志就不会被打印出来
trace 线性-占位符(断点)的作用,比如(=======)
debug 调试,比如输出变量信息
info 消息,比如付款成功
warn 警告,遇到了一些报错,但不会导致应用程序崩溃或无法继续工作
error 异常,比如报错
为什么需要日志级别,就像多环境开发一样,为了上线后防止输出对运维没有作用的信息
-->
<root level="trace">
<!-- 引用上面的输出类型,ref 引用的是 appender 的 name 属性的值
也可以引用多个类型,这样就可以同时输出到不同的目的地
-->
<appender-ref ref="console"/>
<appender-ref ref="file"/>
</root>
</configuration>