Spring Boot结合Lombok处理堆栈日志的最佳实践及生产配置
关闭生产环境控制台日志输出的方案
针对你用log.error("Error occored: {}", e)替代printStackTrace()后,需要在生产环境关闭控制台日志的需求,提供两种可行方案:
方法1:直接修改prod.properties配置
在现有prod.properties中添加一行配置,直接禁用Logback的控制台输出Appender:
logging.logback.appender.console.enabled=false
添加后,生产环境只会将日志写入你指定的/path/to/log/my-service.log文件,控制台不再输出任何日志内容,完全适配生产环境的安全要求。
方法2:自定义Logback配置文件(更灵活)
如果需要对不同环境(开发/生产)做更精细化的日志控制,推荐创建logback-spring.xml文件放在src/main/resources目录下,内容如下:
<?xml version="1.0" encoding="UTF-8"?> <configuration> <!-- 定义通用日志格式 --> <property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/> <!-- 文件输出配置:对应你原properties中的滚动策略 --> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>/path/to/log/my-service.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>/path/to/log/my-service.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <maxHistory>90</maxHistory> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>10MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> <encoder> <pattern>${LOG_PATTERN}</pattern> </encoder> </appender> <!-- 生产环境:仅启用文件日志输出 --> <springProfile name="prod"> <root level="INFO"> <appender-ref ref="FILE"/> </root> <logger name="org.springframework" level="WARN"/> </springProfile> <!-- 开发环境:同时启用控制台和文件日志输出 --> <springProfile name="dev"> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>${LOG_PATTERN}</pattern> </encoder> </appender> <root level="INFO"> <appender-ref ref="CONSOLE"/> <appender-ref ref="FILE"/> </root> </springProfile> </configuration>
使用这个配置后,开发环境会同时在控制台和日志文件输出堆栈信息,方便调试;生产环境仅写入日志文件,符合安全要求。
注意:使用自定义Logback配置后,原prod.properties中的日志相关配置(logging.file.name、logging.logback.rollingpolicy.*等)可以移除,因为这些规则已经在logback-spring.xml中定义。
内容的提问来源于stack exchange,提问作者user2304483
相关产品推荐
相关产品推荐

