springboot日志文件配置
一、日志文件创建
创建 日志文件logback-spring.xml,官方推荐 -spring.xml结尾 默认加载加载配置顺序 logback-spring.xml, logback-spring.groovy, logback.xml, or logback.groovy。 注意是logback-spring.xml文件而不是logback.xml文件,因为logback.xml文件早于application.yml加载,logback-spring.xml文件晚于application.yml文件加载。
#===========logback示例===========
# 设置##
log4j:
rootLogger: debug,stdout,D,E
appender:
stdout:
Target: System.out
layout: org.apache.log4j.PatternLayout
ConversionPattern: [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
# 输出DEBUG 级别以上的日志到=D://logs/error.log ##
D: org.apache.log4j.DailyRollingFileAppender
File: D://logs/log.log
Append: true
Threshold: DEBUG
layout: org.apache.log4j.PatternLayout
layout.ConversionPattern: %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
# 输出ERROR 级别以上的日志到=D://logs/error.log ##
E: org.apache.log4j.DailyRollingFileAppender
File: E://logs/error.log
Append: true
Threshold: ERROR
layout: org.apache.log4j.PatternLayout
ConversionPattern: %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
#===========logback============
#使用最简单的配置进行日期分类
logging:
path: ${user.home}/log/%d{yyyyMMdd} #日志文件路径 这里${user.home}为当前服务器用户主目录
file: ${spring.application.name}.log #日志文件名称 ${spring.application.name}为应用名
level:
root: info #日志级别 root表示所有包,也可以单独配置具体包 fatal error warn info debug trace off注释:
<configuration> 子节点
<appender></appender>
<logger></logger>
<root></root>(要加在最后)三、日志配置文件转换
Log4j日志转换为logback在线工具(支持log4j.properties转换为logback.xml,不支持 log4j.xml转换为logback.xml) https://logback.qos.ch/translator/
四、logback的xml文件配置
对日志进行日期划分等等
<?xml version="1.0" encoding="UTF-8"?>
<!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 -->
<!-- scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true -->
<!-- scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
<!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
<configuration scan="true" scanPeriod="10 seconds">
<contextName>logback</contextName>
<!--默认配置-->
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<!--配置控制台(Console)-->
<include resource="org/springframework/boot/logging/logback/console-appender.xml"/>
<!-- 获取应用名称 -->
<springProperty scope="context" name="APP_NAME" source="spring.application.name" defaultValue="default"/>
<!-- 从spring配置文件获取值 -->
<springProperty scope="context" name="LOG_HOME" source="logging.file.path" defaultValue="/tmp/log"/>
<!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。 -->
<property name="logPath" value="${LOG_HOME}/${APP_NAME}"/>
<!-- 文件日志样式 -->
<property name="FILE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{60} - %msg%n"/>
<!--文件输出,日志时间窗口滚动-->
<appender name="DATE_File" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--日志名,指定最新的文件名,其他文件名使用FileNamePattern -->
<File>${logPath}/out.log</File>
<!-- 按天生成-->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--日志文件输出的文件名,可设置文件类型为gz,开启文件压缩-->
<!-- 按天生成-->
<FileNamePattern>${logPath}/date-%d{yyyy-MM-dd}-%i.log</FileNamePattern>
<!--日志文件保留天数-->
<MaxHistory>30</MaxHistory>
<maxFileSize>500MB</maxFileSize>
</rollingPolicy>
<!-- 按小时生成-->
<!-- <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">-->
<!-- <!–日志文件输出的文件名,可设置文件类型为gz,开启文件压缩–>-->
<!-- <!– 按小时生成–>-->
<!-- <FileNamePattern>${logPath}/%d{yyyy-MM-dd.HH}-%i.log</FileNamePattern>-->
<!-- <!–日志文件保留小时数–>-->
<!-- <MaxHistory>72</MaxHistory>-->
<!-- <!–按大小分割同一天的–>-->
<!-- <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">-->
<!-- <maxFileSize>200MB</maxFileSize>-->
<!-- </timeBasedFileNamingAndTriggeringPolicy>-->
<!-- </rollingPolicy>-->
<!--输出格式-->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>${FILE_LOG_PATTERN}</pattern>
<!--设置编码-->
<charset>UTF-8</charset>
</encoder>
</appender>
<root level="info">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="DATE_File"/>
</root>
</configuration>new
<?xml version="1.0" encoding="UTF-8"?>
<!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 -->
<!-- scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true -->
<!-- scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
<!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
<configuration scan="true" scanPeriod="10 seconds">
<!--<include resource="org/springframework/boot/logging/logback/base.xml" />-->
<contextName>logback</contextName>
<!-- <!–默认配置–>-->
<!-- <include resource="org/springframework/boot/logging/logback/defaults.xml"/>-->
<!-- <!–配置控制台(Console)–>-->
<!-- <include resource="org/springframework/boot/logging/logback/console-appender.xml"/>-->
<!-- 彩色日志 -->
<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 name="CONSOLE_LOG_PATTERN"
value="${CONSOLE_LOG_PATTERN:-%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr([%15.15t]){faint} [%X{requestId}] %clr(%-40.40logger{39}){cyan} [%L] %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
<!-- 文件日志样式 -->
<property name="FILE_LOG_PATTERN"
value="${FILE_LOG_PATTERN:-%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} [%t] [%X{requestId}] %-40.40logger{39} %L : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
<!-- 获取应用名称 -->
<springProperty scope="context" name="APP_NAME" source="spring.application.name" defaultValue="default"/>
<!-- 从spring配置文件获取值 -->
<springProperty scope="context" name="LOG_HOME" source="logging.file.path" defaultValue="/tmp/log"/>
<!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。 -->
<property name="logPath" value="logs"/>
<!-- 控制台 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
</encoder>
</appender>
<!--文件输出,日志时间窗口滚动-->
<appender name="DATE_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--日志名,指定最新的文件名,其他文件名使用FileNamePattern -->
<File>${logPath}/info-out.log</File>
<!-- 按天生成-->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--日志文件输出的文件名,可设置文件类型为gz,开启文件压缩-->
<!-- 按天生成-->
<FileNamePattern>${logPath}/info-date-%d{yyyy-MM-dd}-%i.log</FileNamePattern>
<!--日志文件保留天数-->
<MaxHistory>30</MaxHistory>
<maxFileSize>500MB</maxFileSize>
</rollingPolicy>
<!--输出格式-->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>${FILE_LOG_PATTERN}</pattern>
<!--设置编码-->
<charset>UTF-8</charset>
</encoder>
</appender>
<!--文件输出,日志时间窗口滚动-->
<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--日志名,指定最新的文件名,其他文件名使用FileNamePattern -->
<File>${logPath}/error-out.log</File>
<!-- 按天生成-->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--日志文件输出的文件名,可设置文件类型为gz,开启文件压缩-->
<!-- 按天生成-->
<FileNamePattern>${logPath}/error-date-%d{yyyy-MM-dd}-%i.log</FileNamePattern>
<!--日志文件保留天数-->
<MaxHistory>30</MaxHistory>
<maxFileSize>500MB</maxFileSize>
</rollingPolicy>
<!--输出格式-->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<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>
<!-- 异步写日志 -->
<appender name="ASYNC_DATE_FILE" class="ch.qos.logback.classic.AsyncAppender">
<discardingThreshold>0</discardingThreshold>
<queueSize>1024</queueSize>
<appender-ref ref="DATE_FILE"/>
</appender>
<appender name="ASYNC_ERROR_FILE" class="ch.qos.logback.classic.AsyncAppender">
<discardingThreshold>0</discardingThreshold>
<queueSize>1024</queueSize>
<appender-ref ref="ERROR_FILE"/>
</appender>
<root level="info">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="ASYNC_DATE_FILE"/>
<appender-ref ref="ASYNC_ERROR_FILE"/>
</root>
</configuration>