概述
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使用logback输出日志(jetty 启动)的全部内容,希望文章能够帮你解决dubbo使用logback输出日志(jetty 启动)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复