如何禁用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




