当前位置: 首页 > 知识库问答 >
问题:

为什么我不能在启动Spring Boot应用程序之前进行日志记录?

翟淇
2023-03-14

我正在尝试在我的Spring Boot应用程序启动之前记录一些东西。下面是一个片段。我正在使用Lombok和Log4J2,并且已经完成了spring-boot-starter-logging排除+添加了spring-boot-starter-log4j2。我想知道如何让它工作,为什么现在的代码不能工作。

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import lombok.extern.log4j.Log4j2;

@SpringBootApplication
@Log4j2
public class DemoApplication {

    public static void main(String[] args) {
        log.info("Does not work");
        SpringApplication.run(DemoApplication.class, args);
        log.info("Works");
    }
}
2020-11-30 19:45:32.667  INFO 25132 --- [           main] c.e.d.DemoApplication                    : Starting DemoApplication using Java 11.0.1 on *** with PID 25132 (**** started by **** in ****)
2020-11-30 19:45:32.702  INFO 25132 --- [           main] c.e.d.DemoApplication                    : No active profile set, falling back to default profiles: default
2020-11-30 19:45:33.921  INFO 25132 --- [           main] c.e.d.DemoApplication                    : Started DemoApplication in 2.008 seconds (JVM running for 3.103)
2020-11-30 19:45:33.927  INFO 25132 --- [           main] c.e.d.DemoApplication                    : Works

更新:

但是,如下所示,使用带有默认日志的Slf4j可以工作,为什么不使用Log4J2呢?(带有Slf4j的Log4j2仍然没有)

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import lombok.extern.slf4j.Slf4j;
@Slf4j
@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        log.info("Does not work");
        SpringApplication.run(DemoApplication.class, args);
        log.info("Works");
    }
}
20:04:25.945 [main] INFO com.example.demo.DemoApplication - Does not work

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v2.4.0)

2020-11-30 20:04:26.463  INFO 33284 --- [           main] com.example.demo.DemoApplication         : Starting DemoApplication using Java 11.0.1 on **** with PID 33284 (**** started by **** in ****)
2020-11-30 20:04:26.465  INFO 33284 --- [           main] com.example.demo.DemoApplication         : No active profile set, falling back to default profiles: default
2020-11-30 20:04:27.234  INFO 33284 --- [           main] com.example.demo.DemoApplication         : Started DemoApplication in 1.17 seconds (JVM running for 2.109)
2020-11-30 20:04:27.242  INFO 33284 --- [           main] com.example.demo.DemoApplication         : Works

共有1个答案

尚阳炎
2023-03-14

最后,我能够通过一步一步的代码和一些研究来回答我自己的问题。共享我的结果:

在Log4j2中,当没有提供配置时(或在Spring实例化Log4j2-spring配置之前),默认根过滤器级别为ERROR,因此isEnabled返回false,记录器不会第一次打印到控制台。但是,一旦被Spring实例化,该级别就变成了INFO,因此消息被打印到控制台,因为日志级别现在高于或等于INFO级别。QED

 类似资料:
  • 这是:“Parent root=fxmlloader.load(getClass().getResource(”sample.fxml“));” 我不明白剩下的部分,所以我希望你能轻松地解决这个问题:)

  • 每当Spring Boot应用程序即将启动时,我都会尝试做一些日志记录。 目前,我有一个类,实现,我将它注册为监听器在主函数的。 应用爪哇: 初始化Logger.java 问题是,每当我通过Intellij的SpringBoot运行程序或命令行作为胖罐子运行应用程序时,它都运行良好,但是当我将其部署到外部Tomcat时,这些日志不会显示出来(所有其他应用程序日志都运行良好)。 我该怎么做?

  • 我是react native的新手,我正在尝试使用android Studio开始我的第一个项目。我遵循react native的“设置开发环境”中的说明,最终使用 然后我在android studio中打开了我的项目来启动AVD,但是gradle抛出了以下错误 错误:评估脚本时出现问题。 无法运行程序“node”(在目录“/home/deadshot/documents/playground/a

  • 我有一个主活动MainActivity,它是我的android应用程序的入口点。它通过发射器正确发射。然而,当我尝试执行startActivity时,我看到活动试图启动的一些调试,一些代码正确启动,但MainActivity从未启动。 我认为这可能与意图有关: 对吗? 从内部活动来看,我有 我甚至看到 10-11 22:23:46.026:INFO/ActivityManager(472):从pi

  • 我使用的是,我想配置将不同的内容异步记录到不同的日志文件中。 我创建了log4j2文件,但是仍然使用Spring Boot默认日志记录。如何切换日志记录?

  • 下面是上面文件引用的: 但当以的身份运行InteliJ时,问题就会消失。