首页 > 解决方案 > 春季迁移后,带有“java.util.logging”的Tomcat日志停止工作

问题描述

将我的应用程序从 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 文件中,但我希望它在执行器/日志文件上工作;

谁能帮我解决这个问题?

太感谢了

标签: javaspring-boottomcatloggingmigration

解决方案


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

记录器受到垃圾收集。编写您的日志记录语句,例如:

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);
}

3rd 方库可以从记录器中删除附加的处理程序。 打印记录器树,这样您就可以确定这是删除处理程序的问题还是级别问题。

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

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


推荐阅读