SpringBoot按启动参数生成指定日志文件的配置问题求助
解决方案
1. 调整启动脚本,传入日志类型系统属性
修改bootstrap.sh中的JAVA_OPT配置,把启动时的student/teacher参数作为JVM系统属性传入,同时修正脚本格式问题:
JAVA_OPT="-Dspring.config.location=file:${MAIN_APP_PATH}/config/application.properties -Dlog.type=$SECRET_KEY"
启动命令部分更新为:
nohup $JAVA_PATH -jar $JAVA_OPT $JARFILE &
2. 修改logback.xml,使用条件配置
利用Logback的条件判断功能(需依赖Janino库),通过系统属性log.type决定初始化对应的日志Appender和Logger:
<?xml version = "1.0" encoding = "UTF-8"?> <configuration> <timestamp key="timestamp" datePattern="ddMMyyyy"/> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <layout class="ch.qos.logback.classic.PatternLayout"> <Pattern> %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n </Pattern> </layout> </appender> <!-- Student日志配置:仅当log.type=student时加载 --> <if condition='property("log.type").equals("student")'> <then> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>logs/student${timestamp}.log</file> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <Pattern> %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n </Pattern> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>logs/student_.%d{ddMMyyyy}.log</fileNamePattern> </rollingPolicy> </appender> <logger name="com.training.application" level="info" additivity="false"> <appender-ref ref="FILE" /> <appender-ref ref="STDOUT" /> </logger> <root level="error"> <appender-ref ref="FILE" /> <appender-ref ref="STDOUT" /> </root> </then> </if> <!-- Teacher日志配置:仅当log.type=teacher时加载 --> <if condition='property("log.type").equals("teacher")'> <then> <appender name="FILE-AUDIT" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>logs/teacher${timestamp}.log</file> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <Pattern> %d{yyyy-MM-dd HH:mm:ss};%msg%n </Pattern> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>logs/teacher_.%d{ddMMyyyy}.log</fileNamePattern> </rollingPolicy> </appender> <logger name="audit-log" level="info" additivity="false"> <appender-ref ref="FILE-AUDIT" /> <appender-ref ref="STDOUT" /> </logger> <root level="error"> <appender-ref ref="FILE-AUDIT" /> <appender-ref ref="STDOUT" /> </root> </then> </if> </configuration>
3. 添加Janino依赖(若项目未包含)
在pom.xml中引入Janino库,支持Logback的条件判断功能:
<dependency> <groupId>org.codehaus.janino</groupId> <artifactId>janino</artifactId> <version>3.1.9</version> </dependency>
验证效果
执行bootstrap.sh start student,仅生成并写入logs/student{日期}.log;执行bootstrap.sh start teacher,仅生成并写入logs/teacher{日期}.log,不会创建无关日志文件。
内容的提问来源于stack exchange,提问作者user2986250
相关产品推荐
相关产品推荐

