SpringBoot+logback默认日志的配置和使用
记录一下SpringBoot2.0.x使用默认logback日志的配置和常见使用
SpringBoot的默认日志是logback,在SpringBoot2.0.x版本中使用logback很方便而且内存开销小,速度快,还不需要去单独的配置maven的jar包,因为已经集成整合了的。
作为专门写代码来应用的,不需要知道logback到底怎么实现的,什么底层,什么抽象层,反正用SpringBoot默认的就对了,有特殊要求使用其他的 ,查找博客就能解决导包这些问题。
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.5.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent>
从这里点进去
<!--web模块的启动器 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
可以看到这个starter 继续点进去查看
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <version>2.0.5.RELEASE</version> <scope>compile</scope> </dependency>
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> <version>2.0.5.RELEASE</version> <scope>compile</scope> </dependency>
配置文件的位置
在项目的/src/main/resources目录下,新建logback的默认日志配置文件logback-spring.xml(配置默认就能生效)
注意:当然也可以直接logback.xml直接测试也是能生效的
如果说我不喜欢他的默认文件名 我非要自定义呢?
自定义配置文件名 myw-logback-test.xml
单独加一个配置在application.properties
#配置文件 logging.config=classpath:myw-logback-test.xml
配置文件内容
logback的配置文件内容 这个还真的逐字逐句的了解其真意,这对使用来说特别有用的,最常用的文件类型格式如下
<?xml version="1.0" encoding="UTF-8"?> <configuration scan="true" scanPeriod="60 seconds" debug="false"> <!--不设置的话默认名称是default,contextName标签能设置成其他名称,用于区分不同程序应用--> <contextName>spring-boot-logging-myw</contextName> <!--配置日志文件的输出路径--> <property name="log.path" value="myw-log/" /> <!--输出到控制台或者文件--> <appender name="xxxxxx" class="ch.qos.logback.core.xxxxxxxxx"> <!--内容--> </appender> <!-- 用来设置某一个包或者具体的某一个类的日志打印 --> <logger level="xxxx" name="xxxxx"> <!--内容--> </logger> <!--指定基础控制台的日志输出级别,level属性指定级别 必须配置的--> <root level="xxx"> <!--内容--> </root> </configuration>
configuration标签
- scan=“true” scan属性默认就是true 意思是说配置文件发生改变后,将会重新加载,默认值为true 实际使用默认就可以。
- scanPeriod=“60 seconds” 这个是设置检测配置文件是否修改的时间间隔,时间单位默认是毫秒,默认1分钟,但是给了秒的单位后就是秒,一般大家都是是60 seconds这样配置。
- debug=“false” 这个属性默认是false 如果需要查看logback内部日志,可以设置为true时,这样可以实时查看logback运行状态数据,实际上没用过也没测试过 不关心这个点儿。
contextName标签
这个标签默认名字是default 如果需要可以改成其他名字,一般没用
<!--不设置的话默认名称是default,contextName标签能设置成其他名称,用于区分不同程序应用--> <contextName>spring-boot-logging-myw</contextName>
在idea的控制台会显示设置的名称
但是在log日志文件里没有这个属性值
property标签
用法是在当前根目录下创建日志文件夹
<!-- 当前根目录下创建路径 --> <property name="log.path" value="myw-log/" />
也可以使用绝对路径 在linux中用绝对路径反而更美,一般放在linux的data目录下面,这样不管是直接启动还是使用脚本启动还是服务方式开机启动 都在data下面 当然也可以用相对路径 但是在加了开机启动service方式可能日志路径在/根目录下面。
<property name="log.path" value="/data/myw-log/" />
在项目中运行的话这个日志文件在
appender标签
<!--输出到文件--> <appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 正在记录的日志文件的路径及文件名 --> <file>${log.path}/log_info.log</file> <!--日志输出格式 --> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> <charset>UTF-8</charset> <!-- 此处设置字符集 --> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log.path}/sys_log-info-%d{yyyy-MM-dd}-%i.log</fileNamePattern> <!-- 除按日志记录之外,还配置了日志文件不能超过50M,若超过50M,日志文件会以索引0开始, 命名日志文件,例如xxx-2023-07-16.0.log --> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>50MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <!-- 日志保存周期 天数--> <maxHistory>30</maxHistory> </rollingPolicy> <!-- 级别过滤 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>INFO</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender>
appender标签的name和class name可以根据需要定义 class就给ch.qos.logback.core.rolling.RollingFileAppender搞定,滚动记录文件,目的是当符合某个条件时,将日志记录到特殊的日志文件,其他方式也有,具体调整具体配置,写入文件用这个就够了,无需多学。
file标签用来定义文件名字,encoder标签用来定义日志记录格式和编码的,没啥好说的。
rollingPolicy标签,用来移动和重命名日志文件的,使用class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"就可以了,里面的标签有配置日志保存天数 日志文件大小等,也都直接用,要对日志的配置研究深入再说吧。
filter标签,class属性有临界值过滤和级别过滤
class=“ch.qos.logback.classic.filter.LevelFilter”
根据日志级别进行过滤,如果日志级别等于配置级别,过滤器会根据onMath(用于配置符合过滤条件的操作) 和 onMismatch(用于配置不符合过滤条件的操作)接收或拒绝日志,一般用这种。
<!-- 级别过滤 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>INFO</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter>
class=“ch.qos.logback.classic.filter.ThresholdFilter”
过滤掉低于指定临界值的日志,当日志级别等于或高于临界值时,过滤器返回NEUTRAL;当日志级别低于临界值时,日志会被拒绝。
<!-- 级别过滤 --> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>INFO</level> </filter>
- DENY:日志将立即被抛弃不再经过其他过滤器。
- NEUTRAL:有序列表里的下个过滤器过接着处理日志。
- ACCEPT:日志会被立即处理,不再经过剩余过滤器。
日志级别
日志级别从低到高分为 TRACE < DEBUG < INFO < WARN < ERROR < FATAL
TRACE 和 FATAL 忽略 那么只关心日志级别 DEBUG < INFO < WARN < ERROR
那么我需要把debug info warn error分开写入不同的文件的配置
<!--输出到文件--> <appender name="file_debug" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 正在记录的日志文件的路径及文件名 --> <file>${log.path}/log_debug.log</file> <!--日志输出格式 --> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> <charset>UTF-8</charset> <!-- 此处设置字符集 --> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log.path}/sys_log-debug-%d{yyyy-MM-dd}-%i.log</fileNamePattern> <!-- 除按日志记录之外,还配置了日志文件不能超过50M,若超过50M,日志文件会以索引0开始, 命名日志文件,例如xxx-2023-07-16.0.log --> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>50MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <!-- 日志保存周期 天数--> <maxHistory>30</maxHistory> </rollingPolicy> <!-- 级别过滤 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>DEBUG</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!--输出到文件--> <appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 正在记录的日志文件的路径及文件名 --> <file>${log.path}/log_error.log</file> <!--日志输出格式 --> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> <charset>UTF-8</charset> <!-- 此处设置字符集 --> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log.path}/sys_log-error-%d{yyyy-MM-dd}-%i.log</fileNamePattern> <!-- 除按日志记录之外,还配置了日志文件不能超过50M,若超过50M,日志文件会以索引0开始, 命名日志文件,例如xxx-2023-07-16.0.log --> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>50MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <!-- 日志保存周期 天数--> <maxHistory>30</maxHistory> </rollingPolicy> <!-- 级别过滤 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!--输出到文件--> <appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 正在记录的日志文件的路径及文件名 --> <file>${log.path}/log_info.log</file> <!--日志输出格式 --> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> <charset>UTF-8</charset> <!-- 此处设置字符集 --> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log.path}/sys_log-info-%d{yyyy-MM-dd}-%i.log</fileNamePattern> <!-- 除按日志记录之外,还配置了日志文件不能超过50M,若超过50M,日志文件会以索引0开始, 命名日志文件,例如xxx-2023-07-16.0.log --> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>50MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <!-- 日志保存周期 天数--> <maxHistory>30</maxHistory> </rollingPolicy> <!-- 级别过滤 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>INFO</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!--输出到文件--> <appender name="file_warn" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 正在记录的日志文件的路径及文件名 --> <file>${log.path}/log_warn.log</file> <!--日志输出格式 --> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> <charset>UTF-8</charset> <!-- 此处设置字符集 --> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log.path}/sys_log-warn-%d{yyyy-MM-dd}-%i.log</fileNamePattern> <!-- 除按日志记录之外,还配置了日志文件不能超过50M,若超过50M,日志文件会以索引0开始, 命名日志文件,例如xxx-2023-07-16.0.log --> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>50MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <!-- 日志保存周期 天数--> <maxHistory>30</maxHistory> </rollingPolicy> <!-- 级别过滤 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>WARN</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender>
我们在开发的时候 控制台也是需要打印日志的,因此需要配置
<!--输出到控制台--> <appender name="console_debug" class="ch.qos.logback.core.ConsoleAppender"> <!--日志输出格式 --> <encoder> <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern> <charset>UTF-8</charset> <!-- 此处设置字符集 --> </encoder> <!-- 级别过滤 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>DEBUG</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!--输出到控制台--> <appender name="console_info" class="ch.qos.logback.core.ConsoleAppender"> <!--日志输出格式 --> <encoder> <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern> <charset>UTF-8</charset> <!-- 此处设置字符集 --> </encoder> <!-- 级别过滤 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>INFO</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!--输出到控制台--> <appender name="console_warn" class="ch.qos.logback.core.ConsoleAppender"> <!--日志输出格式 --> <encoder> <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern> <charset>UTF-8</charset> <!-- 此处设置字符集 --> </encoder> <!-- 级别过滤 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>WARN</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!--输出到控制台--> <appender name="console_error" class="ch.qos.logback.core.ConsoleAppender"> <!--日志输出格式 --> <encoder> <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern> <charset>UTF-8</charset> <!-- 此处设置字符集 --> </encoder> <!-- 级别过滤 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender>
root标签
用来指定控制台的输出级别和记录日志的级别,一般使用info级别
<root level="debug"> <appender-ref ref="file_debug" /> <appender-ref ref="file_info" /> <appender-ref ref="file_warn" /> <appender-ref ref="file_error" /> <appender-ref ref="console_debug" /> <appender-ref ref="console_info" /> <appender-ref ref="console_warn" /> <appender-ref ref="console_error" /> </root>
写一个控制层LogBackController
package boot.example.logback.controller; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping(value="/logback") public class LogBackController { private final Logger log = LoggerFactory.getLogger(this.getClass()); @RequestMapping(value="/hello") public String hello() { System.out.println("System.out.println 打印"); log.info("log info 日志"); log.error("log error 日志"); log.warn("log warn 日志"); log.debug("log debug 日志"); return "hello world"; } }
root标签的level属性设置debug
启动的时候控制台会显示很多信息,然后访问接口可以看到四种级别的日志都有,甚至还有调试日志
在查看file文件的日志
root标签的level属性设置info
设置info后可以看到debug日志没有了,相对来说好的多了 info也是推荐的设置,因为他能显示info warn和error的日志数据
控制台 -已经没有了debug的数据
文件的日志
root标签的level属性设置warn
控制台 只有error和warn 至于上面的debug是main的 无需关心
文件日志
至于error 不测试了
完整的logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?> <configuration scan="true" scanPeriod="60 seconds" debug="false"> <!--不设置的话默认名称是default,contextName标签能设置成其他名称,用于区分不同程序应用--> <contextName>spring-boot-logging-myw</contextName> <!-- 当前根目录下创建路径 --> <property name="log.path" value="myw-log/" /> <!--输出到控制台--> <appender name="console_debug" class="ch.qos.logback.core.ConsoleAppender"> <!--日志输出格式 --> <encoder> <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern> <charset>UTF-8</charset> <!-- 此处设置字符集 --> </encoder> <!-- 级别过滤 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>DEBUG</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!--输出到控制台--> <appender name="console_info" class="ch.qos.logback.core.ConsoleAppender"> <!--日志输出格式 --> <encoder> <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern> <charset>UTF-8</charset> <!-- 此处设置字符集 --> </encoder> <!-- 级别过滤 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>INFO</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!--输出到控制台--> <appender name="console_warn" class="ch.qos.logback.core.ConsoleAppender"> <!--日志输出格式 --> <encoder> <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern> <charset>UTF-8</charset> <!-- 此处设置字符集 --> </encoder> <!-- 级别过滤 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>WARN</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!--输出到控制台--> <appender name="console_error" class="ch.qos.logback.core.ConsoleAppender"> <!--日志输出格式 --> <encoder> <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern> <charset>UTF-8</charset> <!-- 此处设置字符集 --> </encoder> <!-- 级别过滤 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!--输出到文件--> <appender name="file_debug" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 正在记录的日志文件的路径及文件名 --> <file>${log.path}/log_debug.log</file> <!--日志输出格式 --> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> <charset>UTF-8</charset> <!-- 此处设置字符集 --> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log.path}/sys_log-debug-%d{yyyy-MM-dd}-%i.log</fileNamePattern> <!-- 除按日志记录之外,还配置了日志文件不能超过50M,若超过50M,日志文件会以索引0开始, 命名日志文件,例如xxx-2023-07-16.0.log --> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>50MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <!-- 日志保存周期 天数--> <maxHistory>30</maxHistory> </rollingPolicy> <!-- 级别过滤 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>DEBUG</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!--输出到文件--> <appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 正在记录的日志文件的路径及文件名 --> <file>${log.path}/log_info.log</file> <!--日志输出格式 --> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> <charset>UTF-8</charset> <!-- 此处设置字符集 --> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log.path}/sys_log-info-%d{yyyy-MM-dd}-%i.log</fileNamePattern> <!-- 除按日志记录之外,还配置了日志文件不能超过50M,若超过50M,日志文件会以索引0开始, 命名日志文件,例如xxx-2023-07-16.0.log --> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>50MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <!-- 日志保存周期 天数--> <maxHistory>30</maxHistory> </rollingPolicy> <!-- 级别过滤 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>INFO</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!--输出到文件--> <appender name="file_warn" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 正在记录的日志文件的路径及文件名 --> <file>${log.path}/log_warn.log</file> <!--日志输出格式 --> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> <charset>UTF-8</charset> <!-- 此处设置字符集 --> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log.path}/sys_log-warn-%d{yyyy-MM-dd}-%i.log</fileNamePattern> <!-- 除按日志记录之外,还配置了日志文件不能超过50M,若超过50M,日志文件会以索引0开始, 命名日志文件,例如xxx-2023-07-16.0.log --> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>50MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <!-- 日志保存周期 天数--> <maxHistory>30</maxHistory> </rollingPolicy> <!-- 级别过滤 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>WARN</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!--输出到文件--> <appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 正在记录的日志文件的路径及文件名 --> <file>${log.path}/log_error.log</file> <!--日志输出格式 --> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> <charset>UTF-8</charset> <!-- 此处设置字符集 --> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log.path}/sys_log-error-%d{yyyy-MM-dd}-%i.log</fileNamePattern> <!-- 除按日志记录之外,还配置了日志文件不能超过50M,若超过50M,日志文件会以索引0开始, 命名日志文件,例如xxx-2023-07-16.0.log --> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>50MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <!-- 日志保存周期 天数--> <maxHistory>30</maxHistory> </rollingPolicy> <!-- 级别过滤 --> <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="file_debug" /> <appender-ref ref="file_info" /> <appender-ref ref="file_warn" /> <appender-ref ref="file_error" /> <appender-ref ref="console_debug" /> <appender-ref ref="console_info" /> <appender-ref ref="console_warn" /> <appender-ref ref="console_error" /> </root> </configuration>
在java中最简单的使用
private final Logger log = LoggerFactory.getLogger(this.getClass());
在静态类里面
package boot.example.logback.controller; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class StaticUtils { public static final Logger log = LoggerFactory.getLogger(StaticUtils.class); public static void testLog(){ log.info("log info"); } }
还可以借助lombok
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>RELEASE</version> <scope>compile</scope> </dependency>
package boot.example.logback.controller; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @Slf4j @RestController @RequestMapping(value="/logback") public class LogBackController2 { @RequestMapping(value="/hello2") public String hello() { System.out.println("System.out.println2 打印"); log.info("log info2 日志"); log.error("log error2 日志"); log.warn("log warn2 日志"); log.debug("log debug2 日志"); StaticUtils2.testLog(); return "hello world"; } }
package boot.example.logback.controller; import lombok.extern.slf4j.Slf4j; @Slf4j public class StaticUtils2 { public static void testLog(){ log.info("log info"); } }
至于logback里的其他标签 不是真正的刚需就不需要去花时间记录了。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。