簡體   English   中英

為什么 Log4j2 沒有在 Spring 引導應用程序中登錄?

[英]Why is Log4j2 not logging inside Spring Boot Application?

我正在嘗試使用 spring 啟動器和 spring 啟動器 web。 到目前為止,我已經完成了我認為非常簡單的設置。 我可以看到該應用程序顯然正在查找並使用log4j2-spring.xml文件,所以我的問題是為什么 MyRunner class 日志中沒有任何內容通過 log4j2? 它確實執行並且System.out.println()語句正在寫入控制台,但 LOG.error 消息不是。 請幫忙。

pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.1.RELEASE</version>
        <relativePath />
    </parent>
    <groupId>com.demo</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1</version>
    <name>iim</name>
    <description>Demo</description>

    <properties>
        <java.version>1.8</java.version>
        <maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>
    </properties>

    <dependencies>

        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
        </dependency>

        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-dbcp2</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.1</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

        <dependency>
            <groupId>org.liquibase</groupId>
            <artifactId>liquibase-core</artifactId>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

log4j2-spring.xml:

<Properties>
    <Property name="LOG_PATTERN">
        %d{yyyy-MM-dd HH:mm:ss,SSS} [%t] %-5p [%F:%L] %m%n
    </Property>
</Properties>

<Appenders>
    <Console name="ConsoleAppender" target="SYSTEM_OUT" follow="true">
        <PatternLayout pattern="${LOG_PATTERN}"/>
    </Console>
</Appenders>

<Loggers>

    <logger name="org.springframework" level="WARN" />      
    <logger name="org.apache.ibatis.logging.jdbc.BaseJdbcLogger" level="ERROR" />
    <logger name="java.sql" level="ERROR" />
    <logger name="org.mybatis" level="ERROR" />

    <Root level="INFO">
        <AppenderRef ref="ConsoleAppender" />
    </Root>
</Loggers>

應用。java:

import java.util.stream.Stream;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.stereotype.Component;

@SpringBootApplication
@ComponentScan("com.demo")
public class Application {
    private static final Logger LOG = LoggerFactory.getLogger(Application.class);

    public static void main(String[] args) {
        LOG.warn("********** Starting the application");
        SpringApplication.run(Application.class, args);
    }

    @Component
    public class MyRunner implements CommandLineRunner {
        @Override
        public void run(String... args) throws Exception {
            System.out.println(String.format("%s!!!", "HELLO WORLD"));
            LOG.error(String.format("%s!!!", "HELLO WORLD"));

            Stream.of("John Travolta", "Julia Childs", "Jennifer Anniston", "Helen Hunt", "Rachel Green").forEach(n -> {
                System.out.println(n);
                LOG.error(n);
            });

        }
    }
}

控制台 Output:

2019-12-11 10:08:12,294 [restartedMain] INFO  [DirectJDKLog.java:173] Initializing ProtocolHandler ["http-nio-8080"]
2019-12-11 10:08:12,296 [restartedMain] INFO  [DirectJDKLog.java:173] Starting service [Tomcat]
2019-12-11 10:08:12,297 [restartedMain] INFO  [DirectJDKLog.java:173] Starting Servlet engine: [Apache Tomcat/9.0.27]
2019-12-11 10:08:12,377 [restartedMain] INFO  [DirectJDKLog.java:173] Initializing Spring embedded WebApplicationContext
2019-12-11 10:08:12,818 [restartedMain] INFO  [HikariDataSource.java:110] HikariPool-1 - Starting...
2019-12-11 10:08:12,968 [restartedMain] INFO  [HikariDataSource.java:123] HikariPool-1 - Start completed.
2019-12-11 10:08:13,407 [restartedMain] INFO  [Slf4jLogger.java:42] SELECT COUNT(*) FROM db_example.DATABASECHANGELOGLOCK
2019-12-11 10:08:13,413 [restartedMain] INFO  [Slf4jLogger.java:42] SELECT COUNT(*) FROM db_example.DATABASECHANGELOGLOCK
2019-12-11 10:08:13,415 [restartedMain] INFO  [Slf4jLogger.java:42] SELECT `LOCKED` FROM db_example.DATABASECHANGELOGLOCK WHERE ID=1
2019-12-11 10:08:13,428 [restartedMain] INFO  [Slf4jLogger.java:42] Successfully acquired change log lock
2019-12-11 10:08:13,967 [restartedMain] INFO  [Slf4jLogger.java:42] Reading resource: com/demo/db/liquibase/tables/user.sql
2019-12-11 10:08:14,014 [restartedMain] INFO  [Slf4jLogger.java:42] SELECT MD5SUM FROM db_example.DATABASECHANGELOG WHERE MD5SUM IS NOT NULL LIMIT 1
2019-12-11 10:08:14,015 [restartedMain] INFO  [Slf4jLogger.java:42] SELECT COUNT(*) FROM db_example.DATABASECHANGELOG
2019-12-11 10:08:14,016 [restartedMain] INFO  [Slf4jLogger.java:42] Reading from db_example.DATABASECHANGELOG
2019-12-11 10:08:14,016 [restartedMain] INFO  [Slf4jLogger.java:42] SELECT * FROM db_example.DATABASECHANGELOG ORDER BY DATEEXECUTED ASC, ORDEREXECUTED ASC
2019-12-11 10:08:14,025 [restartedMain] INFO  [Slf4jLogger.java:42] Successfully released change log lock
2019-12-11 10:08:14,087 [restartedMain] INFO  [DirectJDKLog.java:173] Starting ProtocolHandler ["http-nio-8080"]
HELLO WORLD!!!
John Travolta
Julia Childs
Jennifer Anniston
Helen Hunt
Rachel Green

我嘗試了您的代碼,對我的 IDE 進行了一些更改,它運行良好,以下是更新的代碼,此代碼可以幫助您解決問題:

