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>
以下只针对sql语句输出的配置
ymllogging:
level:
com.ewell.medqc.rec.management.mapper: debug
在模块的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>
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 许可协议。转载请注明出处!