개요
이 가이드 에서는 다음 방법을 학습 .
SLF4J(Simple Logging Facade For Java )를 사용하여 로거를 설정합니다.
로거의 로그 수준 구성
이 가이드 운전자 에서 이벤트를 기록 방법을 보여 줍니다. 코드에서 운전자 의 활동에 대한 정보를 사용하는 방법을 학습 모니터링 가이드 참조하세요.
중요
프로젝트 리액터 라이브러리
이 가이드 에서는 Project Reactor 라이브러리를 사용하여 Java Reactive Streams 운전자 메서드에서 반환된 Publisher 인스턴스를 사용합니다. 프로젝트 Reactor 라이브러리와 사용 방법에 대해 자세히 학습 Reactor 문서에서 시작하기 참조하세요.
로거(Logger) 설정
이 섹션에서는 로거를 설정하려면 필요한 종속성에 대한 배경 정보를 제공하고 로거 설정 예시를 제공합니다.
배경
Java Reactive Streams 운전자 SLF J(Simple Logging Facade For Java4 )를 사용합니다. SLF4J를 사용하면 배포서버 시 원하는 로깅 프레임워크 지정할 수 있습니다. SLF4J에 대한 자세한 내용은 SLF4J 문서를 참조하세요.
로거 설정은 선택 사항입니다. 애플리케이션 시작하면 Java Reactive Streams 운전자 클래스 경로에서 slf4j-api 아티팩트를 찾습니다. 운전자 slf4j-api 아티팩트를 찾을 수 없는 경우 운전자 java.util.logging 를 사용하여 다음 경고를 로그 하고 모든 추가 로깅을 비활성화합니다.
WARNING: SLF4J not found on the classpath. Logging is disabled for the 'org.mongodb.driver' component
로거를 설정하다 하려면 프로젝트 에 다음을 포함해야 합니다.
slf4j-api아티팩트로깅 프레임워크
바인딩
참고
가장 많이 사용되는 로깅 프레임워크의 경우 slf4j-api와 로깅 프레임워크를 종속성으로 나열하는 단일 바인딩 아티팩트가 있는 경우가 많습니다. 이는 프로젝트의 종속성 목록에 하나의 아티팩트를 추가하여 로거를 설정할 수 있음을 의미합니다. 아래 예시에서 이를 확인할 수 있습니다.
바인딩은 slf4j-api 아티팩트를 로깅 프레임워크 와 연결하는 코드입니다. 탭 선택하여 로거를 설정하다 하고 구성하는 방법을 학습 .
예시 - 설정
이 예시 Logback 로거를 설정하다 방법을 보여줍니다.
팁
종속성 버전
빌드 도구에 따라 Maven 또는 Gradle 지침을 선택합니다.
Maven
pom.xml 파일 에 다음 종속성을 추가합니다.
<dependencies> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.11</version> </dependency> </dependencies>
Gradle
build.gradle 파일 에 다음 종속성을 추가합니다.
dependencies { implementation 'ch.qos.logback:logback-classic:1.2.11' }
앞의 종속성을 포함했으면 MongoDB 인스턴스 에 연결하고 다음 코드를 사용하여 문서 조회 .
MongoClient mongoClient = MongoClients.create("<connection URI>"); MongoDatabase database = mongoClient.getDatabase("<database>"); MongoCollection<Document> collection = database.getCollection("<collection>"); Flux.from(collection.find()).blockFirst();
다음과 같은 내용이 출력되어야 합니다.
... 12:14:55.853 [main] DEBUG org.mongodb.driver.connection - Opened connection [connectionId{localValue:3, serverValue:3}] to <MongoDB hostname> 12:14:55.861 [main] DEBUG org.mongodb.driver.protocol.command - Command "find" started on database <database> using a connection with driver-generated ID 3 and server-generated ID 3 to <MongoDB hostname>. The request ID is 5. Command: {"find": "<collection>", "filter": {}, "limit": 1, "singleBatch": true, "$db": "<database>", "lsid": {"id": {"$binary": {"base64": "<_id>", "subType": "04"}}}, "$readPreference": {"mode": "primaryPreferred"}} 12:14:55.864 [main] DEBUG org.mongodb.driver.protocol.command - Command "find" succeeded in 4.34 ms using a connection with driver-generated ID 3 and server-generated ID 3 to <MongoDB hostname>. The request ID is 5. Command reply: {"cursor": {"id": 0, "ns": "<database>.<collection>", "firstBatch": []}, "ok": 1.0, "$clusterTime": {"clusterTime": {"$timestamp": {"t": 1673778535, "i": 1}}, "signature": {"hash": {"$binary": {"base64": "<_id>", "subType": "00"}}, "keyId": 0}}, "operationTime": {"$timestamp": {"t": 1673778535, "i": 1}}}
참고
기본값 로그 수준
Logback의 기본값 로그 수준은 DEBUG입니다. Logback 로거의 로그 수준을 변경하는 방법을 알아보려면 이 페이지의 로거 구성 섹션에 있는 예시를 참조하세요.
Logback에 대한 자세한 내용은 Logback 매뉴얼을 참조하세요.
로거 구성
로거를 구성하려면 SLF4J에 바인딩된 로깅 프레임워크의 구성 시스템을 사용해야 합니다.
다음 예시 로깅 프레임워크의 구성 시스템을 사용하여 로거의 로그 수준을 설정하다 방법을 보여줍니다.
로거의 로그 수준은 로거가 메시지를 출력하기 위한 메시지의 긴급성 정도의 하한을 지정합니다.
예시 - 구성
이 예시에서는 로거의 로그 수준을 INFO로 구성하는 방법을 보여줍니다.
logback.xml(이)라는 파일에 Logback 구성을 지정합니다. 특정 위치에 logback.xml 파일을 생성할 필요는 없지만 클래스 경로에서 해당 파일에 액세스할 수 있어야 합니다.
Logback 프레임워크 가장 긴급한 것부터 가장 덜 긴급한 것까지 순서대로 다음과 같은 로그 수준을 정의합니다.
오류
경고
정보
DEBUG
트레이스
logback.xml 파일 에 다음 코드를 삽입합니다.
<configuration> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern> %-4relative [%thread] %-5level %logger{30} - %msg%n </pattern> </encoder> </appender> <root level="INFO"> <appender-ref ref="CONSOLE" /> </root> </configuration>
로거 구성이 성공했는지 테스트하려면 다음 코드를 실행하세요.
MongoClient mongoClient = MongoClients.create("<connection URI>"); MongoDatabase database = mongoClient.getDatabase("<database>"); MongoCollection<Document> collection = database.getCollection("<collection>"); Flux.from(collection.find()).blockFirst();
다음과 같은 내용이 출력되어야 합니다.
... 1317 [cluster-ClusterId{value='<your cluster id>', description='null'}-<your connection uri>] INFO org.mongodb.driver.cluster - Discovered replica set primary <your connection uri> 1568 [main] INFO org.mongodb.driver.connection - Opened connection [connectionId{localValue:7, serverValue:<server value>}] to <your connection uri>
Logback 구성에 대한 자세한 내용은 Logback 매뉴얼을 참조하세요.
로거(Logger) 이름
로거는 로거 이름을 사용하여 다양한 로깅 이벤트를 구성하는 데 도움이 됩니다. 로거 이름은 계층 구조를 형성하는 문자열입니다. 이름 뒤에 "." 가 붙은 로거가 다른 로거 이름의 접두사인 경우 로거는 다른 로거의 조상입니다. 예시 들어 "grandparent" 는 "grandparent.parent"의 조상이고, "grandparent.parent.child"의 조상입니다.
구체적인 예시 들면 다음과 같습니다. 코드에서 로거 계층 구조는 다음과 같습니다.
import org.slf4j.Logger; import org.slf4j.LoggerFactory; ... Logger logger_parent = LoggerFactory.getLogger("parent"); Logger logger_child = LoggerFactory.getLogger("parent.child");
로거는 기존 로거의 속성을 상속받으며 속성을 자체적으로 정의할 수 있습니다. 이는 Java의 클래스 상속과 유사하다고 생각하면 됩니다.
Java Reactive Streams 운전자 운전자 에서 다양한 로깅 이벤트를 구성하기 위해 다음과 같은 로거 이름을 정의합니다.
org.mongodb.driver.authenticator: 인증org.mongodb.driver.client:MongoClient인스턴스와 관련된 이벤트org.mongodb.driver.cluster: MongoDB 배포 모니터링org.mongodb.driver.connection: 연결 및 연결 풀org.mongodb.driver.connection.tls: TLS/SSLorg.mongodb.driver.operation: 자동 재시도와 관련된 로깅을 포함한 작업org.mongodb.driver.protocol.command: MongoDB deployment로 전송된 명령과 MongoDB deployment에서 받은 응답org.mongodb.driver.uri: 연결 문자열 구문 분석org.mongodb.driver.management: JMX( Java 관리 확장 프로그램)
예시 - 이름
이 예시 특정 운전자 로거의 로그 수준을 변경하는 방법을 보여 줍니다. 이 예시 루트 로거를 OFF 로 설정하고 org.mongodb.driver.connection 로거를 INFO로 설정합니다. 이렇게 하면 애플리케이션 이 MongoDB 인스턴스 연결과 관련된 메시지만 로그 .
logback.xml 파일 에 다음 코드를 삽입합니다.
<configuration> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern> %-4relative [%thread] %-5level %logger{30} - %msg%n </pattern> </encoder> </appender> <logger name="org.mongodb.driver.connection" level="INFO" additivity="true"/> <root level="OFF"> <appender-ref ref="CONSOLE" /> </root> </configuration>
로거 구성이 성공했는지 테스트하려면 다음 코드를 실행하세요.
MongoClient mongoClient = MongoClients.create("<connection URI>"); MongoDatabase database = mongoClient.getDatabase("<database>"); MongoCollection<Document> collection = database.getCollection("<collection>"); Flux.from(collection.find()).blockFirst();
다음과 같은 내용이 출력되어야 합니다.
... 829 [cluster-rtt-ClusterId{value='<some value>', description='null'}-<your connection URI>] INFO org.mongodb.driver.connection - Opened connection [connectionId{localValue:2, serverValue:<your server value>}] to <your connection uri> 977 [main] INFO org.mongodb.driver.connection - Opened connection [connectionId{localValue:7, serverValue:<your server value>}] to <your connection uri>
Logback 구성에 대한 자세한 내용은 공식 Logback 구성 가이드를 참조하세요.
예시 - 설정
이 예시 Log4j 로거를 설정하다 방법을 보여줍니다.
팁
종속성 버전
빌드 도구에 따라 Maven 또는 Gradle 지침을 선택합니다.
Maven
pom.xml 파일 에 다음 종속성을 추가합니다.
<dependencies> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-slf4j-impl</artifactId> <version>2.17.1</version> </dependency> </dependencies>
Gradle
build.gradle 파일 에 다음 종속성을 추가합니다.
dependencies { implementation 'org.apache.logging.log4j:log4j-slf4j-impl:2.17.1' }
앞의 종속성을 포함했으면 다음 코드를 사용하여 오류를 로그 .
import org.slf4j.Logger; import org.slf4j.LoggerFactory; ... Logger logger = LoggerFactory.getLogger("MyApp"); logger.error("Logging an Error");
다음과 같은 내용이 출력되어야 합니다.
12:35:00.438 [main] ERROR <my package path> - Logging an Error
참고
기본값 로그 수준
Log4j 의 기본값 로그2 수준은 ERROR입니다. Java Reactive Streams 운전자 에서 표준 작업을 실행하면 구성 없이 Log j 에서 출력이 생성되지 않습니다. Log4j 로거의2 로그 수준을 변경하는 방법을 학습 이 페이지의42 로거 구성 섹션에 있는 예시 를 참조하세요.
Log4j2에 대한 자세한 내용은 Log4j2 매뉴얼을참조하세요.
로거 구성
로거를 구성하려면 SLF4J에 바인딩된 로깅 프레임워크의 구성 시스템을 사용해야 합니다.
다음 예시 로깅 프레임워크의 구성 시스템을 사용하여 로거의 로그 수준을 설정하다 방법을 보여줍니다.
로거의 로그 수준은 로거가 메시지를 출력하기 위한 메시지의 긴급성 정도의 하한을 지정합니다.
로거(Logger) 이름
로거는 로거 이름을 사용하여 다양한 로깅 이벤트를 구성하는 데 도움이 됩니다. 로거 이름은 계층 구조를 형성하는 문자열입니다. 이름 뒤에 "." 가 붙은 로거가 다른 로거 이름의 접두사인 경우 로거는 다른 로거의 조상입니다. 예시 들어 "grandparent" 는 "grandparent.parent"의 조상이고, "grandparent.parent.child"의 조상입니다.
구체적인 예시 들면 다음과 같습니다. 코드에서 로거 계층 구조는 다음과 같습니다.
import org.slf4j.Logger; import org.slf4j.LoggerFactory; ... Logger logger_parent = LoggerFactory.getLogger("parent"); Logger logger_child = LoggerFactory.getLogger("parent.child");
로거는 기존 로거의 속성을 상속받으며 속성을 자체적으로 정의할 수 있습니다. 이는 Java의 클래스 상속과 유사하다고 생각하면 됩니다.
Java Reactive Streams 운전자 운전자 에서 다양한 로깅 이벤트를 구성하기 위해 다음과 같은 로거 이름을 정의합니다.
org.mongodb.driver.authenticator: 인증org.mongodb.driver.client:MongoClient인스턴스와 관련된 이벤트org.mongodb.driver.cluster: MongoDB 배포 모니터링org.mongodb.driver.connection: 연결 및 연결 풀org.mongodb.driver.connection.tls: TLS/SSLorg.mongodb.driver.operation: 자동 재시도와 관련된 로깅을 포함한 작업org.mongodb.driver.protocol.command: MongoDB deployment로 전송된 명령과 MongoDB deployment에서 받은 응답org.mongodb.driver.uri: 연결 문자열 구문 분석org.mongodb.driver.management: JMX( Java 관리 확장 프로그램)
예시 - 이름
이 예시 특정 운전자 로거의 로그 수준을 변경하는 방법을 보여 줍니다. 이 예시 루트 로거를 OFF 로 설정하고 org.mongodb.driver.connection 로거를 INFO로 설정합니다. 이렇게 하면 애플리케이션 이 MongoDB 인스턴스 연결과 관련된 메시지만 로그 .
log4j2.xml 파일 에 다음 코드를 삽입합니다.
<Configuration status="INFO"> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> </Console> </Appenders> <Loggers> <Logger name="org.mongodb.driver.connection" level="INFO"/> <Root level="OFF"> <AppenderRef ref="Console"/> </Root> </Loggers> </Configuration>
로거 구성이 성공했는지 테스트하려면 다음 코드를 실행하세요.
MongoClient mongoClient = MongoClients.create("<connection URI>"); MongoDatabase database = mongoClient.getDatabase("<database>"); MongoCollection<Document> collection = database.getCollection("<collection>"); Flux.from(collection.find()).blockFirst();
다음과 같은 내용이 출력되어야 합니다.
... 15:40:23.005 [cluster-ClusterId{value='<some value>', description='null'}-<your connection uri>] INFO org.mongodb.driver.connection - Opened connection [connectionId{localValue:3, serverValue:<your server value>}] to <your connection uri> 15:40:23.159 [main] INFO org.mongodb.driver.connection - Opened connection [connectionId{localValue:7, serverValue:<your server value>}] to <your connection uri>
추가 정보
Log4j2 구성에 대한 자세한 내용은 공식 Log4j2 구성 가이드참조하세요.
연결 설정
applyToLoggerSettings() 및 applicationName() 메서드를 사용하여 MongoClient 인스턴스에 로깅 설정을 적용할 수 있습니다.
다음 표에서는 로거 설정에 연결하여 로깅 동작을 수정할 수 있는 방법을 설명합니다.
메서드 | 설명 |
|---|---|
| 단일 로그 메시지의 최대 문서 길이(문자)를 설정합니다. 기본값: |
예시
이 예시 요청을 전송하는 애플리케이션 의 이름을 지정하고 단일 로그 메시지의 최대 문자 수가 5000 자임을 지정합니다.
MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder() .applyConnectionString( new ConnectionString("<connection URI>")) .applicationName("<application name>") .applyToLoggerSettings(builder -> builder.maxDocumentLength(5000)) .build()); Flux.from(mongoClient.listDatabaseNames()) .doOnNext(System.out::println) .blockLast();
다음과 같은 내용이 출력되어야 합니다.
01:20:38.782 [main] INFO org.mongodb.driver.client -- MongoClient with metadata {"application": {"name": "<application name>"}, ..., loggerSettings=LoggerSettings{maxDocumentLength=5000}, ... timeoutMS=null} ... 01:20:41.022 [main] DEBUG org.mongodb.driver.protocol.command -- Command "listDatabases" succeeded ... Command reply: {"databases": [...], ...} 01:20:41.024 [main] DEBUG org.mongodb.driver.connection -- Connection checked in: address=<address>, driver-generated ID=6 myDb sample_airbnb sample_analytics ...
추가 정보
이 섹션에 설명된 연결 설정에 대한 자세한 내용은 MongoClientSettings.Builder API 문서를 참조하세요.