개요
이 가이드 에서는 MongoDB 스칼라 운전자 에서 로거를 설정하다 하고 구성하는 방법을 학습 수 있습니다.
이 가이드 운전자 에서 이벤트를 기록 방법을 보여 줍니다. 코드에서 운전자 의 활동에 대한 정보를 사용하는 방법을 학습 보려면 모니터링 가이드 참조하세요.
로거(Logger) 설정
이 섹션에서는 로거를 설정하다 하는 데 필요한 종속성을 설명하고 로거 설정 예시 를 제공합니다.
배경
MongoDB 스칼라 운전자 SLF4J(Simple Logging Facade For Java )를 사용합니다. SLF4J를 사용할 때 배포서버 시 로깅 프레임워크 지정할 수 있습니다. 스칼라 운전자 에서 로거 설정은 선택 사항입니다.
애플리케이션 시작하면 MongoDB 스칼라 운전자 클래스 경로에서 slf4j-api 아티팩트를 찾습니다. 운전자 slf4j-api 아티팩트를 찾을 수 없는 경우 다음 경고를 기록하고 모든 추가 로깅을 비활성화합니다.
WARNING: SLF4J not found on the classpath. Logging is disabled for the 'org.mongodb.driver' component
로거를 설정하다 하려면 프로젝트 에 다음 구성 요소를 포함해야 합니다.
slf4j-api아티팩트로깅 프레임워크
아티팩트를 로깅
slf4j-api프레임워크 에 연결하는 바인딩
다음 예시 slf4j-api 아티팩트를 선택한 로깅 프레임워크 에 바인딩하는 방법을 보여 줍니다.
로거 예제
Logback 또는 Log4j2 탭 선택하여 선택한 로깅 프레임워크 설정하다 하고 해당 코드 예제를 확인합니다.
Logback을 사용하려면 프로젝트의 build.sbt 파일 에 다음 줄을 추가합니다. 이러한 줄에는 slf4j-api 아티팩트, 로깅 프레임워크 및 바인딩이 포함됩니다.
libraryDependencies += "org.slf4j" % "slf4j-api" % "2.0.13" libraryDependencies += "ch.qos.logback" % "logback-classic" % "1.5.6"
Logback 설정 테스트하려면 프로젝트의 Main.scala 파일 에 다음 코드를 추가합니다. 이 코드는 MongoDB deployment 에 연결하여 문서 검색합니다. 코드를 추가한 후 sbt run를 사용하여 IDE가 아닌 터미널에서 애플리케이션 실행 .
val mongoClient = MongoClient("<connection string>") val database: MongoDatabase = mongoClient.getDatabase("<database>") val collection: MongoCollection[Document] = database.getCollection("<collection>") collection.find().first().printHeadResult()
... 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입니다. DEBUG 수준은 열린 연결, 운전자 MongoDB 와 주고받는 명령과 같은 문제 해결을 위한 자세한 진단 메시지를 기록합니다. Logback 로거의 로그 수준을 변경하는 방법을 학습 보려면 이 페이지의 로거 구성 섹션에 있는 예시 를 참조하세요.
Logback에 대한 자세한 내용은 Logback 매뉴얼을 참조하세요.
Log4j2를 사용하려면 프로젝트의 build.sbt 파일 에 다음 줄을 추가합니다. 이러한 줄에는 slf4j-api 아티팩트, 로깅 프레임워크 및 바인딩이 포함됩니다.
libraryDependencies += "org.slf4j" % "slf4j-api" % "2.0.13" libraryDependencies += "org.apache.logging.log4j" % "log4j-slf4j2-impl" % "2.24.3" libraryDependencies += "org.apache.logging.log4j" % "log4j-core" % "2.24.3"
Log4j2 설정 테스트하려면 프로젝트의 Main.scala 파일 에 다음 코드를 추가합니다. 이 코드는 오류 메시지를 기록합니다. 코드를 추가한 후 sbt run를 사용하여 IDE가 아닌 터미널에서 애플리케이션 실행 .
import org.slf4j.Logger import org.slf4j.LoggerFactory val 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입니다. 즉, MongoDB 스칼라 운전자 에서 표준 작업을 실행 로그 수준 구성 없이는 Log j 에서 출력이 생성되지 않습니다. Log j 로거의42 로그 수준을 변경하는 방법을 학습 이 페이지의42 로거 구성 섹션에 있는 예시 를 참조하세요.
Log4j2에 대한 자세한 내용은 Log4j2 매뉴얼을참조하세요.
SLF4J에 대한 자세한 내용은 SLF4J 문서를 참조하세요.
로거 구성
로거를 구성하려면 SLF4J에 바인딩한 로깅 프레임워크 의 구성 시스템을 사용해야 합니다.
구성 예제
로그 수준은 로거가 해당 메시지를 출력하기 위해 메시지의 긴급성을 지정합니다. 다음 예시 각 로깅 프레임워크의 구성 시스템을 사용하여 로그 수준을 INFO로 설정하다 방법을 보여줍니다.Logback 또는 Log4j2 탭 선택하여 각 접근 방식에 해당하는 코드를 확인합니다.
Logback은 클래스 경로에 있는 logback.xml 파일 에서 구성을 읽습니다. 이 파일 기본값 으로 존재하지 않으므로 생성해야 합니다. 클래스 경로에서 액세스할 수 있는 한 스칼라 프로젝트 의 어느 곳에나 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>
로거 구성이 성공적인 했는지 테스트하려면 IDE 대신 sbt run 명령을 사용하여 다음 코드를 실행 .
val mongoClient = MongoClient("<connection string>") val database: MongoDatabase = mongoClient.getDatabase("<database>") val collection: MongoCollection[Document] = database.getCollection("<collection>") collection.find().first().printHeadResult()
... 1317 [cluster-<your cluster id>-<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 매뉴얼을 참조하세요.
Log4j2는 클래스 경로의 log4j2.xml 파일 에서 구성을 읽습니다. 이 파일 기본값 으로 존재하지 않으므로 생성해야 합니다. 클래스 경로에서 액세스할 수 있는 한 스칼라 프로젝트 의 어느 곳에나 log4j2.xml를 배치할 수 있습니다.
Log4j2 프레임워크 가장 긴급한 것부터 가장 덜 긴급한 것까지 나열된 다음 로그 수준을 정의합니다.
치명적
오류
경고
정보
DEBUG
트레이스
ALL
각 로그 수준의 의미에 대해 자세히 학습 로그4j2 문서에서 사용자 지정 로그 수준을 참조하세요.
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>
로거 구성이 성공적인 했는지 테스트하려면 IDE 대신 sbt run 명령을 사용하여 다음 코드를 실행 .
val mongoClient = MongoClient("<connection string>") val database: MongoDatabase = mongoClient.getDatabase("<database>") val collection: MongoCollection[Document] = database.getCollection("<collection>") collection.find().first().printHeadResult()
... 10:14:57.633 [cluster-ClusterId{value=<your cluster id>, description='null'}-<your connection uri>] INFO org.mongodb.driver.cluster - Discovered replica set primary <your connection uri> 10:14:57.790 [main] INFO org.mongodb.driver.connection - Opened connection [connectionId{localValue:7, serverValue:<your server value>}] to <your connection uri>
Log4j 구성에 대한 자세한2 42 내용은 Log4j2 문서의 Log j 구성 가이드 참조하세요.
로거(Logger) 이름
로깅 프레임워크는 계층적 로거 이름을 사용하여 로깅 이벤트를 구성합니다. 이름 뒤에 가 붙은 로거가 다른 로거 이름의 접두사인 경우 로거는 다른 "." 로거의 조상입니다. 예시 를 들어 grandparent 로거는 grandparent.parent 로거의 조상인 grandparent.parent.child 로거의 조상입니다.
다음 코드는 parent 로거와 parent.child 로거를 생성하며, 여기서 parent 로거는 parent.child 로거의 조상입니다.
import org.slf4j.Logger import org.slf4j.LoggerFactory val loggerParent: Logger = LoggerFactory.getLogger("parent") val loggerChild: Logger = LoggerFactory.getLogger("parent.child")
로거 계층 구조는 스칼라 의 클래스 계층 구조와 유사합니다. 로거는 조상 로거의 속성을 상속받으며 자체적으로 정의할 수도 있습니다.
스칼라 운전자 에는 다음과 같은 기본값 로거 이름이 포함되어 있습니다.
org.mongodb.driver.authenticator: 인증org.mongodb.driver.client:MongoClient인스턴스org.mongodb.driver.cluster: MongoDB deployment 모니터링org.mongodb.driver.connection: 연결 및 연결 풀org.mongodb.driver.connection.tls: TLS/SSLorg.mongodb.driver.operation: 자동 재시도를 포함한 작업org.mongodb.driver.protocol: MongoDB deployment와 교환되는 명령 및 응답org.mongodb.driver.uri: 연결 문자열 구문 분석org.mongodb.driver.management: JMX(Java Management Extensions)
로거 이름 예시
다음 예시 루트 로거 구성을 OFF로 설정하다 하고 org.mongodb.driver.connection 로거 구성을 INFO로 설정하여 애플리케이션 이 MongoDB deployment 연결과 관련된 메시지만 기록하도록 하는 방법을 보여 줍니다.
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="INFO" additivity="true"/> <root level="OFF"> <appender-ref ref="CONSOLE" /> </root> </configuration>
로거 구성이 성공적인 했는지 테스트하려면 IDE 대신 sbt run 명령을 사용하여 다음 코드를 실행 .
val mongoClient = MongoClient("<connection string>") val database: MongoDatabase = mongoClient.getDatabase("<database>") val collection: MongoCollection[Document] = database.getCollection("<collection>") collection.find().first().printHeadResult()
... 829 [cluster-<your cluster id>-<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 구성 가이드를 참조하세요.
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>
로거 구성이 성공적인 했는지 테스트하려면 IDE 대신 sbt run 명령을 사용하여 다음 코드를 실행 .
val mongoClient = MongoClient("<connection string>") val database: MongoDatabase = mongoClient.getDatabase("<database>") val collection: MongoCollection[Document] = database.getCollection("<collection>") collection.find().first().printHeadResult()
... 15:40:23.005 [cluster-<your cluster id>-<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 자를 지정합니다. IDE 대신 sbt run 명령을 사용하여 예시 를 실행합니다.
val mongoClient = MongoClient( MongoClientSettings.builder() .applyConnectionString(ConnectionString("<your connection string>")) .applicationName("<application name>") .applyToLoggerSettings(builder => builder.maxDocumentLength(5000)) .build())
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 문서를 참조하세요.