Datastax 驱动程序日志级别
Datastax driver log level
我想更改 Datastax 驱动程序记录器的日志级别,但经过多次尝试我无法弄清楚...
这是我使用的class:
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.Metadata;
import com.datastax.driver.core.Session;
import com.datastax.driver.mapping.MappingManager;
public class CassandraSession {
/**
* CassandraSession singleton
*/
private static CassandraSession INSTANCE = null;
/**
* The Cassandra Cluster
*/
private static Cluster cluster;
/**
* The Cassandra Session
*/
private static Session session;
/**
* MappingManager is used to create Cassandra mappers
*/
private static MappingManager manager;
/**
* LOGGER
*/
private static final Logger LOGGER = Logger.getLogger(CassandraSession.class);
/**
* Keyspace Name
*/
private static final String KEYSPACE = "MY_KEYSPACE";
/**
* CassandraSession
*/
private CassandraSession() {
initialize();
}
/**
* This method initializes the connection with the Cassandra Database
*/
private void initialize() {
cluster = Cluster.builder().withClusterName("TestCluster").addContactPoints("127.0.0.1").withPort(9042).build();
final Metadata metadata = cluster.getMetadata();
LOGGER.info("Connected to cluster: " + metadata.getClusterName());
}
/**
* Get the instance of the singleton CassandraSession
*
* @return
*/
public static synchronized CassandraSession getInstance() {
if (INSTANCE == null) {
INSTANCE = new CassandraSession();
}
return INSTANCE;
}
/**
* Get the Cassandra Session
*
* @return
*/
public Session getSession() {
if (session == null) {
session = cluster.connect(KEYSPACE);
}
return session;
}
/**
* Get the Cassandra MappingManager
*
* @return
*/
public MappingManager getManager() {
if (manager == null) {
manager = new MappingManager(session);
}
return manager;
}
}
我尝试将 log4j.properties 文件放入 src/main/resources,以编程方式更改日志级别,但没有任何变化。我仍然得到以下痕迹:
11:39:48.762 [http-bio-8080-exec-6] DEBUG c.d.driver.core.SystemProperties - com.datastax.driver.NEW_NODE_DELAY_SECONDS is undefined, using default value 1
11:39:48.768 [http-bio-8080-exec-6] DEBUG c.d.driver.core.SystemProperties - com.datastax.driver.NON_BLOCKING_EXECUTOR_SIZE is undefined, using default value 8
11:39:48.770 [http-bio-8080-exec-6] DEBUG c.d.driver.core.SystemProperties - com.datastax.driver.NOTIF_LOCK_TIMEOUT_SECONDS is undefined, using default value 60
11:39:48.812 [http-bio-8080-exec-6] DEBUG com.datastax.driver.core.Cluster - Starting new cluster with contact points [/127.0.0.1:9042]
11:39:48.827 [http-bio-8080-exec-6] DEBUG i.n.u.i.l.InternalLoggerFactory - Using SLF4J as the default logging framework
11:39:48.924 [http-bio-8080-exec-6] DEBUG i.n.util.internal.PlatformDependent0 - java.nio.Buffer.address: available
11:39:48.924 [http-bio-8080-exec-6] DEBUG i.n.util.internal.PlatformDependent0 - sun.misc.Unsafe.theUnsafe: available
11:39:48.924 [http-bio-8080-exec-6] DEBUG i.n.util.internal.PlatformDependent0 - sun.misc.Unsafe.copyMemory: available
11:39:48.925 [http-bio-8080-exec-6] DEBUG i.n.util.internal.PlatformDependent0 - java.nio.Bits.unaligned: true
11:39:48.926 [http-bio-8080-exec-6] DEBUG i.n.util.internal.PlatformDependent - Platform: Windows
11:39:48.926 [http-bio-8080-exec-6] DEBUG i.n.util.internal.PlatformDependent - Java version: 8
11:39:48.926 [http-bio-8080-exec-6] DEBUG i.n.util.internal.PlatformDependent - -Dio.netty.noUnsafe: false
11:39:48.926 [http-bio-8080-exec-6] DEBUG i.n.util.internal.PlatformDependent - sun.misc.Unsafe: available
11:39:48.927 [http-bio-8080-exec-6] DEBUG i.n.util.internal.PlatformDependent - -Dio.netty.noJavassist: false
11:39:48.929 [http-bio-8080-exec-6] DEBUG i.n.util.internal.PlatformDependent - Javassist: unavailable
我从这些痕迹中可以看出,sl4j 被用作默认日志记录框架。那么我如何告诉 Datastax 的驱动程序使用我的记录器(其属性由我的服务器定义)。
使用的服务器:Apache TomEE Plume 1.7.2
Datastax 驱动程序版本:2.1.9
卡桑德拉版本:2.2.1
谢谢。
SLF4J 是一个外观,它会根据运行时类路径中存在的绑定来选择一个日志记录框架。既然你提到了 Log4j,你可能想要这样的东西:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.12</version>
</dependency>
有关登录驱动程序的更多信息,请参阅this page。
感谢您的回答 Olivier,但是这种依赖关系已经在我的 pom.xml 中声明(我在提问之前看到了您链接的页面)。
不过没关系,我找到了解决方案。实际上问题是关于slf4j绑定之间的冲突,我在TomEE的日志中看到了它。
我的 pom.xml 中有这个绑定:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.12</version>
</dependency>
此库中的另一个绑定:
<dependency>
<groupId>org.apache.cassandra</groupId>
<artifactId>cassandra-all</artifactId>
<version>2.2.1</version>
</dependency>
关于"logback-classic.jar"
那么解决方法就是排除它:
<dependency>
<groupId>org.apache.cassandra</groupId>
<artifactId>cassandra-all</artifactId>
<version>2.2.1</version>
<exclusions>
<exclusion>
<artifactId>logback-classic</artifactId>
<groupId>ch.qos.logback</groupId>
</exclusion>
</exclusions>
</dependency>
谢谢。
我只是用一个基于 Datastax Getting Started with Apache Cassandra and Java (Part I) 的简单命令行应用程序解决了这个问题。经过大量搜索和试验,我发现对我来说解决方案是创建一个几乎为空的 logback.xml
文件,其中包含以下内容:
<configuration />
我想更改 Datastax 驱动程序记录器的日志级别,但经过多次尝试我无法弄清楚...
这是我使用的class:
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.Metadata;
import com.datastax.driver.core.Session;
import com.datastax.driver.mapping.MappingManager;
public class CassandraSession {
/**
* CassandraSession singleton
*/
private static CassandraSession INSTANCE = null;
/**
* The Cassandra Cluster
*/
private static Cluster cluster;
/**
* The Cassandra Session
*/
private static Session session;
/**
* MappingManager is used to create Cassandra mappers
*/
private static MappingManager manager;
/**
* LOGGER
*/
private static final Logger LOGGER = Logger.getLogger(CassandraSession.class);
/**
* Keyspace Name
*/
private static final String KEYSPACE = "MY_KEYSPACE";
/**
* CassandraSession
*/
private CassandraSession() {
initialize();
}
/**
* This method initializes the connection with the Cassandra Database
*/
private void initialize() {
cluster = Cluster.builder().withClusterName("TestCluster").addContactPoints("127.0.0.1").withPort(9042).build();
final Metadata metadata = cluster.getMetadata();
LOGGER.info("Connected to cluster: " + metadata.getClusterName());
}
/**
* Get the instance of the singleton CassandraSession
*
* @return
*/
public static synchronized CassandraSession getInstance() {
if (INSTANCE == null) {
INSTANCE = new CassandraSession();
}
return INSTANCE;
}
/**
* Get the Cassandra Session
*
* @return
*/
public Session getSession() {
if (session == null) {
session = cluster.connect(KEYSPACE);
}
return session;
}
/**
* Get the Cassandra MappingManager
*
* @return
*/
public MappingManager getManager() {
if (manager == null) {
manager = new MappingManager(session);
}
return manager;
}
}
我尝试将 log4j.properties 文件放入 src/main/resources,以编程方式更改日志级别,但没有任何变化。我仍然得到以下痕迹:
11:39:48.762 [http-bio-8080-exec-6] DEBUG c.d.driver.core.SystemProperties - com.datastax.driver.NEW_NODE_DELAY_SECONDS is undefined, using default value 1
11:39:48.768 [http-bio-8080-exec-6] DEBUG c.d.driver.core.SystemProperties - com.datastax.driver.NON_BLOCKING_EXECUTOR_SIZE is undefined, using default value 8
11:39:48.770 [http-bio-8080-exec-6] DEBUG c.d.driver.core.SystemProperties - com.datastax.driver.NOTIF_LOCK_TIMEOUT_SECONDS is undefined, using default value 60
11:39:48.812 [http-bio-8080-exec-6] DEBUG com.datastax.driver.core.Cluster - Starting new cluster with contact points [/127.0.0.1:9042]
11:39:48.827 [http-bio-8080-exec-6] DEBUG i.n.u.i.l.InternalLoggerFactory - Using SLF4J as the default logging framework
11:39:48.924 [http-bio-8080-exec-6] DEBUG i.n.util.internal.PlatformDependent0 - java.nio.Buffer.address: available
11:39:48.924 [http-bio-8080-exec-6] DEBUG i.n.util.internal.PlatformDependent0 - sun.misc.Unsafe.theUnsafe: available
11:39:48.924 [http-bio-8080-exec-6] DEBUG i.n.util.internal.PlatformDependent0 - sun.misc.Unsafe.copyMemory: available
11:39:48.925 [http-bio-8080-exec-6] DEBUG i.n.util.internal.PlatformDependent0 - java.nio.Bits.unaligned: true
11:39:48.926 [http-bio-8080-exec-6] DEBUG i.n.util.internal.PlatformDependent - Platform: Windows
11:39:48.926 [http-bio-8080-exec-6] DEBUG i.n.util.internal.PlatformDependent - Java version: 8
11:39:48.926 [http-bio-8080-exec-6] DEBUG i.n.util.internal.PlatformDependent - -Dio.netty.noUnsafe: false
11:39:48.926 [http-bio-8080-exec-6] DEBUG i.n.util.internal.PlatformDependent - sun.misc.Unsafe: available
11:39:48.927 [http-bio-8080-exec-6] DEBUG i.n.util.internal.PlatformDependent - -Dio.netty.noJavassist: false
11:39:48.929 [http-bio-8080-exec-6] DEBUG i.n.util.internal.PlatformDependent - Javassist: unavailable
我从这些痕迹中可以看出,sl4j 被用作默认日志记录框架。那么我如何告诉 Datastax 的驱动程序使用我的记录器(其属性由我的服务器定义)。
使用的服务器:Apache TomEE Plume 1.7.2
Datastax 驱动程序版本:2.1.9
卡桑德拉版本:2.2.1
谢谢。
SLF4J 是一个外观,它会根据运行时类路径中存在的绑定来选择一个日志记录框架。既然你提到了 Log4j,你可能想要这样的东西:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.12</version>
</dependency>
有关登录驱动程序的更多信息,请参阅this page。
感谢您的回答 Olivier,但是这种依赖关系已经在我的 pom.xml 中声明(我在提问之前看到了您链接的页面)。
不过没关系,我找到了解决方案。实际上问题是关于slf4j绑定之间的冲突,我在TomEE的日志中看到了它。
我的 pom.xml 中有这个绑定:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.12</version>
</dependency>
此库中的另一个绑定:
<dependency>
<groupId>org.apache.cassandra</groupId>
<artifactId>cassandra-all</artifactId>
<version>2.2.1</version>
</dependency>
关于"logback-classic.jar"
那么解决方法就是排除它:
<dependency>
<groupId>org.apache.cassandra</groupId>
<artifactId>cassandra-all</artifactId>
<version>2.2.1</version>
<exclusions>
<exclusion>
<artifactId>logback-classic</artifactId>
<groupId>ch.qos.logback</groupId>
</exclusion>
</exclusions>
</dependency>
谢谢。
我只是用一个基于 Datastax Getting Started with Apache Cassandra and Java (Part I) 的简单命令行应用程序解决了这个问题。经过大量搜索和试验,我发现对我来说解决方案是创建一个几乎为空的 logback.xml
文件,其中包含以下内容:
<configuration />