编辑
2023-05-31
实用工具
00
请注意,本文编写于 672 天前,最后修改于 476 天前,其中某些信息可能已经过时。

目录

介绍
可能需要的依赖
application.yml配置
logback.xml
若依logback日志模板

介绍

Java 开源日志框架,以继承改善 log4j 为目的而生,是 log4j 创始人 Ceki Gülcü 的开源产品。 它声称有极佳的性能,占用空间更小,且提供其他日志系统缺失但很有用的特性。 其一大特色是,在 logback-classic 中本地(native)实现了 SLF4J API(也表示依赖 slf4j-api) 🍜

可能需要的依赖

xml
<!--slf4j日志门面--> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.26</version> </dependency> <!--logback日志实现--> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> </dependency>

application.yml配置

以下只针对sql语句输出的配置

yml
logging: level: com.ewell.medqc.rec.management.mapper: debug

logback.xml

在模块的resources目录下创建logback-spring.xml,springboot官方推荐这样命名

xml
<?xml version="1.0" encoding="UTF-8"?> <configuration scan="true"> <include resource="org/springframework/boot/logging/logback/defaults.xml" /> <springProperty scope="context" name="springAppName" source="spring.application.name" /> <!--组件名称--> <property name="COMPONENT_ID" value="medical-record" /> <!--服务名称--> <property name="SEGMENT_ID" value="rec-management" /> <!--日志文件输出路径--> <property name="LOG_HOME" value="./logs/${COMPONENT_ID}/${SEGMENT_ID}" /> <!-- 日志编码 --> <property name="log.charset" value="UTF-8" /> <!-- 日志文件大小,超过这个大小将重新创建,可以根据实际情况调整--> <property name="log.max.size" value="25MB" /> <!-- 文件中的日志输出样式 --> <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> <property name="FILE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n"/> <!-- 控制台的日志输出样式 --> <property name="CONSOLE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n" /> <!-- 控制台输出 --> <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>${CONSOLE_LOG_PATTERN}</pattern> <charset>${log.charset}</charset> </encoder> </appender> <!-- error 文件配置--> <appender name="file-error" class="ch.qos.logback.core.rolling.RollingFileAppender"> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> <file>${LOG_HOME}/${SEGMENT_ID}.error.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <fileNamePattern>${LOG_HOME}/${SEGMENT_ID}.error.log.%d{yyyy-MM-dd}.%i.zip</fileNamePattern> <maxHistory>7</maxHistory> <maxFileSize>${log.max.size}</maxFileSize> <totalSizeCap>2GB</totalSizeCap> </rollingPolicy> <!--输出格式--> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!--格式化输出--> <pattern>${FILE_LOG_PATTERN}</pattern> <!--设置编码--> <charset>${log.charset}</charset> </encoder> </appender> <!-- error 文件配置 结束--> <!-- info 文件配置--> <appender name="file-info" class="ch.qos.logback.core.rolling.RollingFileAppender"> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>INFO</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> <file>${LOG_HOME}/${SEGMENT_ID}.info.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <fileNamePattern>${LOG_HOME}/${SEGMENT_ID}.info.log.%d{yyyy-MM-dd}.%i.zip</fileNamePattern> <maxHistory>7</maxHistory> <maxFileSize>${log.max.size}</maxFileSize> <totalSizeCap>2GB</totalSizeCap> </rollingPolicy> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>${FILE_LOG_PATTERN}</pattern> <charset>${log.charset}</charset> </encoder> </appender> <!-- info 文件配置 结束--> <!-- sql输出日志--> <appender name="sql_file" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_HOME}/${SEGMENT_ID}.sql.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!--日志文件输出的文件名--> <FileNamePattern>${LOG_HOME}/${SEGMENT_ID}.sql.log.%d{yyyy-MM-dd}.%i.zip</FileNamePattern> <!--日志文件保留天数--> <maxHistory>7</maxHistory> <!--日志文件最大的大小--> <maxFileSize>${log.max.size}</maxFileSize> <totalSizeCap>2GB</totalSizeCap> </rollingPolicy> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!-- 格式化输出: %d: 日期; %-5level: 级别从左显示5个字符宽度; %thread: 线程名; %logger: 类名; %M: 方法名; %line: 行号; %msg: 日志消息; %n: 换行符 --> <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] [%thread] [%logger{50}] [%M] [%line] - %msg%n</pattern> <charset>${log.charset}</charset> </encoder> </appender> <!-- myibatis log configure; nmae为maper文件对应的包路径,additivity代表是否把当前日志信息向上 传递(<root>是它的上级),默认是true;这里设置为false,就不会把日志信息 向root传入;level设置的级别为DEBUG,mabatis的日志级别默认为DEBUG级别; --> <logger name="com.ewell.medqc.rec.management.mapper" level="DEBUG" additivity="false"> <appender-ref ref="sql_file"/> </logger> <!-- sql输出日志结束--> <!-- TRACE < DEBUG < INFO < WARN < ERROR < FATAL --> <root level="INFO"> <appender-ref ref="console"/> <appender-ref ref="file-error"/> <appender-ref ref="file-info"/> <appender-ref ref="sql_file"/> </root> </configuration>

