개요
이 가이드 에서는 코틀린 동기 (Kotlin Sync) 운전자 에서 로거를 설정하다 하고 구성하는 방법을 학습 수 있습니다.
이 가이드 운전자 에서 이벤트를 기록 방법을 보여 줍니다. 코드에서 운전자 의 활동에 대한 정보를 사용하는 방법을 학습 보려면 애플리케이션 이벤트 모니터링 가이드 참조하세요.
로거(Logger) 설정
Kotlin 동기화 드라이버는 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 프레임워크 가장 긴급한 것부터 가장 덜 긴급한 것까지 순서대로 다음 로그 수준을 정의합니다.
ERRORWARNINFODEBUGTRACE
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 프레임워크 가장 긴급한 것부터 가장 덜 긴급한 것까지 순서대로 다음과 같은 로그 수준을 정의합니다.
FATALERRORWARNINFODEBUGTRACEALL
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 매뉴얼의 로그 메시지 를 참조하세요.
이 가이드 에서 설명하는 로깅 프레임워크에 대한 자세한 내용은 다음 외부 문서를 참조하세요.