package com.example.demo;
import java.util.stream.Stream;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.stereotype.Component;

@SpringBootApplication
public class Application {
    private static final Logger LOG = LoggerFactory.getLogger(Application.class);

    public static void main(String[] args) {
        LOG.warn("********** Starting the application");
        SpringApplication.run(Application.class, args);
    }

     @Component
    public class MyRunner implements CommandLineRunner {
        @Override
        public void run(String... args) throws Exception {
            System.out.println(String.format("%s!!!", "HELLO WORLD"));
            LOG.error(String.format("%s!!!", "HELLO WORLD"));

            Stream.of("John Travolta", "Julia Childs", "Jennifer Anniston", "Helen Hunt", "Rachel Green").forEach(n -> {
                System.out.println(n);
                LOG.error(n);
            });

        }
    }
}

我一直保存在日志 xml(log4j2-spring.xml) 下面 - src/main/resource

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
<Properties>
    <Property name="LOG_PATTERN">
        %d{yyyy-MM-dd HH:mm:ss,SSS} [%t] %-5p [%F:%L] %m%n
    </Property>
</Properties>

<Appenders>
    <Console name="ConsoleAppender" target="SYSTEM_OUT" follow="true">
        <PatternLayout pattern="shree - ${LOG_PATTERN}"/>
    </Console>
</Appenders>

<Loggers>

    <logger name="org.springframework" level="WARN" />      
    <logger name="org.apache.ibatis.logging.jdbc.BaseJdbcLogger" level="ERROR" />
    <logger name="java.sql" level="ERROR" />
    <logger name="org.mybatis" level="ERROR" />

    <Root level="INFO">
        <AppenderRef ref="ConsoleAppender" />
    </Root>
</Loggers>
</Configuration>

刪除了 mybatis 和 jdbc 依賴項,因為 spring 要求進行 db 配置。 那些 Jar 可能會導致您的代碼出現問題(覆蓋您的日志配置):

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo</name>
    <description>Demo project for Spring Boot</description>

 <properties>
        <java.version>1.8</java.version>
        <maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>
    </properties>

    <dependencies>

        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
        </dependency>

       <!--  <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-dbcp2</artifactId>
        </dependency> -->

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>

       <!--  <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.1</version>
        </dependency> -->

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
        </dependency>

        <!-- <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
        </dependency>
 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

       <!--  <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

        <dependency>
            <groupId>org.liquibase</groupId>
            <artifactId>liquibase-core</artifactId>
        </dependency> -->

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

output:

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

shree - 2019-12-11 22:58:03,221 [restartedMain] INFO  [StartupInfoLogger.java:55] Starting Application on LAPTOP-FS2FJ2C3 with PID 6044 (C:\Users\shrir\eclipse-workspace-jee-code\demo\target\classes started by shrir in C:\Users\shrir\eclipse-workspace-jee-code\demo)
shree - 2019-12-11 22:58:03,228 [restartedMain] INFO  [SpringApplication.java:651] No active profile set, falling back to default profiles: default
shree - 2019-12-11 22:58:04,014 [restartedMain] INFO  [DirectJDKLog.java:173] Initializing ProtocolHandler ["http-nio-8080"]
shree - 2019-12-11 22:58:04,014 [restartedMain] INFO  [DirectJDKLog.java:173] Starting service [Tomcat]
shree - 2019-12-11 22:58:04,015 [restartedMain] INFO  [DirectJDKLog.java:173] Starting Servlet engine: [Apache Tomcat/9.0.27]
shree - 2019-12-11 22:58:04,074 [restartedMain] INFO  [DirectJDKLog.java:173] Initializing Spring embedded WebApplicationContext
shree - 2019-12-11 22:58:04,402 [restartedMain] INFO  [DirectJDKLog.java:173] Starting ProtocolHandler ["http-nio-8080"]
shree - 2019-12-11 22:58:04,423 [restartedMain] INFO  [StartupInfoLogger.java:61] Started Application in 1.478 seconds (JVM running for 2.412)
HELLO WORLD!!!
shree - 2019-12-11 22:58:04,424 [restartedMain] ERROR [Application.java:36] HELLO WORLD!!!
John Travolta
shree - 2019-12-11 22:58:04,424 [restartedMain] ERROR [Application.java:40] John Travolta
Julia Childs
shree - 2019-12-11 22:58:04,424 [restartedMain] ERROR [Application.java:40] Julia Childs
Jennifer Anniston
shree - 2019-12-11 22:58:04,425 [restartedMain] ERROR [Application.java:40] Jennifer Anniston
Helen Hunt
shree - 2019-12-11 22:58:04,425 [restartedMain] ERROR [Application.java:40] Helen Hunt
Rachel Green
shree - 2019-12-11 22:58:04,425 [restartedMain] ERROR [Application.java:40] Rachel Green

這可能不是您的解決方案,但會幫助您找到問題所在。

在答案部分添加代碼,因為無法在評論部分解釋

您的代碼是正確的,除了您必須在運行語句之后編寫日志語句的主要方法,否則一切都是正確的並且應該記錄。 僅供參考,引導默認日志級別設置為 INFO。

 public static void main(String[] args) {

    SpringApplication.run(Application.class, args);
    LOG.warn("********** Starting the application");
}

log4j2.xml 或 log4j2-spring.xml 出現任何問題的可能性很小。 最有可能的問題出在你的 pom.xml 中。

我建議運行 mvn:dependeny:tree 並從 class 路徑中的所有依賴項中排除 spring-boot-starter-logging。

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-log4j2</artifactId>
    </dependency>

我希望這會有所幫助。 無需在 application.properties 中明確給出日志配置文件的位置,除非它在您的項目類路徑之外。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM