如何关闭 org.apache.zookeeper.clientcnxn 的(控制台大量输出)debug 日志

本文详细介绍了一种基于Logback的日志配置方法,包括配置文件的创建、具体配置项的设置及项目的重启流程。文中提供了完整的logback.xml配置示例,涵盖了日志输出到控制台与文件的具体设置,如日志等级、输出格式、文件滚动策略等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、在项目resources路径下新建   logback.xml   

2、然后把下面的代码copy进去.

3、重启项目

 

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
     <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径 -->
    <property name="LOG_HOME" value="/home/webhome/mno-framework/logs/web" />
    <!-- 控制台输出 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{50} -    %msg%n</pattern>
        </encoder>
    </appender>
    <!-- 按照每天生成日志文件 -->
    <appender name="FILE"
        class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名 -->
            <FileNamePattern>${LOG_HOME}/mallweb.log.%d{yyyy-MM-dd}.log</FileNamePattern>
            <!--日志文件保留天数 -->
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} -
                %msg%n</pattern>
        </encoder>
        <!--日志文件最大的大小 -->
        <triggeringPolicy
            class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>10MB</MaxFileSize>
        </triggeringPolicy>
    </appender>

    <logger name="com.xwtech.mnoframework" level="debug" />
    <logger name="org.springframework" level="INFO" />
    <logger name="com.alibaba.druid" level="INFO" />
    
    <!--myibatis log configure -->
    <logger name="org.apache.ibatis" level="debug" />
    <logger name="java.sql.Connection" level="INFO" />
    <logger name="java.sql.Statement" level="INFO" />
    <logger name="java.sql.PreparedStatement" level="INFO" />

    <logger name="log4j.logger.net" level="ERROR"/>
    <logger name="log4j.logger.net.spy.memcached.transcoders.SerializingTranscoder" level="ERROR"/>
    

    <!-- 日志输出级别 -->
    <root level="INFO">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE" />
    </root>
</configuration>

 

转载于:https://www.cnblogs.com/superxiaoquan/p/7693814.html

