AI 에이전트의 경우: 문서 인덱스는 https://www.mongodb.com/ko-kr/docs/llms.txt에서 사용할 수 있으며, 모든 페이지의 마크다운 버전은 어떤 URL 경로에 .md를 추가하여 사용할 수 있습니다.
Docs Menu

로깅

이 가이드 에서는 MongoDB 스칼라 운전자 에서 로거를 설정하다 하고 구성하는 방법을 학습 수 있습니다.

이 가이드 운전자 에서 이벤트를 기록 방법을 보여 줍니다. 코드에서 운전자 의 활동에 대한 정보를 사용하는 방법을 학습 보려면 모니터링 가이드 참조하세요.

이 섹션에서는 로거를 설정하다 하는 데 필요한 종속성을 설명하고 로거 설정 예시 를 제공합니다.

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 파일 다음과 같이 설정합니다.

<?xml version="1.0" encoding="UTF-8"?>
<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 구성 가이드 참조하세요.

로깅 프레임워크는 계층적 로거 이름을 사용하여 로깅 이벤트를 구성합니다. 이름 뒤에 가 붙은 로거가 다른 로거 이름의 접두사인 경우 로거는 다른 "." 로거의 조상입니다. 예시 를 들어 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/SSL

  • org.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 파일 에 다음 코드를 삽입합니다.

<?xml version="1.0" encoding="UTF-8"?>
<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 인스턴스에 로깅 설정을 적용할 수 있습니다.

다음 표에서는 로거 설정에 연결하여 로깅 동작을 수정할 수 있는 방법을 설명합니다.

메서드
설명

maxDocumentLength()

단일 로그 메시지의 최대 문서 길이(문자)를 설정합니다.

기본값: 1000

다음 예시 요청을 전송하는 애플리케이션 의 이름을 지정하고 최대 로그 메시지 길이로 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 문서를 참조하세요.