logback 日志框架,可直接赋值进行使用
yml文件中首先进行配置logback文件
logging: config: classpath:logback-spring.xml
配置服务名称(适用于多个服务项目日志进行分装处理)
spring: application: name: ***** # 服务的名称
logback-spring.xml文件
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!-- 彩色日志依赖的渲染类 -->
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
<conversionRule conversionWord="wex"
converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
<conversionRule conversionWord="wEx"
converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
<property resource="application.yml"/>
<!-- 由于logback.xml的加载顺序早于springboot的application.yml (或application.properties)
配置文件读不到application.yml(或application.properties)文件中的值-->
<!-- 需要通过springProperty标签来引用:<springProperty scope="context" name="log.path" source="定义的值"/>这里的name和上面property标签。-->
<springProperty scope="context" name="LOG_HOME" source="spring.application.name"/>
<!-- 日志存放路径 -->
<property name="log.path" value="logs/${LOG_HOME}"/>
<!-- 日志输出格式 -->
<property name="log.pattern"
value="%clr(%d{${yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr([%X{mdcTraceId},%X{mdcTraceNum}]){magenta} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%20.20t]){faint} %clr(%-40.40logger{39}){cyan} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/>
<property name="file.log.pattern"
value="%d{${yyyy-MM-dd HH:mm:ss.SSS}} [%X{mdcTraceId},%X{mdcTraceNum}] ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%15.15t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/>
<!-- <springProperty scope="context" name="logFileName" source="spring.application.name" defaultValue="currentLog"/>-->
<!-- 控制台输出 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${log.pattern}</pattern>
<!-- 记录日志的编码:此处设置字符集 - -->
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 全局日志输出 -->
<appender name="file_application" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/application.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>${log.path}/application/application.%i.log</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>1</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>5MB</maxFileSize>
</triggeringPolicy>
<encoder>
<pattern>${file.log.pattern}</pattern>
<!-- 记录日志的编码:此处设置字符集 - -->
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 系统日志输出 -->
<appender name="file_info" 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/%d{yyyy-MM-dd}-%i.log</fileNamePattern>
<!-- 每个文件最大值 -->
<maxFileSize>10MB</maxFileSize>
<!-- 最多保存30天的日志 -->
<maxHistory>15</maxHistory>
<!-- 最大限制 -->
<totalSizeCap>20GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>${file.log.pattern}</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="file_error" 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/%d{yyyy-MM-dd}-%i.log</fileNamePattern>
<!-- 每个文件最大值 -->
<maxFileSize>10MB</maxFileSize>
<!-- 最多保存30天的日志 -->
<maxHistory>15</maxHistory>
<!-- 最大限制 -->
<totalSizeCap>20GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>${file.log.pattern}</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>
<!-- 系统模块日志级别控制 -->
<logger name="com.org.sys" level="debug"/>
<!-- Spring日志级别控制 -->
<logger name="org.springframework" level="warn"/>
<logger name="com.zaxxer.hikari" level="warn"/>
<logger name="io.lettuce.core" level="warn"/>
<logger name="io.seata.core" level="warn"/>
<logger name="com.netflix.loadbalancer" level="warn"/>
<root level="info">
<appender-ref ref="console"/>
</root>
<!--系统操作日志-->
<root level="info">
<appender-ref ref="file_application"/>
<appender-ref ref="file_info"/>
<appender-ref ref="file_error"/>
</root>
</configuration>