programing

MongoDB Java 드라이버에 대한 로깅 구성

jooyons 2023. 7. 9. 11:05
반응형

MongoDB Java 드라이버에 대한 로깅 구성

MongoDB Java 드라이버가 디버깅에 유용한 메시지를 출력하도록 구성할 수 있습니까? 이상적으로는 표준 로깅 프레임워크 중 하나를 사용합니다.저는 주로 나가는 각 쿼리, 수신된 데이터의 양, 시간 및 오류 코드를 확인하는 데 관심이 있습니다.

MongoDB Java 드라이버 클래스를 로드하기 전에 몇 가지 시스템 속성을 설정해야 합니다.

// Enable MongoDB logging in general
System.setProperty("DEBUG.MONGO", "true");

// Enable DB operation tracing
System.setProperty("DB.TRACE", "true");

이렇게 하면 드라이버는 표준 Java 로깅 프레임워크를 사용하여 메시지를 기록합니다.

유감스럽게도 Java 드라이버 코드를 통해 알 수 있는 한 로깅 세분성은 그다지 좋지 않습니다. 예를 들어 특정 컬렉션에 대한 작업을 선택적으로 로깅할 수 없습니다.

새로운 버전의 mongodb 드라이버 3.x에서 여전히 이 문제에 직면한 사람이 있습니까?

log4j.properties에서 mongo 드라이버 패키지에 대한 로거 정의

log4j.logger.org.mongodb.driver=INFO

com.mongodb가 org.mongodb로 변경되었습니다.

MongoDB의 로그 수준을 설정하는 또 다른 방법은 다음과 같습니다.

import java.util.logging.Logger;
Logger mongoLogger = Logger.getLogger( "com.mongodb" );
mongoLogger.setLevel(Level.SEVERE); // e.g. or Log.WARNING, etc.

드라이버 클래스를 사용하기 전에 이 작업을 수행할 필요가 없으며 언제든지 로그 수준을 설정/변경할 수 있습니다.

다음 대사가 제게 도움이 됩니다.

import java.util.logging.Logger;
import java.util.logging.Level;

Logger mongoLogger = Logger.getLogger( "org.mongodb.driver" );
mongoLogger.setLevel(Level.SEVERE); // e.g. or Log.WARNING, etc.

3.6 MongoDB Java 드라이버 이상으로 모든 쿼리를 기록하려면:

  1. slf4j를 사용하고 있는지 확인합니다.

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.29</version>
    </dependency>
    

    또는 log4j2를 사용하는 경우

    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-slf4j-impl</artifactId>
        <version>2.13.0</version>
    </dependency>
    
  2. 다음에 대한 로깅 수준 설정org.mongodb.driver로.DEBUG

    따라서 log4j2의 경우 xml 구성 파일에 이와 같은 내용을 추가해야 합니다.

    <logger name="org.mongodb.driver" level="DEBUG"></logger>
    

다른 답변에서 제안한 대로 로그 수준을 INFO 또는 SEVERSE 수준으로 설정하는 것은 저에게 효과가 없었습니다.MongoDB 사양에 따르면 slf4j가 없을 경우

드라이버가 JUL(java.util.logging)로 폴백됩니다.

대부분의 다른 답변이 사용하는 것이므로 다른 로그 수준을 사용할 수도 있습니다(그렇다고는 상상할 수 없지만).

3.11 베타2 기준으로 이것은 저에게 효과가 있었습니다.

import com.mongodb.diagnostics.logging.Loggers;

import java.util.logging.Level;
import java.util.logging.Logger;


Logger.getLogger(Loggers.PREFIX).setLevel(Level.SEVERE);

Mongodb 팀은 하나의 해결책을 제공합니다(https://mongodb.github.io/mongo-java-driver/3.11/driver/reference/monitoring/) .

구현 가능ConnectionPoolListener그리고 우리가 만들 때 넣어요.MongoClient.

예(log4j 포함):

public class ConnectionPoolListenerMongoDb implements ConnectionPoolListener {
private static final Logger logger = Logger.getLogger(StatisticsDaoImpl.class);

@Override
public void connectionPoolOpened(ConnectionPoolOpenedEvent connectionPoolOpenedEvent) {
    logger.info(connectionPoolOpenedEvent.toString());
}

@Override
public void connectionPoolClosed(ConnectionPoolClosedEvent connectionPoolClosedEvent) {
    logger.info(connectionPoolClosedEvent.toString());
}

@Override
public void connectionCheckedOut(ConnectionCheckedOutEvent connectionCheckedOutEvent) {
    logger.info(connectionCheckedOutEvent.toString());
}

@Override
public void connectionCheckedIn(ConnectionCheckedInEvent connectionCheckedInEvent) {
    logger.info(connectionCheckedInEvent.toString());
}

@Override
public void waitQueueEntered(ConnectionPoolWaitQueueEnteredEvent connectionPoolWaitQueueEnteredEvent) {
    logger.info(connectionPoolWaitQueueEnteredEvent.toString());
}

@Override
public void waitQueueExited(ConnectionPoolWaitQueueExitedEvent connectionPoolWaitQueueExitedEvent) {
    logger.info(connectionPoolWaitQueueExitedEvent.toString());
}

@Override
public void connectionAdded(ConnectionAddedEvent connectionAddedEvent) {
    logger.info(connectionAddedEvent.toString());
}

@Override
public void connectionRemoved(ConnectionRemovedEvent connectionRemovedEvent) {
    logger.info(connectionRemovedEvent.toString());
}
}

설정:

    private MongoClientSettings getMongoClientSettings() throws IOException {
    return MongoClientSettings.builder()
                    .applyToConnectionPoolSettings(new Block<ConnectionPoolSettings.Builder>() {
                        @Override
                        public void apply(ConnectionPoolSettings.Builder builder) {
                            builder.addConnectionPoolListener(new ConnectionPoolListenerMongoDb());
                        }
                    })
                    .applyConnectionString(new ConnectionString(Settings.getMongoSettings()))
                    .build();
}

작성:

MongoClientSettings settings = getMongoClientSettings();
        mongoClient = MongoClients.create(settings);

언급URL : https://stackoverflow.com/questions/9545341/configure-logging-for-the-mongodb-java-driver

반응형