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

Log4j2。Gradle Java应用程序中未拾取属性文件?

古明煦
2023-03-14

我正在使用Gradle应用程序插件,并尝试使用Log4J 2实现通过SLF4J配置日志记录。我已经放置了一个log4j2。src/main/resources中的属性文件

.
├── app
│   ├── build
│   │   ├── classes
│   │   │   └── java
│   │   │       └── main
│   │   │           └── log4j
│   │   │               └── App.class
│   │   ├── generated
│   │   │   └── sources
│   │   │       ├── annotationProcessor
│   │   │       │   └── java
│   │   │       │       └── main
│   │   │       └── headers
│   │   │           └── java
│   │   │               └── main
│   │   ├── resources
│   │   │   └── main
│   │   │       └── log4j2.properties
│   │   └── tmp
│   │       └── compileJava
│   │           └── source-classes-mapping.txt
│   ├── build.gradle
│   └── src
│       ├── main
│       │   ├── java
│       │   │   └── log4j
│       │   │       └── App.java
│       │   └── resources
│       │       └── log4j2.properties
│       └── test
│           ├── java
│           │   └── log4j
│           │       └── AppTest.java
│           └── resources
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
└── settings.gradle

我的build.gradle包含Log4j 2 SLF4J绑定(https://logging.apache.org/log4j/2.x/log4j-slf4j-impl/):

/*
 * 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'
}

还有应用程序。java读取

package log4j;

import lombok.extern.slf4j.Slf4j;

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

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

app/src/main/resources包含以下内容:

# Define the root logger with appender file
log4j.rootLogger = DEBUG, stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%p\t%d{ISO8601}\t%r\t%c\t[%t]\t%m%n

因此,我希望将日志级别设置为DEBUG,如果我log,则会将一些内容打印到控制台。在应用程序中调试()。但是,如果我/gradlew运行应用程序我看不到日志行:

> ./gradlew run

> Task :app:run
Hello World!

BUILD SUCCESSFUL in 953ms
3 actionable tasks: 1 executed, 2 up-to-date

但是,我没有看到这样的日志行,这表明配置文件没有被“拾取”。如何让这个Java应用程序获取log4j2。属性文件?


共有1个答案

戚俊健
2023-03-14

您应该使用它的细节来配置log4j2,而不是log4j。我的意思是:

appenders = console

appender.console.type = Console
appender.console.name = LogToConsole
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = %p\t%d{ISO8601}\t%r\t%c\t[%t]\t%m%n

rootLogger.level = debug
rootLogger.appenderRefs = stdout
rootLogger.appenderRef.stdout.ref = LogToConsole

例如如果更改log4j2的内容。属性通过以上内容,我确实看到了日志记录。

 类似资料:
  • 问题内容: 我正在渲染一个模板,尝试使用外部样式表进行样式设置。文件结构如下。 mainpage.html看起来像这样 我的样式均未应用。它与html是我正在渲染的模板有关吗?python看起来像这样。 我知道这很有效,因为我仍然能够渲染模板。但是,当我尝试将样式代码从html的“ head”标记中的“样式”块移动到外部文件时,所有样式消失了,仅留下了一个html页面。有人看到我的文件结构有任何错

  • 我正在使用CreateReact应用程序引导我的应用程序。 我添加了两个文件和。 我的包括: 当我使用

  • 我正在开发一个基于spring boot的web应用程序,希望使用log4j2作为记录器实现。 使用log4j2-spring.xml文件中定义的日志配置,一切都可以正常工作。 不起作用的地方:我想在log4j2-spring.xml文件中使用属性占位符,该占位符应该从用于配置Spring Boot的application.yml文件中定义的属性解析。

  • src/main/resources/application.properti 为了完整起见,这里是build.gradle: 我构建应用程序:

  • 我正在读取google appengine应用程序中文件夹(/war/config/client.properties)中的属性文件。它在我的本地服务器上运行良好,但在生产模式下不工作,并且抛出异常java。安全AccessControlException:拒绝访问(java.io.FilePermission)。 你能告诉我如何在生产模式下工作吗。

  • 作为log4j2漏洞的一部分,我们正在迁移到log4j2.xml。但在应用程序启动期间,不会拾取新创建的log4j2。我已经执行了以下所有选项,但徒劳。 尝试的选项: 尝试添加和删除log4j-jcl依赖项。 删除了spring-boot-starter日志记录依赖项。 试着用log4j2.properties代替log4j2.xml. 在application.properties.中添加log