使用场景

  线上环境启动项目时,把程序的日志输出到指定的日志文件中。控制台中不打印日志,这样可以节省磁盘IO资源。而在本地启动时,把日志直接输出到控制台即可,方便排查问题。 此时,就需要根据不同的环境,使用不同的日志输出策略。

方式一:springProfile标签

在同一份日志配置文件中,编写指定的日志输出策略。

1. logback-spring.xml文件

在springProfile标签内编写日志输出规则,标签中的name属性值就是环境的编码

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
	<property name="logback_app_name" value="jtest/springboot" />
    <property name="LOG_PATH" value="${user.home}/${logback_app_name}/logs" />
    
    <!-- 1.控制台输出日志 ConsoleAppender -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <!-- encoder 默认配置为PatternLayoutEncoder -->
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS}---%magenta([%thread])---%-5level---%blue([%c])---%green([%L])---[%msg]%n</pattern>
        </encoder>
    </appender>

    <!-- 2.输出到文件 -->
    <appender name="rollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--文件路径:可使用ognl-->
            <fileNamePattern>${LOG_PATH}/info.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <!--每个文件最大100MB;保存60天;总文件最多20GB-->
            <maxFileSize>100MB</maxFileSize>
            <maxHistory>60</maxHistory>
            <totalSizeCap>20GB</totalSizeCap>
        </rollingPolicy>
        <encoder>
            <charset>UTF-8</charset>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS}---%magenta([%thread])---%-5level---%blue([%c])---%green([%L])---[%msg]%n</pattern>
        </encoder>
    </appender>


    <!-- 线上环境,日志配置 -->
    <springProfile name="production">
	    <root level="info">
	        <!--日志输出到文件-->
	        <appender-ref ref="rollingFile"/>
	    </root>
	</springProfile>
	
    <!-- 本地、开发环境,日志配置 可以写logback支持的所有节点 -->
    <springProfile name="local,dev">
        <root level="INFO">
			<!--控制台日志:生产环境建议关掉-->
            <appender-ref ref="STDOUT" />
        </root>
    </springProfile>
</configuration>

在springProfile标签中,可以编写任何logback原生支持的标签。

2. 指定启动环境

两种指定启动环境的方式:

  • 在jvm启动参数中加入:-Dspring.profiles.active=环境编码 (推荐)
    如:-Dspring.profiles.active=local
  • 设置属性值:spring.profiles.active=环境编码
    可以在application.properties或者application.yml中指定,如在application.properties文件中指定:
    spring.profiles.active=local
    
    这种硬编码方式,发布在不同的环境,需要修改这个属性值。
方式二:指定日志配置文件

可以根据运行环境的不同,指定加载指定的日志配置文件。

1. 设置logging.config属性

Springboot中设置属性值,一般在application.properties或者application.yml文件中设置。

在application.yml中指定日志配置文件的路径

logging:
  config: classpath:logback-spring-${spring.profiles.active}.xml

此时系统就会加载logback-spring-${spring.profiles.active}.xml这个日志配置文件。
可以看到${spring.profiles.active}是一个变量,我们可以在系统启动的时候设置这个值,方法与上面“方式一”中的指定启动环境一样。

参考:官方说明

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