JHipster v8.3.0生产环境无法记录异常日志求助
核对生产环境日志配置文件
JHipster默认生成application-prod.yml/application-prod.properties作为prod环境配置,重点检查:- 日志级别:确认
logging.level.root或业务包的日志级别是否设为ERROR及以下(比如WARN),如果设为INFO或更高,错误日志会被过滤。 - 日志输出目标:Heroku只收集标准输出(stdout)的日志,别把日志输出到文件里。确保配置里没有
logging.file.name或logging.path,而是指向控制台,示例配置:logging: pattern: console: "%d{yyyy-MM-dd HH:mm:ss} - %msg%n" level: root: ERROR com.yourcompany: WARN
- 日志级别:确认
确认Heroku环境变量生效
执行heroku config:get SPRING_PROFILES_ACTIVE验证prod环境是否真的被激活,也排查是否有其他环境变量覆盖了日志配置——比如LOGGING_LEVEL_ROOT这类变量,如果被设为INFO,会直接覆盖yml里的配置。检查Logback生产环境配置
JHipster v8默认用Logback,打开src/main/resources/logback-spring.xml,看prod profile节点:- 确认
<springProfile name="prod">下的appender是绑定到控制台输出,而非文件或其他渠道。 - 检查是否有错误级别的过滤器,别把ERROR日志给过滤掉了。
- 确认
主动触发错误测试日志输出
在代码里加个测试接口主动抛异常,比如:@GetMapping("/test-error") public String testError() { throw new RuntimeException("测试生产环境错误日志"); }部署prod环境后调用这个接口,再用
heroku logs --tail看日志,排除是代码没触发错误的可能,定位是否是配置问题。排查Heroku日志本身的问题
Heroku日志有缓存和保留限制,用heroku logs --num 1000查看更多历史日志,确认错误日志是否被截断或覆盖。验证打包时生产配置是否被包含
执行./mvnw package -Pprod(Maven)或./gradlew bootJar -Pprod(Gradle)打包后,解压jar包检查BOOT-INF/classes/application-prod.yml是否存在且配置正确,避免打包时漏了生产配置。
内容的提问来源于stack exchange,提问作者Nicola Zambon

