2015-12-02 123 views
3

我想改变Datastax驾驶记录仪的记录水平,但多次尝试后,我无法弄清楚......Datastax驱动程序日志级别

这是我使用的类:

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作为默认的日志framwork。那我该如何告诉Datastax的驱动程序来使用我的记录器(其属性是由我的服务器定义的)。

服务器使用:阿帕奇TomEE羽1.7.2

Datastax驱动程序版本:2.1.9

卡桑德拉版本:2.2.1

感谢。

回答

1

SLF4J是一个外观,它将根据运行时类路径中的哪个绑定选择一个日志框架。既然你提到的Log4j,你可能想是这样的:

<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-log4j12</artifactId> 
    <version>1.7.12</version> 
</dependency> 

约在驾驶记录的更多信息,请参见this page

2

感谢您的回答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> 

谢谢。