spring boot 默认会加载classpath:logback-spring.xml
如需要自定义文件名称,在application.properties 中配置logging.config 选项即可。
在src/main/resources 下创建 logback-spring.xml 文件,内容如下
根节点<configuration
scan: 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。
scanPeriod: 设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是秒。
当scan为true时,此属性生效。默认的时间间隔为1分钟。
debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。
例如:
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
//一些其他配置
</configuration>
一、logback.xml的配置,输出到控制台的方式
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<property name="LOG_PATH" value="./logs"/>
<!--Appender主要用于指定日志输出的目的地,目的地可以是控制台、文件等-->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!--格式化输出:%d表示日期,%thread表示线程名-->
<!--%-5level:级别从左显示5个字符宽度-->
<!--%logger{35} 表示logger名字最长35个字符,否则按照句点分割-->
<!-- %msg:日志消息-->
<!-- %n是换行符-->
<!--layout负责把事件转换成字符串,格式化的日志信息的输出-->
<layout>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{35} -
%msg %n</pattern>
</layout>
</appender>
<!--根节点设置日志级别,设置使用哪些节点-->
<root level="info">
<appender-ref ref="STDOUT"/>
</root>
</configuration>
然后使用的时候在类上加上注解@Slf4j
@Data
@Slf4j
public class Task2 implements Runnable {
private String id;
@Override
public void run() {
log.info("我是info级别的日志,我的id是:{},可以加多个的{}",this.getId(),"是的");
log.error("哈哈哈,我是错误的日志");
}
}
二、logback,滚动日志输出到文件里的配置方式,滚动记录文件,先将日志记录到指定文件,
当符合某个条件时(日期、日志大小、存储天数),将日志记录到其他文件。
例如:
<appender name="MAXDATEFILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件输出的文件名-->
<fileNamePattern>${LOG_PATH}/logFile.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 日志文件保留天数-->
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{35} -
%msg%n</pattern>
</encoder>
<!--当文件大于10MB时,生成新的日志文件-->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</MaxFileSize>
</triggeringPolicy>
</appender>
三、输出错误日志,过滤,日志级别等于配置级别,过滤器会根据onMath 和 onMismatch接收或拒绝日志。
有以下子节点:
<level>:设置过滤级别
<onMatch>:用于配置符合过滤条件的操作
<onMismatch>:用于配置不符合过滤条件的操作 按照过滤级别分离出不同级别的日志文件
<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${LOG_PATH}/error.%d{yyyy-MM-dd}.log</FileNamePattern>
</rollingPolicy>
<layout>
<pattern>[%date{yyyy-MM-dd HH:mm:ss}] [%-5level] [%logger:%line] --%mdc{client}
%msg%n</pattern>
</layout>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
总结,一般使用的配置的就用这三种类型,控制台输出、滚动日志定期清除多少时间以后的日志、错误日志,配置如下
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<property name="LOG_PATH" value="./logs"/>
<!--Appender主要用于指定日志输出的目的地,目的地可以是控制台、文件等-->
<!--输出到控制台配置-->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!--格式化输出:%d表示日期,%thread表示线程名-->
<!--%-5level:级别从左显示5个字符宽度-->
<!--%logger{35} 表示logger名字最长35个字符,否则按照句点分割-->
<!-- %msg:日志消息-->
<!-- %n是换行符-->
<!--layout负责把事件转换成字符串,格式化的日志信息的输出-->
<layout>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{35} -
%msg %n</pattern>
</layout>
</appender>
<!--滚动输出,存放多少天,多大文件重新输出,输出到文件配置-->
<appender name="MAXDATEFILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件输出的文件名-->
<fileNamePattern>${LOG_PATH}/logFile.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 日志文件保留天数-->
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{35} -
%msg%n</pattern>
</encoder>
<!--当文件大于10MB时,生成新的日志文件-->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</MaxFileSize>
</triggeringPolicy>
</appender>
<!--输出错误日志,存到文件中配置-->
<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${LOG_PATH}/error.%d{yyyy-MM-dd}.log</FileNamePattern>
</rollingPolicy>
<layout>
<pattern>[%date{yyyy-MM-dd HH:mm:ss}] [%-5level] [%logger:%line] --%mdc{client}
%msg%n</pattern>
</layout>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!--根节点设置日志级别,设置使用哪些节点-->
<root level="info">
<appender-ref ref="STDOUT"/>
<appender-ref ref="MAXDATEFILE"/>
<appender-ref ref="ERROR_FILE"/>
</root>
</configuration>