如何禁用mongoDB java驱动日志记录?
我试图禁用mongo-java-driver-3.0.0
日志输出。
在加载mongo
驱动程序之前,我已尝试在应用程序的开头设置它们,但它没有帮助。
// Enable MongoDB logging in general System.setProperty("DEBUG.MONGO", "false"); // Enable DB operation tracing System.setProperty("DB.TRACE", "false");
我得到这种日志:
11:01:15.406 [pool-1-thread-1] DEBUG org.mongodb.driver.protocol.query - Sending query of namespace susudev.Players on connection [connectionId{localValue:2, serverValue:28}] to server localhost:27017 11:01:15.406 [pool-1-thread-1] DEBUG org.mongodb.driver.protocol.query - Query completed 11:01:25.174 [cluster-ClusterId{value='554dbecb1b554f11e86c3a69', description='null'}-localhost:27017] DEBUG org.mongodb.driver.cluster - Checking status of localhost:27017 11:01:25.177 [cluster-ClusterId{value='554dbecb1b554f11e86c3a69', description='null'}-localhost:27017] DEBUG org.mongodb.driver.cluster - Updating cluster description to {type=STANDALONE, servers=[{address=localhost:27017, type=STANDALONE, roundTripTime=0.6 ms, state=CONNECTED}]
所以我的控制台完全包含mongo日志,我无法读取任何内容。
要使这部分代码正常工作,您需要进行Logback 。 (如果是maven项目)
org.apache.logging.log4j log4j-api 2.9.0 ch.qos.logback logback-classic 1.2.3
然后,如果您只想禁用Mongo驱动程序日志记录,您应该执行以下操作:
LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory(); Logger rootLogger = loggerContext.getLogger("org.mongodb.driver"); rootLogger.setLevel(Level.OFF);
再次要清楚,以下是此代码的导入列表:
import ch.qos.logback.classic.Level; import ch.qos.logback.classic.LoggerContext; import org.slf4j.LoggerFactory;
此解决方案适用于mongo java驱动程序3.0.0和^。
编辑:这是一个水平设置为ERROR的单线程。
((LoggerContext) LoggerFactory.getILoggerFactory()).getLogger("org.mongodb.driver").setLevel(Level.ERROR);
所以这解决了这个问题:
import org.slf4j.LoggerFactory; import ch.qos.logback.classic.Level; import ch.qos.logback.classic.Logger; ... static Logger root = (Logger) LoggerFactory .getLogger(Logger.ROOT_LOGGER_NAME); static { root.setLevel(Level.INFO); }
如果要隐藏所有日志,可以将Level
设置为更高Level
。
如果需要动态方法,可以迭代记录器并设置它们的级别。 或者您可以手动设置级别。 这是mongo驱动程序记录器:
LogManager.getLogger("org.mongodb.driver.connection").setLevel(org.apache.log4j.Level.OFF); LogManager.getLogger("org.mongodb.driver.management").setLevel(org.apache.log4j.Level.OFF); LogManager.getLogger("org.mongodb.driver.cluster").setLevel(org.apache.log4j.Level.OFF); LogManager.getLogger("org.mongodb.driver.protocol.insert").setLevel(org.apache.log4j.Level.OFF); LogManager.getLogger("org.mongodb.driver.protocol.query").setLevel(org.apache.log4j.Level.OFF); LogManager.getLogger("org.mongodb.driver.protocol.update").setLevel(org.apache.log4j.Level.OFF);
如果您使用xml资源配置Logback,您可以通过添加以下内容轻松完成:
到你的配置。
使用以下导入
import java.util.logging.Logger;
在代码中使用以下内容。
Logger mongoLogger = Logger.getLogger(“com.mongodb”); mongoLogger.setLevel(Level.SEVERE);
对于仍然面临日志记录问题的人,您必须将org.mongodb.driver的日志级别设置为更高的值,如WARN或ERROR。 com.mongodb类不再使用了,即使它仍然写在日志中。
请参阅本文的最后一个答案: 配置MongoDB Java驱动程序的日志记录
我用它解决了,
import java.util.logging.Logger; import java.util.logging.Level; Logger mongoLogger = Logger.getLogger( "org.mongodb.driver" ); mongoLogger.setLevel(Level.SEVERE); // eg or Log.WARNING, etc.
要关闭所有记录器:
final LogManager lm = LogManager.getLogManager(); for( final Enumeration i = lm.getLoggerNames(); i.hasMoreElements(); ) { lm.getLogger( i.nextElement()).setLevel( Level.OFF ); }
在我的例子中, MongoDB driver 3.5.0
, SLF4j+Log4j12
,添加足够了:
log4j.logger.org.mongodb.driver=OFF
在我的Log4j .properties
配置文件中。