개요
이 가이드 에서는 코틀린 동기 (Kotlin Sync) 운전자 에서 로거를 설정하다 하고 구성하는 방법을 학습 수 있습니다.
이 가이드 운전자 에서 이벤트를 기록 방법을 보여 줍니다. 코드에서 운전자의 활동에 대한 정보를 사용하는 방법을 학습 보려면 애플리케이션 이벤트 모니터링 가이드를 참조하세요.
로거(Logger) 설정
코틀린 동기 (Kotlin Sync) 운전자 SLF4J(Simple Logging Facade For Java )를 사용하여 원하는 로깅 프레임워크 지정할 수 있습니다. SLF4J에 대한 자세한 내용은 SLF4J 문서를참조하세요.
로거 설정은 선택 사항입니다. 로거를 설정하다 하려면 프로젝트 에 다음을 포함해야 합니다.
클래스 경로의
slf4j-api
아티팩트로깅 프레임워크
slf4j-api
아티팩트를 로깅 프레임워크에 연결하는 바인딩
운전자 클래스 경로에서 slf4j-api
아티팩트를 찾을 수 없는 경우 운전자 다음 경고를 출력하고 모든 추가 로깅을 비활성화합니다.
WARNING: SLF4J not found on the classpath. Logging is disabled for the 'org.mongodb.driver' component
로거 설정 예제
다음 예시 로거를 설정하다 방법을 보여줍니다. Logback 또는 Log4j2 탭 선택하여 해당 구문을 확인합니다.
프로젝트의 종속성 관리 도구로 Logback을 설정하다 방법을 학습 Maven 또는 Gradle 탭 선택합니다.
pom.xml
파일에 다음 종속성을 추가합니다.
<dependencies> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.11</version> </dependency> </dependencies>
build.gradle
파일에 다음 종속성을 추가합니다.
dependencies { implementation 'ch.qos.logback:logback-classic:1.2.11' }
앞의 종속성을 포함했으면 MongoDB 인스턴스에 연결하고 다음 코드를 사용하여 문서를 검색합니다.
val mongoClient = MongoClient.create(<connection uri>); val database = mongoClient.getDatabase(<database>); val collection = database.getCollection<Document>(<collection>); collection.find().first();
앞의 코드는 다음과 유사한 메시지를 출력합니다.
... 12:14:55.833 [main] DEBUG org.mongodb.driver.connection - Checkout started for connection to <MongoDB hostname> 12:14:55.834 [main] DEBUG org.mongodb.driver.connection - Connection created: address=<MongoDB hostname>, driver-generated ID=3 12:14:55.836 [main] DEBUG org.mongodb.driver.connection - Connection ready: address=<MongoDB hostname>, driver-generated ID=3, established in=4 ms 12:14:55.843 [main] DEBUG org.mongodb.driver.connection - Connection checked out: address=<MongoDB hostname>, driver-generated ID=3, duration=9 ms
참고
기본값 로그 수준
Logback의 기본값 로그 수준은 DEBUG입니다. Logback 로거의 로그 수준을 변경하는 방법을 학습하려면 이 페이지의 로그 수준 구성 섹션을 참조하세요.
Maven 또는 Gradle 탭 선택하여 프로젝트의 종속성 관리 도구로 로그4j2 설정하다 방법을 학습 .
pom.xml
파일에 다음 종속성을 추가합니다.
<dependencies> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-slf4j-impl</artifactId> <version>2.17.1</version> </dependency> </dependencies>
build.gradle
파일에 다음 종속성을 추가합니다.
dependencies { implementation 'org.apache.logging.log4j:log4j-slf4j-impl:2.17.1' }
앞의 종속성을 포함했으면 다음 코드를 사용하여 오류를 로그 .
import org.slf4j.Logger; import org.slf4j.LoggerFactory; ... val logger = LoggerFactory.getLogger("MyApp"); logger.error("Logging an Error");
앞의 코드는 다음과 유사한 메시지를 출력합니다.
12:35:00.438 [main] ERROR <my package path> - Logging an Error
참고
기본값 로그 수준
Log4J2 의 기본값 로그 수준은 ERROR입니다. 즉, 코틀린 동기 (Kotlin Sync) 운전자 에서 표준 작업을 실행 구성 없이는 Log4J2 출력이 생성되지 않습니다. 로그4J2 로거의 로그 수준을 변경하는 방법을 학습하려면 이 페이지의 로그 수준 구성 섹션을 참조하세요.
로그 수준 구성
SLF4J에 바인딩된 로깅 프레임워크 의 구성 시스템을 사용하여 로거의 로그 수준을 구성할 수 있습니다. 로그 수준은 로거가 해당 메시지를 출력하기 위해 메시지가 얼마나 긴급해야 하는지에 대한 하한을 지정합니다.
로거 구성 예시
다음 예시 로그 수준을 INFO
으로 구성합니다. Logback 또는 Log4j2 탭 선택하여 해당 구문을 확인합니다.
logback.xml
파일 에 Logback 구성을 지정합니다. 클래스 경로에서 이 파일 액세스 할 수 있어야 합니다.
Logback 프레임워크 가장 긴급한 것부터 가장 덜 긴급한 것까지 순서대로 다음 로그 수준을 정의합니다.
ERROR
WARN
INFO
DEBUG
TRACE
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>
로거 구성이 성공했는지 테스트하려면 다음 코드를 실행하세요.
val mongoClient = MongoClient.create(<connection uri>); val database = mongoClient.getDatabase(<database>); val collection = database.getCollection<Document>(<collection>); collection.find().first();
이 코드는 다음과 유사한 출력을 생성합니다.
... 317 [main] INFO org.mongodb.driver.client - MongoClient with metadata {"driver": {"name": "<driver-name>", "version": "<driver-version>"}, "os": {"type": "<os-type>", "name": "<os-name>", "architecture": "<architecture>", "version": "<os-version>"}, "platform": "<platform-info>"} created with settings <MongoClientSettings> 345 [cluster-ClusterId{value='<cluster-id>', description='null'}-<MongoDB hostname>] INFO org.mongodb.driver.cluster - Monitor thread successfully connected to server with description ServerDescription{address=<MongoDB hostname>, type=<server-type>, cryptd=false, state=CONNECTED, ok=true, minWireVersion=0, maxWireVersion=<max-wire-version>, maxDocumentSize=16777216, logicalSessionTimeoutMinutes=30, roundTripTimeNanos=<round-trip-nanos>, minRoundTripTimeNanos=<min-round-trip-nanos}
log4j2.xml
라는 파일 에 Log4j2 구성을 지정합니다. 클래스 경로에서 이 파일 액세스 할 수 있어야 합니다.
Log4j2 프레임워크 가장 긴급한 것부터 가장 덜 긴급한 것까지 순서대로 다음과 같은 로그 수준을 정의합니다.
FATAL
ERROR
WARN
INFO
DEBUG
TRACE
ALL
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> <Root level="INFO"> <AppenderRef ref="Console"/> </Root> </Loggers> </Configuration>
로거 구성이 성공했는지 테스트하려면 다음 코드를 실행하세요.
val mongoClient = MongoClient.create(<connection uri>); val database = mongoClient.getDatabase(<database>); val collection = database.getCollection<Document>(<collection>); collection.find().first();
이 코드는 다음과 유사한 출력을 생성합니다.
... 21:19:25.696 [main] INFO org.mongodb.driver.client - MongoClient with metadata {"driver": {"name": "<driver-name>", "version": "<driver-version>"}, "os": {"type": "<os-type>", "name": "<os-name>", "architecture": "<architecture>", "version": "<os-version>"}, "platform": "<platform-info>"} created with settings <MongoClientSettings> 21:19:25.710 [cluster-ClusterId{value='<cluster-id>', description='null'}-<MongoDB hostname>] INFO org.mongodb.driver.cluster - Monitor thread successfully connected to server with description ServerDescription{address=<MongoDB hostname>, type=<server-type>, cryptd=false, state=CONNECTED, ok=true, minWireVersion=0, maxWireVersion=<max-wire-version>, maxDocumentSize=16777216, logicalSessionTimeoutMinutes=30, roundTripTimeNanos=<round-trip-nanos>, minRoundTripTimeNanos=<min-round-trip-nanos}
로거(Logger) 이름
로거는 로거 이름을 사용하여 다양한 로깅 이벤트를 구성하는 데 도움이 됩니다. 로거 이름은 계층 구조를 형성하는 문자열입니다. 이름 뒤에 "."
가 붙은 로거가 다른 로거 이름의 접두사인 경우 로거는 다른 로거의 조상입니다. 예시 들어, "grandparent"
는 "grandparent.parent"
의 조상이고, "grandparent.parent.child"
의 조상입니다. 로거는 조상 로거의 속성을 상속받으며 자체 속성을 정의할 수도 있습니다.
코틀린 동기 (Kotlin Sync) 운전자 다양한 로깅 이벤트를 구성하기 위해 다음과 같은 로거 이름을 정의합니다.
로거 이름 | 설명 |
---|---|
| 인증 이벤트 기록 |
| MongoClient 인스턴스와 관련된 이벤트를 기록합니다. |
| MongoDB 배포 모니터링 과 관련된 이벤트를 기록합니다. |
| 연결 및 연결 풀을 기록합니다. |
| TLS 이벤트 기록 |
| 자동 재시도와 관련된 로깅을 포함한 작업 로그 |
| MongoDB deployment로 전송된 명령과 MongoDB deployment에서 받은 응답을 기록합니다. |
| 연결 문자열 분석 이벤트를 기록합니다. |
| JMX( Java 관리 확장 프로그램) 이벤트를 기록합니다. |
로거 이름 예시
다음 예시 루트 로거를 비활성화하고 org.mongodb.driver.connection
로거의 로그 수준을 DEBUG
로 설정합니다. 이렇게 하면 운전자 DEBUG
수준 이상의 연결 및 연결 풀과 관련된 메시지만 로그 . Logback 또는 Log4j2 탭 선택하여 해당 구문을 확인합니다.
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="DEBUG" additivity="true"/> <root level="OFF"> <appender-ref ref="CONSOLE" /> </root> </configuration>
로거 구성이 성공적으로 이루어졌는지 테스트하려면 다음 코드를 실행합니다.
val mongoClient = MongoClient.create(<connection uri>); val database = mongoClient.getDatabase(<database>); val collection = database.getCollection<Document>(<collection>); collection.find().first();
이 코드는 다음과 유사한 출력을 생성합니다.
... 255 [main] DEBUG org.mongodb.driver.connection - Connection pool created for <MongoDB hostname> using options <connection-pool-options> 301 [cluster-ClusterId{value='<cluster-id>', description='null'}-<MongoDB hostname>] DEBUG org.mongodb.driver.connection - Connection pool ready for <MongoDB hostname> 321 [main] DEBUG org.mongodb.driver.connection - Checkout started for connection to <MongoDB hostname> 323 [main] DEBUG org.mongodb.driver.connection - Connection created: address=<MongoDB hostname>, driver-generated ID=3 335 [main] DEBUG org.mongodb.driver.connection - Connection ready: address=<MongoDB hostname>, driver-generated ID=3, established in=<connect-duration> ms 336 [main] DEBUG org.mongodb.driver.connection - Connection checked out: address=<MongoDB hostname>, driver-generated ID=3, duration=<checkout-duration> ms 363 [main] DEBUG org.mongodb.driver.connection - Connection checked in: address=<MongoDB hostname>, driver-generated ID=3
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="DEBUG"/> <Root level="OFF"> <AppenderRef ref="Console"/> </Root> </Loggers> </Configuration>
로거 구성이 성공적으로 이루어졌는지 테스트하려면 다음 코드를 실행합니다.
val mongoClient = MongoClient.create(<connection uri>); val database = mongoClient.getDatabase(<database>); val collection = database.getCollection<Document>(<collection>); collection.find().first();
이 코드는 다음과 유사한 출력을 생성합니다.
... 21:27:17.035 [main] DEBUG org.mongodb.driver.connection - Connection pool created for <MongoDB hostname> using options <connection-pool-options> 21:27:17.058 [cluster-ClusterId{value='<cluster-id>', description='null'}-<MongoDB hostname>] DEBUG org.mongodb.driver.connection - Connection pool ready for <MongoDB hostname> 21:27:17.064 [main] DEBUG org.mongodb.driver.connection - Checkout started for connection to <MongoDB hostname> 21:27:17.069 [main] DEBUG org.mongodb.driver.connection - Connection created: address=<MongoDB hostname>, driver-generated ID=3 21:27:17.075 [main] DEBUG org.mongodb.driver.connection - Connection ready: address=<MongoDB hostname>, driver-generated ID=3, established in=<connect-duration> ms 21:27:17.075 [main] DEBUG org.mongodb.driver.connection - Connection checked out: address=<MongoDB hostname>, driver-generated ID=3, duration=<checkout-duration> ms 21:27:17.086 [main] DEBUG org.mongodb.driver.connection - Connection checked in: address=<MongoDB hostname>, driver-generated ID=3
추가 정보
MongoDB의 로깅 기능에 대해 자세히 학습하려면 MongoDB Server 매뉴얼의 로그 메시지 를 참조하세요.
이 가이드 에서 설명하는 로깅 프레임워크에 대한 자세한 내용은 다음 외부 문서를 참조하세요.