首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何配置分级应用程序以将SLF4J与Log4J 2实现一起使用?

如何配置分级应用程序以将SLF4J与Log4J 2实现一起使用?
EN

Stack Overflow用户
提问于 2021-02-19 03:33:06
回答 1查看 3.7K关注 0票数 5

我正在尝试配置一个Gradle项目(它使用Lombok注释处理器)来使用SLF4J和Log4j 2实现。该项目使用gradle init启动并选择一个application,其结构如下:

代码语言:javascript
运行
复制
.
├── app
│   ├── build
│   │   ├── classes
│   │   │   └── java
│   │   │       └── main
│   │   │           └── log4j
│   │   │               └── App.class
│   │   ├── generated
│   │   │   └── sources
│   │   │       ├── annotationProcessor
│   │   │       │   └── java
│   │   │       │       └── main
│   │   │       └── headers
│   │   │           └── java
│   │   │               └── main
│   │   └── tmp
│   │       └── compileJava
│   │           └── source-classes-mapping.txt
│   ├── build.gradle
│   └── src
│       ├── main
│       │   ├── java
│       │   │   └── log4j
│       │   │       └── App.java
│       │   └── resources
│       └── test
│           ├── java
│           │   └── log4j
│           │       └── AppTest.java
│           └── resources
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── log4j2.xml
└── settings.gradle

我已经在项目目录中放置了一个log4j2.xml文件。根据https://logging.apache.org/log4j/2.x/manual/configuration.html自动配置部分的步骤9,

如果无法找到JSON文件,XML将尝试在类路径上定位log4j2.xml。

我的build.gradle有所需的依赖项,

代码语言:javascript
运行
复制
/*
 * This file was generated by the Gradle 'init' task.
 *
 * This generated file contains a sample Java application project to get you started.
 * For more details take a look at the 'Building Java & JVM projects' chapter in the Gradle
 * User Manual available at https://docs.gradle.org/6.8.1/userguide/building_java_projects.html
 */

plugins {
    // Apply the application plugin to add support for building a CLI application in Java.
    id 'application'
}

repositories {
    // Use JCenter for resolving dependencies.
    jcenter()
}

dependencies {
    // Use JUnit test framework.
    testImplementation 'junit:junit:4.13'

    // This dependency is used by the application.
    implementation 'com.google.guava:guava:29.0-jre'

    implementation group: 'org.slf4j', name: 'slf4j-api', version: '2.0.0-alpha1'
    implementation 'org.apache.logging.log4j:log4j-slf4j18-impl:2.14.0'

    compileOnly 'org.projectlombok:lombok:1.18.16'
    annotationProcessor 'org.projectlombok:lombok:1.18.16'

    testCompileOnly 'org.projectlombok:lombok:1.18.16'
    testAnnotationProcessor 'org.projectlombok:lombok:1.18.16'
}

application {
    // Define the main class for the application.
    mainClass = 'log4j.App'
}

App类本身是

代码语言:javascript
运行
复制
package log4j;

import lombok.extern.slf4j.Slf4j;

@Slf4j
public class App {
    public String getGreeting() {
        return "Hello World!";
    }

    public static void main(String[] args) {
        log.info("Printing a greeting...");
        System.out.println(new App().getGreeting());
    }
}

问题是,如果我使用./gradlew run运行应用程序,它不会打印log.info()行,

代码语言:javascript
运行
复制
> ./gradlew run

> Task :app:run
Hello World!

然而,如果我将其更改为log.error(),则确实会记录:

代码语言:javascript
运行
复制
> ./gradlew run

> Task :app:run
19:26:50.782 [main] ERROR log4j.App - Printing a greeting...
Hello World!

由于我在trace配置文件中将级别设置为log4j2.xml

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>
    </Appenders>
    <Loggers>
        <Root level="trace">
            <AppenderRef ref="Console"/>
        </Root>
    </Loggers>
</Configuration>

如果配置文件被“拾取”,我建议使用info-level日志来显示。这向我表明,它不是在班级道路上。我尝试过将其复制到app目录,但没有结果。log4j2.xml配置文件应该定位在哪里才能正确配置Log4J 2?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-19 08:00:39

要使log4j2.xml在类路径上结束,必须将文件移动到src/main/resources。阅读更多关于正式文件中的资源的信息:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66271408

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档