You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何禁用Spring Boot启动脚本默认输出到/var/log的日志

解决Spring Boot启动脚本默认写入/var/log日志的问题

我来帮你搞定这个问题——其实核心原因是Spring Boot的启动脚本本身自带了日志重定向逻辑,哪怕你用log4j配置了自定义日志路径,脚本还是会默认把输出打到/var/log下面。下面是具体的解决步骤:

1. 检查并修改启动脚本的日志配置

首先找到你的Spring Boot启动脚本(一般是项目打包后生成的.sh文件,或者你自定义的启动脚本),里面大概率有一段关于LOG_FOLDER的默认设置,类似这样:

if [ -z "$LOG_FOLDER" ]; then
    LOG_FOLDER="/var/log"
fi
  • 如果你想沿用脚本的日志管理,直接把默认的/var/log改成你指定的日志路径就行;
  • 要是想完全交给log4j处理,那就直接注释掉这段默认值设置,或者干脆删掉脚本里所有和日志文件重定向相关的代码。

比如脚本里执行Java命令的部分可能是这样:

nohup java $JAVA_OPTS -jar $JAR_FILE >> "$LOG_FOLDER/$APP_NAME.log" 2>&1 &

把后面的>> "$LOG_FOLDER/$APP_NAME.log" 2>&1这段重定向代码去掉,这样启动脚本就不会再往/var/log写日志了。

2. 确保log4j完全接管日志输出

有时候Spring Boot默认依赖的logback会和log4j冲突,导致部分日志还是走默认路径。你需要在依赖里排除logback,只保留log4j:
如果是Maven项目,在pom.xml里修改:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

同时确认你的log4j.xml配置里,rootLogger和各个业务包的日志都明确指向了你传入的日志文件夹,没有遗漏任何输出节点。

3. 验证修改效果

修改完脚本和配置后,重启应用,检查/var/log目录下是否还有新的日志生成,同时确认你指定的日志文件夹里的日志输出正常。这样就能彻底禁用默认的/var/log日志输出了。

内容的提问来源于stack exchange,提问作者Dushyanth Nagaraju

火山引擎 最新活动