最后更新:2026-10-28
适用场景:Spring Boot 3.x、默认 Logback、application.yml、Jar 部署

服务在 IDEA 里跑得好好的,控制台也一直有日志。打成 Jar 放到服务器,想找 app.log,翻遍项目目录却没有。遇到这种情况,先别急着写 logback-spring.xml。大多数时候,问题不在日志框架,而在“有没有配置写文件”和“文件到底写到了哪里”。

控制台有日志,不等于会有日志文件

Spring Boot 使用常见 Starter 时,默认会把日志输出到控制台;文件输出需要单独配置。只配日志级别不会生成文件:

logging:
  level:
    root: INFO
    com.example.demo: DEBUG

上面只决定哪些日志能被打印。要让默认日志配置同时写文件,给出一个明确的文件名:

logging:
  file:
    name: ./logs/app.log
  level:
    root: INFO
    com.example.demo: DEBUG

重启后先看 logs/app.log。com.example.demo 要换成自己项目的包名,不然你写的 log.debug(...) 仍可能看不到。Spring Boot 默认的文件输出、级别设置和滚动配置见官方日志文档。

这里还有个小区别:logging.file.name 指定文件名,logging.file.path 指定目录。只设置 logging.file.path: ./logs 时,默认文件名是 spring.log,不是 app.log。两个都写时,name 生效,path 被忽略。找错文件名,比配置写错更常见。

相对路径是相对谁?

./logs/app.log 不是相对 application.yml,也不保证相对 Jar 文件。它相对的是进程启动时的工作目录。

例如 Jar 在 /opt/demo/demo.jar,你从 /home/deploy 执行:

java -jar /opt/demo/demo.jar

那就先去 /home/deploy/logs/app.log 找,而不是只看 /opt/demo/logs。在终端执行 pwd 可以确认当前目录;Windows PowerShell 用 Get-Location。如果服务由 systemd、容器或面板启动,工作目录还可能和你手动执行命令时不同。

部署机器上更省心的做法,是给日志一个确定的路径,并确保运行服务的账号有写入权限。例如 Linux 服务器:

logging:
  file:
    name: /var/log/demo/app.log

路径不是越“规范”越好。若服务账号不能写 /var/log/demo,照样不会得到想要的文件。先确认目录和权限,再重启服务看启动日志里有没有文件写入错误。容器里则要分清“容器内的文件”和“宿主机上的文件”;docker logs 能看到控制台输出,并不表示宿主机一定有 app.log。

配置写了,实际启动的不是这份配置

本地 application.yml 有 logging.file.name,线上却没有,下一步看正在使用的环境。比如你把配置写在 application-prod.yml,运行时却没激活 prod,这段设置自然不会生效。

java -jar demo.jar --spring.profiles.active=prod

还要确认服务器上的 Jar 是重新打包后的版本。改完本地配置、只重启旧 Jar,排查再久也没用。若命令行、环境变量或外部配置覆盖了文件中的设置,也应以实际启动参数为准。Spring Boot 配置文件怎么写里有多环境配置和优先级的基础说明。

可以做一次短暂的隔离测试:在测试环境启动时直接传文件名,先排除配置文件路径问题。

java -jar demo.jar --logging.file.name=./logs/app.log

这个命令能生成日志文件,而原启动命令不能,就回头查 profile、外部配置和启动脚本。测试结束后把临时参数移除,不要让两套配置长期并存。

用了自己的 Logback 配置,就先看 Appender

如果项目里有 logback-spring.xml,事情要分开看。默认日志配置的 logging.file.name 能写文件,不代表你自定义的 Logback 配置一定会替你创建文件 Appender。自定义 XML 若只挂了 ConsoleAppender,日志只进控制台是符合配置的。

先检查三件事:有没有文件 Appender,它是否挂到对应 logger 或 root 上,以及文件路径是否可写。不要一看到“没文件”就同时改 application.yml 和 XML;先确定当前到底由哪套配置控制。Spring Boot 官方更推荐使用 logback-spring.xml 这样的 -spring 文件名,以便它参与 Spring Boot 的日志初始化机制。

--debug 也不是“把所有业务日志改成 DEBUG”的开关。它主要让一组 Spring Boot 相关 logger 输出更多信息;要看自己包里的 DEBUG 日志,仍应配置 logging.level.你的包名=DEBUG。

最后按这个顺序复测

  1. 删除测试环境里旧的 app.log,避免把历史文件当成新结果。
  2. 确认启动命令、当前工作目录、激活的 profile 和实际运行的 Jar。
  3. 启动服务,先看控制台是否有日志系统初始化或文件权限错误。
  4. 触发一条确定会执行的业务日志,再检查目标文件及其修改时间。
  5. 有 logback-spring.xml 时,再核对 File Appender 与 root/logger 的引用。

默认配置下,Spring Boot 的日志文件会轮转,不必因为“文件会一直长”就立刻引入复杂 XML。等确实需要调整单文件大小或保留数量,再考虑 logging.logback.rollingpolicy.*。线上排错也别把完整请求体、密码、Token 写进日志;能定位问题的字段留下,敏感值不要落盘。

相关文章

Spring Boot 配置文件怎么写
SpringBoot 教程
Spring Boot 全局异常处理怎么写

参考资料

Spring Boot 3.5 官方文档:Logging

更新记录

2026-10-28:创建文章,补充文件路径、环境配置、Logback Appender 与部署后的排查顺序。