`

dubbo使用logback输出日志(jetty 启动)

阅读更多

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 环境变量参数值

 

写道
如果是 slf4j 会使用 Slf4jLoggerAdapter

如果是 jcl 会使用 JclLoggerAdapter

如果是 log4j 会使用 Log4jLoggerAdapter
如果是 jdk 会使用 JdkLoggerAdapter


如果没有设值, 那么会优先使用 Log4jLoggerAdapter> Slf4jLoggerAdapter> JclLoggerAdapter> JdkLoggerAdapter

 

 

哦 ,明白了 , 

 

由于没有设置 dubbo.application.logger 属性导致

 

启动的时候 ,用了 com.alibaba.dubbo.common.logger.log4j.Log4jLoggerAdapter

 

写道
21:33:03 INFO (AbstractApplicationContext.java:583) prepareRefresh() - Refreshing Root WebApplicationContext: startup date [Tue May 15 21:33:03 CST 2018]; root of context hierarchy
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

 

  • 大小: 658.2 KB
  • 大小: 1.7 MB
  • 大小: 1.5 MB
0
0
分享到:
评论

相关推荐

    dubbo springboot logback

    dubbo是一套基于java的高可用的分布式服务框架。由阿里巴巴开发,并对外开源。和其他RPC框架一样,在服务端声明接口服务,并实现,同时将服务注册到服务注册中心(开源使用zookeeper作为注册中心);客户端声明与...

    springboot+mybatis+dubbo 分布式框架搭建及日志配置

    该项目包含了 分布式springboot+mybatis+dubbo 及日志配置 (已经删除jar 请自行下载后通过maven下载 最好使用阿里镜像仓库),代码中我已经对关键代码做了注释

    dubbo使用例子 dubbo使用例子

    dubbo使用例子,首先api的生产jar包,然后在serviceone和ControllerOne引用,使用就可以。

    dubbo分布式应用日志追踪

    基于dubbo分布式应用集群,日志跟踪变得比以往困难。基于spi的调用拦截,可以将traceid通过rpc context保存下来,并通过MDC输出到日志中去,解决调用跟踪难的问题。

    解决dubbo-admin在jdk1.8下启动报错

    解决dubbo-admin在jdk1.8下启动报错问题,需要下载dubbo源码修改问题重新编译打包发布,这里已经和重新编译。

    dubbo-admin-2.6.0及启动文档说明

    dubbo管理工具,使用于dubbo-2.6.0及版本以下,亲测有效:dubbo-admin-2.6.0

    dubbo快速启动案例

    根据阿里巴巴dubbo框架官网的说明写的dubbo服务端和消费端的简单快速启动案例

    dubbo使用的dtd

    dubbo使用的dtd

    Dubbo服务提供者几种启动方式

    NULL 博文链接:https://1028826685.iteye.com/blog/2292982

    Dubbo使用与实现.pdf

    Dubbo使用与实现.pdf

    dubbo使用手册,对初学者有很多帮助

    这篇文档详细讲解了 dubbo 的使用,基本涵盖 dubbo 的所有功能特性。 如果你正依赖 dubbo 作为你业务工程的RPC通信框架,这里可以作为你的参考手册

    Dubbo使用示例

    RPC框架Dubbo使用示例,包括服务声明暴露,服务远程调用。 https://blog.csdn.net/wangpf2011/article/details/84197373

    dubbo使用zookeeper注册最小依赖jar包

    dubbo使用zookeeper注册最小依赖jar包,包含dubbo核心包一个,Commons包一个,log4j包一个,netty核心包一个,slf4j包两个,spring核心包一个,zookeeper包两个,javassist包一个。本地搭建可以成功调用服务。欢迎来...

    分布式服务dubbo框架的实例演示

    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示例代码dubbo-sample

    dubbo示例代码dubbo-sample

    spring-boot-dubbo:spring boot duboo整合

    的main方法来启动provider,需要在dubbo.properties文件中配置如下信息#dubbo启动容器(不设置默认spring一个)dubbo.container = spring,logback#dubbo spring配置(通过Main.main方法启动需要通过此参数配置spring...

    dubbo 使用基本功能demo

    一个接口 一个消费端,一个提供端, 基本的 dubbo 服务 项目 实现。 。

    dubbo 后台监控使用简介

    Dubbo 后台管理平台及监控平台使用简介 一、管理平台dubbo-admin部署使用 管理平台是个web项目,将 dubbo-admin-2.6.0.war直接部署到tomcat 下使用。注意软件版本 tomcat 8+jvm8+ dubbo-admin-2.6.0.war。 A、第一...

    dubbo使用小例子

    一个dubbo的小例子,之前没怎么学懂,这是再次学习之后改写的小例子,希望能够给初学dubbo的同学一点点帮助

Global site tag (gtag.js) - Google Analytics