web-dev-qa-db-ja.com

MongoDBのログを構成するJavaドライバ

MongoDB Javaドライバーが有用な(デバッグ用の)メッセージを出力するように、理想的には標準のロギングフレームワークの1つを使用して)構成できますか?主に、出力される各クエリを確認します。データの受信とその所要時間、およびエラーコード。

31
Thilo

MongoDBをロードする前に、いくつかのシステムプロパティを設定する必要がありますJavaドライバクラス:

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

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

その後、ドライバーは 標準Javaロギングフレームワーク を使用してメッセージをログに記録します。

残念ながら、Javaドライバコードからわかる限り、ロギングの粒度はそれほど細かいわけではありません。たとえば、特定のコレクションの操作を選択的にログに記録することはできません。

23
thkala

新しいバージョンのmongodbドライバー3.xでまだこの問題に直面している人はいますか?

log4j.propertiesでmongoドライバーパッケージのロガーを定義します。

log4j.logger.org.mongodb.driver=INFO

com.mongodborg.mongodbに変更されました。

20
AsSiDe

MongoDBのログレベルを設定する別の方法:

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

ドライバークラスを使用する前にこれを行う必要はありません。いつでもログレベルを設定/変更できます。

16
ericsoco

次のラインは私のために働きます、

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.
7
Hemant Thorat

Mongodbチームは1つのソリューションを提供します( 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);
0
Julien

3.11 beta2以降、これは私にとってはうまくいきました

import com.mongodb.diagnostics.logging.Loggers;

import Java.util.logging.Level;
import Java.util.logging.Logger;


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