You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 18:45:20