Spring 2.7.0迁移后Cassandra一致性级别查询级打印方案咨询
解决方案:在Spring 2.7.0 + DataStax Cassandra Driver中打印查询一致性级别
DataStax Cassandra Driver 4.x(Spring 2.7.0默认适配的版本)的日志体系和3.10.x差异较大,仅开启根日志TRACE无法精准捕获请求的一致性级别信息,以下是几种可行方案:
1. 针对性配置Driver请求日志包级别
Driver 4.x将请求细节日志集中在com.datastax.oss.driver.internal.core.request包下,只需单独为该包开启DEBUG或TRACE级别,即可输出包含一致性级别的查询日志:
Logback配置示例
<logger name="com.datastax.oss.driver.internal.core.request" level="DEBUG" additivity="false"> <appender-ref ref="defaultConsoleAppender"/> </logger>
该配置会输出每个请求的核心信息,包括:一致性级别、查询语句、执行耗时、目标节点等,且不会产生大量无关的根日志噪音。
2. 启用Driver请求追踪功能
通过开启Driver内置的请求追踪,可获取更详细的请求链路信息,其中包含一致性级别:
1)添加Driver配置
return programmaticDriverConfigLoaderBuilder -> programmaticDriverConfigLoaderBuilder .withString(DefaultDriverOption.REQUEST_CONSISTENCY, ConsistencyLevel.LOCAL_QUORUM.name()) .withString(DefaultDriverOption.SESSION_LEAK_THRESHOLD, sessionThreshold) // 开启请求追踪 .withBoolean(DefaultDriverOption.REQUEST_TRACING_ENABLED, true) .withString(DefaultDriverOption.REQUEST_TRACING_SESSION_NAME, "cassandra-session") .build();
2)配置追踪日志级别
<logger name="com.datastax.oss.driver.internal.core.tracing" level="DEBUG" additivity="false"> <appender-ref ref="defaultConsoleAppender"/> </logger>
此方案适合排查复杂请求问题,日志会包含完整的请求生命周期细节。
3. 自定义请求监听器打印一致性级别
如果需要完全定制日志格式,可通过Driver的RequestListener拦截请求,手动提取并打印一致性级别:
自定义监听器示例
@Component public class CassandraQueryConsistencyLogger implements RequestListener { private static final Logger log = LoggerFactory.getLogger(CassandraQueryConsistencyLogger.class); @Override public void onSuccess(RequestSuccessEvent event) { logRequestDetails(event.getRequest(), "executed successfully"); } @Override public void onFailure(RequestFailureEvent event) { logRequestDetails(event.getRequest(), "failed"); log.error("Request failure cause: ", event.getError()); } private void logRequestDetails(Request request, String status) { if (request instanceof QueryRequest queryRequest) { ConsistencyLevel consistencyLevel = queryRequest.getConsistencyLevel(); String query = queryRequest.getQuery(); log.info("Query {} with Consistency Level: [{}], SQL: {}", status, consistencyLevel.name(), query); } } }
将该监听器注册到Cassandra Session即可生效,Spring环境下会自动识别并注入。
4. 配合Spring Data Cassandra日志增强
若需要同时查看Spring Data层面的处理逻辑,可补充配置Spring Data Cassandra的日志级别:
<logger name="org.springframework.data.cassandra" level="DEBUG" additivity="false"> <appender-ref ref="defaultConsoleAppender"/> </logger>
此配置会输出Spring Data对Cassandra请求的封装过程,可与Driver日志配合使用。
内容的提问来源于stack exchange,提问作者Kumaran
相关产品推荐
相关产品推荐

