春季迁移后,带有“java.util.logging”的Tomcat日志停止工作

Posted

技术标签:

【中文标题】春季迁移后,带有“java.util.logging”的Tomcat日志停止工作【英文标题】:Tomcat log with 'java.util.logging' stops working after spring migration 【发布时间】:2020-10-22 09:54:38 【问题描述】:

将我的应用程序从 spring 1.5.21 迁移到 spring 2.0.9 后,当用户使用 tomacat 9 时,执行器/日志文件上的日志文件无法正常工作。

我正在使用库“java.util.logging.Level”。

一个简单的:

Logger.getLogger(Classname.class.getName())
                        .log(Level.SEVERE, "Teste: " + variable, ex);

没有出现在 spring.log 文件中。

这个文件是在 Spring boot 项目中的 .properties 文件中配置的,如下所示:

logging.path=$user.home/.path/logs/

但是文件中没有存储某些内容,例如“SPRING BANNER”或我的代码中的每个 Logger.getLogger 命令。

在 spring 1.5.21 中,spring.log 文件中出现了所有内容。

我使用 IDE Netbeans,并且在 netBeans 内,所有内容都已正确记录。 但是,如果我将应用程序的 .war 文件部署到 Tomcat 中,它不会出现在执行器/日志文件中(存储在 spring.log 上的上述路径上)。

在我的 pom.xml 中我改变了:

 <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.21.RELEASE</version>
    </parent>

到:

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.9.RELEASE</version>
    </parent>

附加信息: 我看到日志指令在 catalina.out 文件上正常显示,但我希望它在执行器/日志文件上工作;

谁能帮我解决这个问题?

非常感谢

【问题讨论】:

【参考方案1】:

一个简单的:[snip] 没有出现在 spring.log 文件中。

Loggers are subject to garbage collection。编写您的日志记录语句,例如:

private static final String CLASS_NAME = Classname.class.getName();
private static final Logger logger = Logger.getLogger(CLASS_NAME);

...

if (logger.isLoggable(Level.SEVERE)) 
   logger.log(Level.SEVERE, "Teste: " + variable, ex);

第 3 方库可以从记录器中删除附加的处理程序。 Print the logger tree 这样您就可以确定这是删除处理程序的问题还是级别问题。

我看到日志指令在 catalina.out 文件上正常显示,但我希望它在执行器/日志文件上工作;

控制台处理程序通常安装在根记录器上。根记录器不受垃圾回收的影响。

【讨论】:

以上是关于春季迁移后,带有“java.util.logging”的Tomcat日志停止工作的主要内容,如果未能解决你的问题,请参考以下文章

在 Java 应用程序中实现日志记录

春季提交表单后的空字段

在春季云数据流中午餐任务后任务执行不工作

春季启动生产者在kafka重启后无法发送任何消息

春季无法返回带有异常详细信息的 ResponseEntity

迁移错误后处于带有外键的奇怪状态