1. 背景
最近做一个dubbo 相关项目, 开发环境使用jetty 启动项目时候,
关于dubbo 的日志显示如下:
作为一个有代码洁癖的我,不能忍
我们商城使用 slf4j+logback 体系, 能否把dubbo 的日志切换到 logback 上来呢?
2. 原因
跟踪 dubbo 的日志类 com.alibaba.dubbo.common.logger.LoggerFactory
发现源码:
// 查找常用的日志框架 static{ String logger = System.getProperty("dubbo.application.logger"); if ("slf4j".equals(logger)){ setLoggerAdapter(new Slf4jLoggerAdapter()); }else if ("jcl".equals(logger)){ setLoggerAdapter(new JclLoggerAdapter()); }else if ("log4j".equals(logger)){ setLoggerAdapter(new Log4jLoggerAdapter()); }else if ("jdk".equals(logger)){ setLoggerAdapter(new JdkLoggerAdapter()); }else{ try{ setLoggerAdapter(new Log4jLoggerAdapter()); }catch (Throwable e1){ try{ setLoggerAdapter(new Slf4jLoggerAdapter()); }catch (Throwable e2){ try{ setLoggerAdapter(new JclLoggerAdapter()); }catch (Throwable e3){ setLoggerAdapter(new JdkLoggerAdapter()); } } } } }
可以发现, dubbo 会判断 dubbo.application.logger 环境变量参数值
如果是 jcl 会使用 JclLoggerAdapter
如果是 log4j 会使用 Log4jLoggerAdapter
如果是 jdk 会使用 JdkLoggerAdapter
如果没有设值, 那么会优先使用 Log4jLoggerAdapter> Slf4jLoggerAdapter> JclLoggerAdapter> JdkLoggerAdapter
哦 ,明白了 ,
由于没有设置 dubbo.application.logger 属性导致
启动的时候 ,用了 com.alibaba.dubbo.common.logger.log4j.Log4jLoggerAdapter
21:33:03 INFO (XmlBeanDefinitionReader.java:317) loadBeanDefinitions() - Loading XML bean definitions from class path resource [spring/spring-context.xml]
21:33:03 INFO (XmlBeanDefinitionReader.java:317) loadBeanDefinitions() - Loading XML bean definitions from class path resource [spring/service-consumer.xml]
[15/05/18 09:34:26:026 CST] INFO logger.LoggerFactory: using logger: com.alibaba.dubbo.common.logger.log4j.Log4jLoggerAdapter
那么明明项目中没有使用 log4j, 为什么没有报错呢?
我们看下项目依赖
哦 epi 这里多了个log4j
排除掉他
3. 解决方案
jetty
<!-- jetty-maven-plugin --> <plugin> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <version>${version.jetty-maven-plugin}</version> <configuration> ...... <systemProperties> <systemProperty> <name>dubbo.application.logger</name> <value>slf4j</value> </systemProperty> </systemProperties> .... </configuration> </plugin>
采取以下方式来切换成slf4j:
(1)设置jvm启动参数来指定slf4j(这种方式无论是spring容器还是web容器均可适用)
-Ddubbo.application.logger=slf4j
(2)web项目,可继承ContextLoaderListener来设置
System.setProperty("dubbo.application.logger","slf4j");
4. 改造完成之后输出结果
5. 参考
https://blog.csdn.net/long243416336/article/details/49946833
相关推荐
dubbo是一套基于java的高可用的分布式服务框架。由阿里巴巴开发,并对外开源。和其他RPC框架一样,在服务端声明接口服务,并实现,同时将服务注册到服务注册中心(开源使用zookeeper作为注册中心);客户端声明与...
该项目包含了 分布式springboot+mybatis+dubbo 及日志配置 (已经删除jar 请自行下载后通过maven下载 最好使用阿里镜像仓库),代码中我已经对关键代码做了注释
dubbo使用例子,首先api的生产jar包,然后在serviceone和ControllerOne引用,使用就可以。
基于dubbo分布式应用集群,日志跟踪变得比以往困难。基于spi的调用拦截,可以将traceid通过rpc context保存下来,并通过MDC输出到日志中去,解决调用跟踪难的问题。
解决dubbo-admin在jdk1.8下启动报错问题,需要下载dubbo源码修改问题重新编译打包发布,这里已经和重新编译。
dubbo管理工具,使用于dubbo-2.6.0及版本以下,亲测有效:dubbo-admin-2.6.0
根据阿里巴巴dubbo框架官网的说明写的dubbo服务端和消费端的简单快速启动案例
dubbo使用的dtd
NULL 博文链接:https://1028826685.iteye.com/blog/2292982
Dubbo使用与实现.pdf
这篇文档详细讲解了 dubbo 的使用,基本涵盖 dubbo 的所有功能特性。 如果你正依赖 dubbo 作为你业务工程的RPC通信框架,这里可以作为你的参考手册
RPC框架Dubbo使用示例,包括服务声明暴露,服务远程调用。 https://blog.csdn.net/wangpf2011/article/details/84197373
dubbo使用zookeeper注册最小依赖jar包,包含dubbo核心包一个,Commons包一个,log4j包一个,netty核心包一个,slf4j包两个,spring核心包一个,zookeeper包两个,javassist包一个。本地搭建可以成功调用服务。欢迎来...
1,基于Spring XML配置...3,使用sl4j+logback日志输出 4,google guava使用 5,dubbo消费者实例 6,多线程压测dubbo服务 7,dubbo的性能参数验证,比如timeout,retries,check 8,zookeeper注册中心,提供zookeeper使用
dubbo官方使用手册,讲述dubbo的使用方法,更好的理解dubbo
dubbo示例代码dubbo-sample
的main方法来启动provider,需要在dubbo.properties文件中配置如下信息#dubbo启动容器(不设置默认spring一个)dubbo.container = spring,logback#dubbo spring配置(通过Main.main方法启动需要通过此参数配置spring...
一个接口 一个消费端,一个提供端, 基本的 dubbo 服务 项目 实现。 。
Dubbo 后台管理平台及监控平台使用简介 一、管理平台dubbo-admin部署使用 管理平台是个web项目,将 dubbo-admin-2.6.0.war直接部署到tomcat 下使用。注意软件版本 tomcat 8+jvm8+ dubbo-admin-2.6.0.war。 A、第一...
一个dubbo的小例子,之前没怎么学懂,这是再次学习之后改写的小例子,希望能够给初学dubbo的同学一点点帮助