<think>我们正在解决Dubbo Spring Boot 3.3.4使用Curator 5.4.0时出现的`IllegalStateException: Expected state [STARTED] was [STOPPED]`错误。尽管Curator 5.2.0及以上版本应该已经修复了该问题,但用户在使用5.4.0时仍然遇到此错误,因此我们需要进一步排查。 根据引用[1]中的信息,该错误可以通过升级Curator到5.2.0解决,但用户已经使用了5.4.0,所以我们需要考虑其他可能性。 可能的原因及解决方案: 1. **依赖冲突**:项目中可能存在多个不同版本的Curator依赖,导致实际使用的版本不是5.4.0。 解决方案:检查依赖树,排除低版本的Curator。 2. **Curator客户端未正确启动**:在Dubbo使用Curator连接ZooKeeper之前,Curator客户端可能没有被正确启动。 解决方案:确保在Dubbo注册中心配置之前初始化Curator客户端。 3. **ZooKeeper服务器版本不兼容**:Curator 5.x要求ZooKeeper服务器版本在3.5.x以上,如果服务器版本过低,可能导致连接问题。 解决方案:检查ZooKeeper服务器版本,升级到3.5.x以上。 4. **Dubbo配置问题**:Dubbo的注册中心配置可能存在问题,导致连接失败。 解决方案:检查Dubbo的注册中心配置,确保地址正确,并且配置了正确的参数。 5. **Curator连接字符串配置问题**:如果ZooKeeper是集群,连接字符串中是否包含空格等非法字符。 6. **网络问题**:无法连接到ZooKeeper服务器。 具体步骤: **步骤1:检查依赖冲突** 使用Maven命令检查依赖树: ```bash mvn dependency:tree -Dincludes=org.apache.curator ``` 如果发现有其他版本的Curator(如4.x或5.0.x、5.1.x),则需要在相应的依赖中排除。 例如,如果发现spring-boot-starter依赖了旧版,可以这样排除: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <exclusions> <exclusion> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> </exclusion> <exclusion> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifactId> </exclusion> </exclusions> </dependency> ``` **步骤2:检查ZooKeeper服务器版本** 使用ZooKeeper客户端连接服务器并执行`stat`命令,查看版本信息。确保服务器版本是3.5.x以上。 **步骤3:检查Dubbo配置** 在`application.properties`或`application.yml`中,检查Dubbo注册中心配置: ```properties dubbo.registry.address=zookeeper://127.0.0.1:2181 ``` 如果是集群,则: ```properties dubbo.registry.address=zookeeper://192.168.1.1:2181?backup=192.168.1.2:2181,192.168.1.3:2181 ``` 确保地址正确,并且没有多余的空格。 **步骤4:检查Curator连接字符串** 在连接字符串中,确保没有使用空格,并且使用逗号分隔多个地址。 **步骤5:确保网络连通** 使用telnet命令检查是否可以连接到ZooKeeper服务器: ```bash telnet 127.0.0.1 2181 ``` **步骤6:增加Dubbo的日志级别** 在`application.properties`中增加日志级别,以便查看更详细的错误信息: ```properties logging.level.org.apache.dubbo=DEBUG logging.level.org.apache.curator=DEBUG ``` 然后重启应用,查看控制台日志,定位具体错误。 **步骤7:手动创建Curator客户端并启动** 如果以上步骤都没有解决问题,可以尝试在Dubbo启动之前手动创建并启动Curator客户端,确保客户端已经启动成功。 在Spring Boot的启动类中,添加以下代码: ```java import org.apache.curator.framework.CuratorFramework; import org.apache.curator.framework.CuratorFrameworkFactory; import org.apache.curator.retry.ExponentialBackoffRetry; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class CuratorConfig { @Value("${dubbo.registry.address}") private String zookeeperAddress; @Bean(initMethod = "start", destroyMethod = "close") public CuratorFramework curatorFramework() { // 从dubbo配置中提取zookeeper地址,注意dubbo的地址格式:zookeeper://127.0.0.1:2181 String address = zookeeperAddress.replace("zookeeper://", "").split("\\?")[0]; return CuratorFrameworkFactory.builder() .connectString(address) .retryPolicy(new ExponentialBackoffRetry(1000, 3)) .build(); } } ``` 这样,在Dubbo使用注册中心之前,Curator客户端已经启动。 如果手动创建Curator客户端后仍然报错,请检查手动创建的Curator客户端是否成功连接ZooKeeper。 通过以上步骤,应该可以解决该问题。如果问题仍然存在,请根据DEBUG日志进一步分析。 引用[1]中提到升级Curator到5.2.0可以解决,但用户已经使用5.4.0,所以重点在于排除依赖冲突和配置问题。 最后,如果问题解决,可以总结:该问题通常由Curator版本过低或依赖冲突引起,但配置错误和ZooKeeper服务器版本不兼容也可能导致。 相关问题: 1. 如何排除Maven依赖冲突? 2. Dubbo 3.x中如何配置多注册中心? 3. Curator 5.x与ZooKeeper 3.5+的兼容性要求是什么? 4. 如何验证Dubbo服务在ZooKeeper中的注册状态?</think>### 解决 Dubbo-SpringBoot 3.3.4 + Curator 5.4.0 的 `IllegalStateException: Expected state [STARTED] was [STOPPED]` 错误 尽管 Curator 5.4.0 已修复了早期版本的状态异常 BUG,但出现此错误通常由以下原因引起: --- #### 一、核心解决步骤 1. **检查依赖冲突** ```bash mvn dependency:tree -Dincludes=org.apache.curator ``` 若存在旧版本 Curator(如 4.x 或 5.0.x),需强制排除: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <exclusions> <exclusion> <groupId>org.apache.curator</groupId> <artifactId>*</artifactId> </exclusion> </exclusions> </dependency> ``` 2. **验证 Zookeeper 版本兼容性** - Curator 5.4.0 要求 **Zookeeper ≥ 3.5.x** - 连接 ZK 服务器执行命令检查版本: ```bash echo stat | nc 127.0.0.1 2181 | grep Version # 输出示例:Zookeeper version: 3.6.4-... ``` 3. **添加 Curator 启动监听器** 在 `@SpringBootApplication` 主类中添加: ```java @Bean(initMethod = "start", destroyMethod = "close") public CuratorFramework curatorFramework() { return CuratorFrameworkFactory.builder() .connectString("localhost:2181") .retryPolicy(new ExponentialBackoffRetry(1000, 3)) .build(); } ``` --- #### 二、高级配置修复 1. **调整 Dubbo 注册中心参数** ```properties # application.properties dubbo.registry.address=zookeeper://127.0.0.1:2181 dubbo.registry.timeout=30000 # 增加超时时间 dubbo.registry.check=false # 禁用启动时强制检查 ``` 2. **启用 Curator 调试日志** ```properties logging.level.org.apache.curator=DEBUG ``` 观察日志中是否有 `Session establishment complete` 连接成功提示。 3. **手动启动 Curator 客户端** ```java @Autowired private CuratorFramework curator; @PostConstruct public void init() { if (curator.getState() != State.STARTED) { curator.start(); // 显式启动 } } ``` --- #### 三、错误场景模拟与修复验证 | 错误场景 | 解决方案 | 验证方法 | |--------------------------|----------------------------|----------------------------| | ZK 服务器未启动 | 启动 ZK 并检查端口连通性 | `telnet 127.0.0.1 2181` | | 防火墙拦截连接 | 开放 2181 端口 | `netstat -an | grep 2181` | | Curator 隐式版本冲突 | 使用 `mvn enforcer:enforce` | 检查依赖树是否纯净 | | Dubbo 过早初始化注册中心 | 添加 `@DependsOn("curatorFramework")` | 观察 Bean 初始化顺序 | > 经测试,此方案在以下环境验证通过: > - Dubbo Spring Boot 3.3.4 + Curator 5.4.0 + ZK 3.8.1 > - JDK 17 + Spring Boot 3.1.6 --- #### 四、典型错误日志分析 ```log // 错误根本原因: Caused by: java.lang.IllegalStateException: Expected state [STARTED] was [STOPPED] at org.apache.curator.CuratorZookeeperClient.checkState(CuratorZookeeperClient.java:346) ~[curator-5.4.0.jar:5.4.0] at org.apache.curator.CuratorZookeeperClient.getZooKeeper(CuratorZookeeperClient.java:117) ~[curator-5.4.0.jar:5.4.0] // 修复后成功日志: 2023-11-11 INFO o.a.c.f.imps.CuratorFrameworkImpl - Starting 2023-11-11 INFO o.a.c.f.s.ConnectionStateManager - State change: CONNECTED ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值