Spring boot 不搜索 log4j2 配置文件

Gur*_*ngh 3 java spring log4j2 spring-boot

我正在尝试将 Apache Log4j 2.12.1 与 Spring Boot 2.2.1 一起使用,但是当我运行时,它没有给出有关缺少 log4j 2 配置文件的任何警告。下面是日志的代码(简单的一次类来测试它是否有效或注意):

package com.example.Log4jdemoSpringboot;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Log4jDemoSpringBootApplication {

    static Logger logger = LogManager.getLogger(Log4jDemoSpringBootApplication.class);
    public static void main(String[] args) {
        SpringApplication.run(Log4jDemoSpringBootApplication.class, args);
        logger.info("info");
        logger.warn("warn");
        logger.error("error");
        logger.debug("debug");
        logger.fatal("fatal");
    }

}
Run Code Online (Sandbox Code Playgroud)

以下是输出:

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

2019-11-18 12:19:20.844  INFO 13136 --- [           main] c.e.L.Log4jDemoSpringBootApplication     : Starting Log4jDemoSpringBootApplication on Gurpreet-PC with PID 13136 (C:\Development\eclipse-workspace\Log4j-demo-Spring-boot\target\classes started by Gurpreet in C:\Development\eclipse-workspace\Log4j-demo-Spring-boot)
2019-11-18 12:19:20.872  INFO 13136 --- [           main] c.e.L.Log4jDemoSpringBootApplication     : No active profile set, falling back to default profiles: default
2019-11-18 12:19:26.946  INFO 13136 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2019-11-18 12:19:27.009  INFO 13136 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2019-11-18 12:19:27.011  INFO 13136 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.27]
2019-11-18 12:19:27.442  INFO 13136 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2019-11-18 12:19:27.444  INFO 13136 --- [           main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 6320 ms
2019-11-18 12:19:28.213  INFO 13136 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2019-11-18 12:19:28.925  INFO 13136 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2019-11-18 12:19:28.937  INFO 13136 --- [           main] c.e.L.Log4jDemoSpringBootApplication     : Started Log4jDemoSpringBootApplication in 10.398 seconds (JVM running for 13.269)
2019-11-18 12:19:28.945  INFO 13136 --- [           main] c.e.L.Log4jDemoSpringBootApplication     : info
2019-11-18 12:19:28.949  WARN 13136 --- [           main] c.e.L.Log4jDemoSpringBootApplication     : warn
2019-11-18 12:19:28.952 ERROR 13136 --- [           main] c.e.L.Log4jDemoSpringBootApplication     : error
2019-11-18 12:19:28.953 ERROR 13136 --- [           main] c.e.L.Log4jDemoSpringBootApplication     : fatal
Run Code Online (Sandbox Code Playgroud)

但是,如果我对简单的 java 项目使用相同的配置,它就可以工作。

小智 7

只是分享,因为我的 log4j2 配置也遇到了同样的问题。我得到了以下解决方案。

  1. 运行命令: mvn dependency:tree 此命令将告诉您在配置之前加载哪些依赖项。

  2. 在日志依赖项之前添加到 pom.xml 加载中的依赖项的排除项,添加以下我使用选项 a 的任一选项。

A-

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>
Run Code Online (Sandbox Code Playgroud)

b-

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
        </exclusion>
        <exclusion>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
        </exclusion>
    </exclusions>
</dependency>
Run Code Online (Sandbox Code Playgroud)

之后一切顺利,我的 log4j2.xml 配置加载成功。确保配置文件位于类路径中。


Rus*_*lin 5

我遇到了问题,spring boot 没有搜索配置 xml 文件。我将此行添加到 application.properties (log4j2.xml 在 src/main/resources 中)

logging.config=classpath:log4j2.xml
Run Code Online (Sandbox Code Playgroud)


Har*_*hra 3

希望这就是我们正在寻找的
东西这是我在 Spring boot 日志记录中使用的 application.properties

#logging.level.root=WARN
logging.level.org.springframework=DEBUG
logging.level.com.appicantion.name=DEBUG

#output to a temp_folder/file
logging.file=${java.io.tmpdir}/application.log

# Logging pattern for the console
logging.pattern.console= %d{yyyy-MM-dd HH:mm:ss} - %msg%n

# Logging pattern for file
logging.pattern.file= %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%
Run Code Online (Sandbox Code Playgroud)

您的答案:在 log4j2 中

在 src/main/resources 文件夹中添加 log4j2.xml。

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN" monitorInterval="30">
    <Properties>
        <Property name="LOG_PATTERN">%d{yyyy-MM-dd'T'HH:mm:ss.SSSZ} %p %m%n</Property>
        <Property name="APP_LOG_ROOT">c:/temp</Property>
    </Properties>
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT" follow="true">
            <PatternLayout pattern="${LOG_PATTERN}" />
        </Console>

        <RollingFile name="appLog"
            fileName="${APP_LOG_ROOT}/SpringBoot2App/application.log"
            filePattern="${APP_LOG_ROOT}/SpringBoot2App/application-%d{yyyy-MM-dd}-%i.log">
            <PatternLayout pattern="${LOG_PATTERN}" />
            <Policies>
                <SizeBasedTriggeringPolicy size="19500KB" />
            </Policies>
            <DefaultRolloverStrategy max="1" />
        </RollingFile>

    </Appenders>
    <Loggers>

        <Logger name="com.application.app" additivity="false">
            <AppenderRef ref="appLog" />
            <AppenderRef ref="Console" />
        </Logger>

        <Root level="debug">
            <AppenderRef ref="Console" />
        </Root>
    </Loggers>
</Configuration>
Run Code Online (Sandbox Code Playgroud)

https://howtodoinjava.com/spring-boot2/logging/spring-boot-log4j2-config/