由 log4j2 漏洞爆发引发的疑问,为什么这么多框架要引入 log4j2,不应该是仅引入 slf4j 吗 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
jiangxin
V2EX    程序员

由 log4j2 漏洞爆发引发的疑问,为什么这么多框架要引入 log4j2,不应该是仅引入 slf4j 吗

  •  
  •   jiangxin 2021-12-13 01:30:14 +08:00 8574 次点击
    这是一个创建于 1400 天前的主题,其中的信息可能已经有所发展或是发生改变。

    可能之前未表述清楚,我认为最好的方式应该是框架引入 slf4j ,使用框架的项目引入 log4j2 或者其他实现

    这个疑问之前就产生过,一直没有真正找寻过原因,此次核弹级漏洞引发整个圈内颤抖,是时候探究一下这个疑问了

    30 条回复    2021-12-14 14:48:45 +08:00
    aliensb
        1
    aliensb  
       2021-12-13 01:32:34 +08:00 via Android
    Slf4j 是门面,具体实现是 log4j2
    jiangxin
        2
    jiangxin  
    OP
       2021-12-13 01:35:40 +08:00   1
    @aliensb 这个没错,但不应该是框架引入 slf4j ,使用框架的项目引入 log4j2 或者其他实现
    dreamramon
        3
    dreamramon  
       2021-12-13 06:28:22 +08:00
    log4j2 的异步性能高啊
    shyangs
        4
    shyangs  
       2021-12-13 07:27:05 +08:00
    平行宇宙.

    React 框架治了 Java 王.

    你永都有的自由.

    Browserify/Grunt/Gulp/Webpack
    Redux/Mobx/Recoil
    Redux-saga/Dva
    material/antd/bootstrap
    less/sass/postcss/css in js
    shyangs
        5
    shyangs  
       2021-12-13 07:31:06 +08:00
    [在的前端技真的太心了!]( t/821702 )
    seaswalker
        6
    seaswalker  
       2021-12-13 08:03:57 +08:00
    看到车仔就进来了
    xuanbg
        7
    xuanbg  
       2021-12-13 08:10:47 +08:00   1
    log4j 好用且性能高啊。从这次漏洞就能看得出来,log4j 真的是只有你想不到,没有他做不到呢。
    hingbong
        8
    hingbong  
       2021-12-13 08:12:19 +08:00 via Android
    @jiangxin 现在不就是吗,你是低估了 Java 项目的数量了
    chendy
        9
    chendy  
       2021-12-13 08:44:25 +08:00
    spring-boot 如果不自己动的话是 logback
    印象里只有 elasticsearch 是绑定 log4j2 的,毕竟有独立运行的需求,不能只有一个 slf4j
    muooOOO
        10
    muooOOO  
       2021-12-13 08:49:11 +08:00 via Android
    我车已崩
    fpure
        11
    fpure  
       2021-12-13 09:09:20 +08:00
    log4j 可以用 slf4j 桥接器换掉
    jimmyismagic
        12
    jimmyismagic  
       2021-12-13 09:33:41 +08:00
    log4j2 性能更好,我们 springboot 项目都要它
    christin
        13
    christin  
       2021-12-13 09:46:13 +08:00 via iPhone
    @shyangs #4 我猜你想说 Javascript ?
    wineast
        14
    wineast  
       2021-12-13 09:49:22 +08:00/span>
    奇怪的是,我们用的是默认 springboot ,理论上应该用的是 logback 。但上周排查 进行依赖扫描的时候发现 log4j-api 被 log4j-to-slf4j,然后被 spring-boot-starter-logging 引入了,还是要修
    如下:
    | | | +--- org.springframework.boot:spring-boot-starter-logging:2.3.6.RELEASE
    | | | | +--- ch.qos.logback:logback-classic:1.2.3
    | | | | | +--- ch.qos.logback:logback-core:1.2.3
    | | | | | \--- org.slf4j:slf4j-api:1.7.25 -> 1.7.30
    | | | | +--- org.apache.logging.log4j:log4j-to-slf4j:2.13.3
    | | | | | +--- org.slf4j:slf4j-api:1.7.25 -> 1.7.30
    | | | | | \--- org.apache.logging.log4j:log4j-api:2.13.3
    FEINIAO233
        15
    FEINIAO233  
       2021-12-13 09:56:23 +08:00
    @wineast 只有 log4j-api 一个依赖没事的,漏洞的代码在 log4j-core 包里
    kilala2020
        16
    kilala2020  
       2021-12-13 10:31:42 +08:00
    我也一直有这个疑惑,为什么这么整齐划一的搞 log4j2?
    cheng6563
        17
    cheng6563  
       2021-12-13 10:59:57 +08:00
    @wineast log4j-api 没问题的,就是把 log4j 的 api 转发到 slf4j 去了,slf4j 没问题就行了。
    wineast
        18
    wineast  
       2021-12-13 11:04:32 +08:00
    @FEINIAO233 感谢,客户那里用的扫描工具,都是直接扫关键词的,扫到了就要我们整改,现在还得排包
    fighterhit
        19
    fighterhit  
       2021-12-13 11:46:27 +08:00
    @FEINIAO233 log4j-api 也只是接口吗?那最终实现调的什么?
    Wien
        20
    Wien  
       2021-12-13 11:51:37 +08:00   1
    spring boot 本身就是开箱即用的框架,默认就有日志组件的实现。一键启动,该配的都帮你配好了。
    blessingsi
        21
    blessingsi  
       2021-12-13 12:01:02 +08:00 via Android
    理解楼主的问题。如果是一个纯框架 /库,应该是不需要引入具体实现的,但是实际跑在线上的应用,不可能不引入一个实际实现吧。log4j2 的性能确实比 logback 更好
    FEINIAO233
        22
    FEINIAO233  
       2021-12-13 12:02:45 +08:00
    @fighterhit springboot 默认使用的 logback 作为日志框架的实现
    securityCoding
        23
    securityCoding  
       2021-12-13 12:25:18 +08:00 via Android
    组件里面用 slf4j ,应用里面还是要引入底层实现包的
    fighterhit
        24
    fighterhit  
       2021-12-13 14:08:00 +08:00 via iPhone
    @FEINIAO233 那为啥还会用到 log4j-api 这个包呢?
    0017
        25
    0017  
       2021-12-13 15:15:41 +08:00
    感觉 logback 用的更多?毕竟是默认的
    fpure
        26
    fpure  
       2021-12-13 17:28:58 +08:00
    @wineast log4j-to-slf4j 是用 slf4j 实现的对 log2j 的适配器,springboot 官方解释了没事的
    jiangxin
        27
    jiangxin  
    OP
       2021-12-13 22:26:28 +08:00
    @blessingsi 终于看到一个满意的答案了,还是要吐槽一些框架,明明没有独立运行的场景,还是引入了 log4j 。比如 mybatis
    jiangxin
        28
    jiangxin  
    OP
       2021-12-13 22:27:14 +08:00
    @muooOOO 过了这段魔鬼赛程,就能看出来能不能争冠了
    guoli100
        29
    guoli100  
       2021-12-13 22:45:49 +08:00
    WeSoniC
        30
    WeSoniC  
       2021-12-14 14:48:45 +08:00
    Spring Boot 本身有一个快速上手的 Tag ,开发者并不需要去关心细枝末节,只要引入几个 xxx-starter ,写两行配置文件就可以开始搞业务代码,开发者并不需要关心日志实现是 log4j 还是 logback ,反正 TM 的能在终端看到输出就完事了。也就是说能够快速上手是因为有人帮你做了选择。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     922 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 18:49 PVG 02:49 LAX 11:49 JFK 14:49
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86