架构师

您现在的位置是:首页 > 技术博客 > 微服务

微服务

Spring Boot日志框架

架构师小跟班 2019-09-02微服务
Spring Boot支持Java Util Logging,Log4j2,Lockback作为日志框架,如果你使用starters启动器,Spring Boot将使用Logback作为默认日志框架。无论使用哪种日志框架,Spring Boot都

Spring Boot支持Java Util Logging,Log4j2,Lockback作为日志框架,如果你使用starters启动器,Spring Boot将使用Logback作为默认日志框架。无论使用哪种日志框架,Spring Boot都支持配置将日志输出到控制台或者文件中。

spring-boot-starter启动器包含spring-boot-starter-logging启动器并集成了slf4j日志抽象及Logback日志框架。

自定义日志文件

根据不同的日志框架,默认加载的日志配置文件的文件名,放在资源根目录下,其他的目录及文件名不能被加载。

Logback:

logback-spring.xml, logback-spring.groovy, logback.xml or logback.groovy

Log4j2:

log4j2-spring.xml or log4j2.xml

JDK (Java Util Logging) :

logging.properties

既然默认自带了Logback框架,Logback也是最优秀的日志框架,往资源目录下创建一个logback-spring.xml即可,下面是一个参考配置文件。

<?xml version="1.0" encoding="UTF-8"?>
<configuration  scan="true" scanPeriod="60 seconds" debug="false">
    <contextName>logback</contextName>
    <!--输出到控制台-->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>
    <!--按天生成日志-->
    <appender name="logFile"  class="ch.qos.logback.core.rolling.RollingFileAppender">
        <Prudent>true</Prudent>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>
                applog/%d{yyyy-MM-dd}/%d{yyyy-MM-dd}.log
            </FileNamePattern>
        </rollingPolicy>
        <layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>
                %d{yyyy-MM-dd HH:mm:ss} -%msg%n
            </Pattern>
        </layout>
    </appender>
    <logger name="com.bootdo" additivity="false">
        <appender-ref ref="console"/>
        <appender-ref ref="logFile" />
    </logger>
    <root level="error">
        <appender-ref ref="console"/>
        <appender-ref ref="logFile" />
    </root>
</configuration>

强烈推荐使用logback-spring.xml作为文件名,因为logback.xml加载太早。

日志初始化在ApplicationContext创建之前,所以@PropertySources加载的配置是读取不到的,系统环境变量、Spring Environment及application,bootstrap配置文件中的信息可以读取到。

读取系统环境属性:

<property name="LOG_PATH" value="${LOG_PATH:-E:/logs}" />

读取当前应用Environment中的属性:

<springProperty scope="context" name="fluentHost" source="myapp.fluentd.host"   defaultValue="localhost"/>

Spring Boot也支持通过springProfile来加载不同profiles下的配置。

<springProfile name="staging">    
<!-- configuration to be enabled when the "staging" profile is active -->
</springProfile><springProfile name="dev, staging">    
<!-- configuration to be enabled when the "dev" or "staging" profiles are active -->
</springProfile><springProfile name="!production">    
<!-- configuration to be enabled when the "production" profile is not active -->
</springProfile>


文章评论