V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
jiangxin
V2EX  ›  程序员

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

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

    可能之前未表述清楚,我认为最好的方式应该是框架引入 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
    [現在的前端技術棧真的太惡心了!]( https://www.v2ex.com/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
    奇怪的是,我们用的是默认 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   ·   实用小工具   ·   5518 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 07:06 · PVG 15:06 · LAX 23:06 · JFK 02:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.