首先我们是需要在Springboot当中去使用Logback,在Springboot当中使用非常的简单,我们只需要将logback.xml配置文件放到项目当中的resources目录下即可,入下图所示: ### ![](https://img.kancloud.cn/54/4b/544b66abf875a46ece448a25599c8951_2530x1386.png) ### 这样就相当于启用了logback日志管理了 ### 接下来我们重点讲解一下logback.xml当中的各种配置信息都是什么意思 ### ``` <?xml version="1.0" encoding="UTF-8"?> <!-- 对xml的一个扫描是否更新 --> <!-- 对xml是否进行扫描scan="true"就表示进行扫描 并且是每60s进行扫描一次 debug=false表示不记录logback本身的日志信息 胡军 --> <configuration scan="true" scanPeriod="60 seconds" debug="false"> <!-- property表示定义全局变量 胡军 --> <!-- 表示定义日志的输出路径 这里我们设置为了/Users/leasure/project-logs目录下 胡军--> <property name="LOG_PATH" value="/Users/leasure/project-logs"/> <!-- 这里我们也可以这么设置日志的存放路径 就会在项目的根目录下创建logs等目录来存放日志文件 胡军 --> <!-- <property name="LOG_PATH" value="${catalina.base}/logs/loggerDemoProject"/>--> <!-- 设置日志的级别 开发环境一般配置debug即可 还有其他的比如info error ... --> <property name="LOG_LEVEL" value="debug"/> <!-- 设置日志保存的时长 这里的30表示的是30天 --> <property name="LOG_MAX_HISTORY" value="30"/> <!-- 设置单个日志保存的大小 --> <property name="LOG_MAX_FILE_SIZE" value="1MB"/> <!-- 设置整体日志保存的大小 如果超过了就会去删除最早的打包好的日志 --> <property name="TOTAL_SIZE_CAP" value="2MB"/> <!-- 日志所打印出来的格式 [DemoProject] 可以理解为项目名称 %d{yyyy-MM-dd HH:mm:ss.SSS}表示日期 [%-10thread]线程名称 %-5level日志的级别 %logger{50}日志长度 %msg%n日志信息和换行符 --> <property name="LOG_PATTERN" value="[DemoProject] %d{yyyy-MM-dd HH:mm:ss.SSS} [%-10thread] %-5level | %logger{50} : %msg%n"/> <!-- appender可以理解为日志输出的一个机制 比如info日志的输出机制 error日志的输出机制 等等 --> <!-- CONSOLE --> <appender name="consoleOutput" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <charset>UTF-8</charset> <pattern>${LOG_PATTERN}</pattern> </encoder> </appender> <!-- DEBUG --> <!-- debugOutput2File表示的是一个自定义的名字 class="ch.qos.logback.core.rolling.RollingFileAppender" 表示以追加的形式记录日志--> <appender name="debugOutput2File" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 表示的是我们记录日志到什么位置 比如选择了用上面定义好的LOG_PATH目录下的debug.log文件里面来记录日志 --> <file>${LOG_PATH}/debug.log</file> <!-- 定义追加策略 --> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!-- 当满足maxHistory 和 maxFileSize 这两个条件的时候 会触发文件打包机制 意思就是将在LOG_PATh目录下创建debug目录并将里面的debug.log文件打包成日志格式的.tar.gz格式的压缩包 --> <fileNamePattern>${LOG_PATH}/debug/debug.log.%d{yyyy-MM-dd}.%i.log.tar.gz</fileNamePattern> <!-- 表示所有的日志只保存的天数 这里我们设置的是30天 --> <maxHistory>${LOG_MAX_HISTORY}</maxHistory> <!-- 单个文件的大小 --> <maxFileSize>${LOG_MAX_FILE_SIZE}</maxFileSize> </rollingPolicy> <encoder> <charset>UTF-8</charset> <!-- 日志输出的格式采用上面我们定义好的LOG_PATTERN的格式 --> <pattern>${LOG_PATTERN}</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <!-- 表示只接收debug模式的日志级别的日志信息 其他的将会被拒绝 --> <level>DEBUG</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!-- 底下的INFO和ERROR的配置和上面DEBUG的配置是一样的 就不再多讲了 --> <!-- INFO --> <appender name="infoOutput2File" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_PATH}/info.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <fileNamePattern>${LOG_PATH}/info/info.log.%d{yyyy-MM-dd}.%i.log.tar.gz</fileNamePattern> <maxHistory>${LOG_MAX_HISTORY}</maxHistory> <maxFileSize>${LOG_MAX_FILE_SIZE}</maxFileSize> <!-- 比debug模式多了这个配置 稍后解释 --> <totalSizeCap>${TOTAL_SIZE_CAP}</totalSizeCap> </rollingPolicy> <encoder> <charset>UTF-8</charset> <pattern>${LOG_PATTERN}</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>INFO</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!-- ERROR --> <appender name="errorOutput2File" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_PATH}/error.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <fileNamePattern>${LOG_PATH}/error/error.log.%d{yyyy-MM-dd}.%i.log.tar.gz</fileNamePattern> <maxHistory>${LOG_MAX_HISTORY}</maxHistory> <maxFileSize>${LOG_MAX_FILE_SIZE}</maxFileSize> <totalSizeCap>${TOTAL_SIZE_CAP}</totalSizeCap> </rollingPolicy> <encoder> <charset>UTF-8</charset> <pattern>${LOG_PATTERN}</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!-- 这里我们设置的日志级别是debug 意味着根Logger会记录所有级别的日志消息, 包括DEBUG、INFO、WARN、ERROR等。如果没有这个配置,根Logger的默认级别可能 是INFO或者其他较高级别,那么低于该级别的日志消息将不会被记录在这个特定的配置中, 由于根Logger的级别被设置为DEBUG,所以所有级别的日志消息都会被记录,并且通过各 个appender进行输出。这样可以更灵活地控制日志输出,根据实际需要记录不同级别的日 志信息。 --> <!-- 如果我设置了level=error 那么info级别的日志就不会被记录到info级别的日志文件当中了吧? 是的,如果你将 <root level="error">,表示根Logger的级别被设置为ERROR,那么只有ERROR级 别的日志消息及以上级别(如ERROR、WARN)才会被记录。INFO级别的日志消息将被忽略,不会被记录到 相应的INFO级别的日志文件中。这样可以控制日志的详细程度,只记录重要的错误信息,减少不必要的日 志输出。 --> <root level="debug"> <appender-ref ref="debugOutput2File"/> <appender-ref ref="infoOutput2File"/> <appender-ref ref="errorOutput2File"/> <appender-ref ref="consoleOutput"/> </root> </configuration> ``` ### 重点还是去看里面的代码的注释信息 ### 讲解的已经非常清晰了 ###