前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >log4j-over-slf4j工作原理详解

log4j-over-slf4j工作原理详解

作者头像
johnhuster的分享
发布2022-03-29 14:13:43
8890
发布2022-03-29 14:13:43
举报
文章被收录于专栏:johnhuster

SLF4J作为一个服务很多日志框架的门店或者抽象,一些相关插件使用了设计模式中的门面模式以及代理模式,我们可以SLF4J这个框架很容易就切换具体的日志框架,比如logback、log4j等,还能将使用log4j日志框架输出的日志路由到SLF4J上(通过org.slf4j:log4j-over-slf4j:jar这个jar包实现)。

特别需要指出的是SLF4J采用的是动态绑定具体日志框架的方式,根据classpath目录下放置的绑定jar包来实现绑定,常见绑定jar包如下:

具体用法:使用log4j-over-slf4j取代log4j,这样log4j接口输出的日志就会通过log4j-over-slf4j路由到SLF4J上,这样即使系统(包含使用的第三方jar库,比如dubbo)都可以将日志最终路由到SLF4J上,进而集中输出。

工作原理

本文就以log4j-over-slf4j这个jar库为例来说明这其中的原理:

这个里面使用的是迷惑战术,按照log4j库的目录排布放置几个相关类(比如Logger等),这样系统中使用log4j的代码编译就不会出错,但是这些代理logger内部实现时却将日志悄悄代理到了SLF4J相关接口,相关部分代码如下:

代码语言:javascript
复制
  public void debug(Object message)
   {
     differentiatedLog(null, CATEGORY_FQCN, 10, message, null);
   }
 
  public void info(Object message, Throwable t)
   {
     differentiatedLog(null, CATEGORY_FQCN, 20, message, t);
   }
 

下面将揭开庐山真面目:

protected Logger slf4jLogger; --org.apache.log4j.Category类属性,该属性就是org.slf4j.Logger类型了,到此相信大家已经知道了绑定类的工作原理。

代码语言:javascript
复制
  void differentiatedLog(Marker marker, String fqcn, int level, Object message, Throwable t)
   {
     String m = convertToString(message);
     if (this.locationAwareLogger != null) {
       this.locationAwareLogger.log(marker, fqcn, level, m, null, t);
     } else {
       switch (level)
       {
       case 0: 
         this.slf4jLogger.trace(marker, m);
         break;
       case 10: 
         this.slf4jLogger.debug(marker, m);
         break;
       case 20: 
         this.slf4jLogger.info(marker, m);
         break;
       case 30: 
         this.slf4jLogger.warn(marker, m);
         break;
       case 40: 
         this.slf4jLogger.error(marker, m);
       }
     }
   }
 
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017/07/26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 工作原理
相关产品与服务
日志服务
日志服务(Cloud Log Service,CLS)是腾讯云提供的一站式日志服务平台,提供了从日志采集、日志存储到日志检索,图表分析、监控告警、日志投递等多项服务,协助用户通过日志来解决业务运维、服务监控、日志审计等场景问题。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档