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