若依logback日志模板

spring-boot-starter中默认就有logback日志框架

yml
# 日志配置 logging: level: com.ruoyi: debug org.springframework: warn
xml
<?xml version="1.0" encoding="UTF-8"?> <configuration scan="true"> <include resource="org/springframework/boot/logging/logback/defaults.xml" /> <springProperty scope="context" name="springAppName" source="spring.application.name" /> <!--组件名称--> <property name="COMPONENT_ID" value="medical-record" /> <!--服务名称--> <property name="SEGMENT_ID" value="rec-management" /> <!--日志文件输出路径--> <property name="LOG_HOME" value="./logs/${COMPONENT_ID}/${SEGMENT_ID}" /> <!-- 日志编码 --> <property name="log.charset" value="UTF-8" /> <!-- 日志文件大小,超过这个大小将重新创建,可以根据实际情况调整--> <property name="log.max.size" value="25MB" /> <!-- 文件中的日志输出样式 --> <property name="FILE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss} [%p][%c][%M]-> %m%n"/> <!-- 控制台的日志输出样式 --> <property name="CONSOLE_LOG_PATTERN" value="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}" /> <!-- 控制台输出 --> <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>DEBUG</level> </filter> <encoder> <pattern>${CONSOLE_LOG_PATTERN}</pattern> <charset>${log.charset}</charset> </encoder> </appender> <!-- error 文件配置--> <appender name="file-error" class="ch.qos.logback.core.rolling.RollingFileAppender"> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> <file>${LOG_HOME}/${SEGMENT_ID}.error.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <fileNamePattern>${LOG_HOME}/${SEGMENT_ID}.error.log.%d{yyyy-MM-dd}.%i.zip</fileNamePattern> <maxHistory>7</maxHistory> <maxFileSize>${log.max.size}</maxFileSize> <totalSizeCap>2GB</totalSizeCap> </rollingPolicy> <encoder> <pattern>${FILE_LOG_PATTERN}</pattern> <charset>${log.charset}</charset> </encoder> </appender> <!-- error 文件配置 结束--> <!-- info 文件配置--> <appender name="file-info" class="ch.qos.logback.core.rolling.RollingFileAppender"> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>INFO</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> <file>${LOG_HOME}/${SEGMENT_ID}.info.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <fileNamePattern>${LOG_HOME}/${SEGMENT_ID}.info.log.%d{yyyy-MM-dd}.%i.zip</fileNamePattern> <maxHistory>7</maxHistory> <maxFileSize>${log.max.size}</maxFileSize> <totalSizeCap>2GB</totalSizeCap> </rollingPolicy> <encoder> <pattern>${FILE_LOG_PATTERN}</pattern> <charset>${log.charset}</charset> </encoder> </appender> <!-- info 文件配置 结束--> <!-- TRACE < DEBUG < INFO < WARN < ERROR < FATAL --> <root level="INFO"> <appender-ref ref="console"/> <appender-ref ref="file-error"/> <appender-ref ref="file-info"/> </root> </configuration>

本文作者:Weee

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!