springboot日志管理 及 集成Apollo踩过的坑
背景
今天计划给项目做Apollo集成,在这就不详细阐述Apollo是做什么的,有兴趣的道友可以百度了解一下。
过程中遇到一个问题:我集成Apollo后项目启动没有任何的日志输出,而且项目没有任何的报错。让我很蒙圈,于是乎有了这篇小分享。直接上干货~
springboot日志集成
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 彩色日志 -->
<!-- 彩色日志依赖的渲染类 -->
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
<conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
<!-- 彩色日志格式 -->
<property name="console_log_pattern" value="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%5p) %clr(${PID:- }) [%t]{magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n%wex"/>
<property name="file_log_pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %5p ${PID:- } --- [%t] %-40.40logger{39} : %m%n%wex"/>
<property resource="application.yml" />
<springProfile scope="context" name="appName" source="system.appName" />
<springProfile scope="context" name="loggingRoot" source="system.loggingRoot"/>
<!--日志输出 固定到C盘或则根据项目不熟路径输出 可自由调配-->
<!--<property name="logPath" value="${loggingRoot}/${appName}" />-->
<property name="logPath" value="C://Project Logs/${appName}" />
<!--日志文件最大容量-->
<property name="logFileMaxSize" value="50MB" />
<!--日志文件最大保留天数-->
<property name="logFileMaxHistory" value="30" />
<!--多环境的日志输出-->
<!--根据不同环境(prod:生产环境,test:测试环境,dev:开发环境)来定义不同的日志输出,-->
<!--在 logback-spring.xml中使用 springProfile 节点来定义,方法如下:-->
<springProfile name="dev,test,prod,default">
<!--开发环境下不将日志记录进文件-->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!--encoder 默认配置为PatternLayoutEncoder-->
<encoder>
<pattern>${console_log_pattern}</pattern>
<charset>utf-8</charset>
</encoder>
</appender>
<!--WARN 级别的日志-->
<appender name="warn" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>WARN</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<encoder>
<pattern>${file_log_pattern}</pattern>
<charset>UTF-8</charset>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${logPath}/warn/%d{yyyy-MM-dd}.log</fileNamePattern>
<MaxHistory>${logFileMaxHistory}</MaxHistory>
</rollingPolicy>
<!--日志文件最大的大小-->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>${logFileMaxSize}</MaxFileSize>
</triggeringPolicy>
</appender>
<!--ERROR 级别的日志-->
<appender name="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>
<encoder>
<pattern>${file_log_pattern}</pattern>
<charset>UTF-8</charset>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${logPath}/error/%d{yyyy-MM-dd}.log</fileNamePattern>
<MaxHistory>${logFileMaxHistory}</MaxHistory>
</rollingPolicy>
<!--日志文件最大的大小-->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>${logFileMaxSize}</MaxFileSize>
</triggeringPolicy>
</appender>
<!-- 需要修改包名 -->
<logger name="com.XX" level="error" additivity="false">
<appender-ref ref="STDOUT"/>
<appender-ref ref="warn"/>
<appender-ref ref="error"/>
</logger>
<!-- 日志输出级别 -->
<root level="info">
<appender-ref ref="STDOUT"/>
<appender-ref ref="warn"/>
<appender-ref ref="error"/>
</root>
</springProfile>
</configuration>
当然这样是可以在集成Apollo后日志输出的文件,开始集成的时候是这样的:
让我百思不得其解,找了好一会儿解决了问题:
解决方案
切记加入default,默认springProfile,这样就可以顺利的日志输出~
嗷呜,打完收工~