Log4j 2 구현과 함께 SLF4J를 사용하도록 Gradle 프로젝트 (Lombok 주석 프로세서 사용)를 구성하려고합니다. 사용 gradle init
및 선택 을 시작한 프로젝트의 application
구조는 다음과 같습니다.
.
├── 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 ConfigurationFactory는 클래스 경로에서 log4j2.xml을 찾으려고 시도합니다.
내 build.gradle
필요한 종속성이 있습니다.
/*
* 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
클래스 자체입니다
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()
줄을 인쇄하지 않는다는 것입니다 .
> ./gradlew run
> Task :app:run
Hello World!
으로 변경 log.error()
하면 기록됩니다.
> ./gradlew run
> Task :app:run
19:26:50.782 [main] ERROR log4j.App - Printing a greeting...
Hello World!
구성 파일 trace
에서 수준을 로 log4j2.xml
설정 했으므로
<?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
구성 파일이 '선택'된 경우 표시되는 수준 로그를 제안 합니다. 이것은 그것이 수업 경로에 없다는 것을 나에게 제안합니다. 나는 그것을 app
디렉토리에 복사하려고 시도 했지만 아무 소용이 없습니다. log4j2.xml
Log4J 2를 올바르게 구성 하려면 구성 파일이 어디에 있어야 합니까?
들어 log4j2.xml
클래스 패스에 끝내고, 파일은로 이동해야합니다 src/main/resources
. 공식 문서에서 리소스에 대해 자세히 알아보십시오.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다