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-container-jetty dubbo-container-log4j dubbo-container-logback dubbo-container-spring dubbo-demo dubbo-demo-api dubbo-demo-consumer dubbo-demo-provider dubbo-filter dubbo-filter-cache dubbo-...
[INFO] dubbo-container-jetty ............................. SUCCESS [1.448s] [INFO] dubbo-container-log4j ............................. SUCCESS [1.566s] [INFO] dubbo-container-logback ....................
Dubbo内建了JavaConfig、Jetty、Log4j、Logback和Spring等容器的实现。 - **dubbo-config-api**:配置模块,依赖于其他模块,负责整合Dubbo组件并提供给开发者配置。它使得用户可以通过配置文件或API来装配和管理...
Dubbo内置了多种容器实现,包括JavaConfig、Jetty、Log4j、Logback和Spring。容器模块依赖几乎所有其他模块,是配置模块的核心,负责通过配置整合所有Dubbo组件,为最终的开发者提供有价值的分布式服务框架。 Dubbo...
- **监控与日志**:集成如Prometheus、Grafana进行监控,使用Logback或Log4j记录日志,便于故障排查。 5. **技术栈选型** - **Spring全家桶**:Spring MVC作为Web框架,Spring Cloud组件如Zookeeper(替代diamond...
plexus-jetty-httpd-1.0-beta-1.jar plexus-utils-1.0.2.jar plexus-utils-1.0.4.jar plexus-utils-1.2.jar plexus-utils-1.3.jar plexus-utils-1.4.1.jar plexus-utils-1.4.2.jar plexus-utils-1.4.5.jar plexus-...
8. **监控指标**: 监控指标涵盖jvm、系统资源、数据库(如Redis和MySQL)、中间件(如Tomcat、Jetty、HTTP和Dubbo)以及日志系统(如Logback)。这些指标的持续监控有助于及时发现并解决系统问题,保证服务稳定运行...
8. **日志管理**:合理配置日志框架(如Log4j、Logback等),确保任务执行日志的收集和分析,以便于问题排查和性能优化。 9. **升级与维护**:随着版本更新,可能需要对旧的`elastic-job-lite-console-2.1.3.war`...
- **日志配置**:如log4j.properties或logback.xml,定义日志级别、输出位置、格式等。 - **单元测试配置**:JUnit或其他测试框架的配置,定义测试行为和断言。 总的来说,项目结构和配置在Java项目中起到承上启下...
jetty 容灾 日志框架 开源框架 slf4j 框架实现 log4j logback commong logging jdk logger 测试框架 测试框架 junit easymock testng mockito bug管理 禅道 jira 开发工具 编程工具 eclipse ...
Logstash 是一款服务器端数据处理管道,其主要功能包括数据输入、过滤、输出。 - **Kibana**: 框架。Kibana 是ELK Stack中的用户接口,主要用于可视化数据。 #### 搜索 - **Elasticsearch**: 框架。Elasticsearch ...