V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jiangxin
V2EX  ›  程序员

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

  •  
  •   jiangxin · 245 天前 · 6783 次点击
    这是一个创建于 245 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    30 条回复    2021-12-14 14:48:45 +08:00
    aliensb
        1
    aliensb  
       245 天前 via Android
    Slf4j 是门面,具体实现是 log4j2
    jiangxin
        2
    jiangxin  
    OP
       245 天前   ❤️ 1
    @aliensb 这个没错,但不应该是框架引入 slf4j ,使用框架的项目引入 log4j2 或者其他实现
    dreamramon
        3
    dreamramon  
       245 天前
    log4j2 的异步性能高啊
    shyangs
        4
    shyangs  
       244 天前
    平行宇宙.

    React 框架統治了 Java 王國.

    你永遠都有選擇的自由.

    Browserify/Grunt/Gulp/Webpack
    Redux/Mobx/Recoil
    Redux-saga/Dva
    material/antd/bootstrap
    less/sass/postcss/css in js
    shyangs
        5
    shyangs  
       244 天前
    [現在的前端技術棧真的太惡心了!]( https://www.v2ex.com/t/821702 )
    seaswalker
        6
    seaswalker  
       244 天前
    看到车仔就进来了
    xuanbg
        7
    xuanbg  
       244 天前   ❤️ 1
    log4j 好用且性能高啊。从这次漏洞就能看得出来,log4j 真的是只有你想不到,没有他做不到呢。
    hingbong
        8
    hingbong  
       244 天前 via Android
    @jiangxin 现在不就是吗,你是低估了 Java 项目的数量了
    chendy
        9
    chendy  
       244 天前
    spring-boot 如果不自己动的话是 logback
    印象里只有 elasticsearch 是绑定 log4j2 的,毕竟有独立运行的需求,不能只有一个 slf4j
    muooOOO
        10
    muooOOO  
       244 天前 via Android
    我车已崩
    fpure
        11
    fpure  
       244 天前
    log4j 可以用 slf4j 桥接器换掉
    jimmyismagic
        12
    jimmyismagic  
       244 天前
    log4j2 性能更好,我们 springboot 项目都要它
    christin
        13
    christin  
       244 天前 via iPhone
    @shyangs #4 我猜你想说 javascript ?
    wineast
        14
    wineast  
       244 天前
    奇怪的是,我们用的是默认 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  
       244 天前
    @wineast 只有 log4j-api 一个依赖没事的,漏洞的代码在 log4j-core 包里
    kilala2020
        16
    kilala2020  
       244 天前
    我也一直有这个疑惑,为什么这么整齐划一的搞 log4j2?
    cheng6563
        17
    cheng6563  
       244 天前
    @wineast log4j-api 没问题的,就是把 log4j 的 api 转发到 slf4j 去了,slf4j 没问题就行了。
    wineast
        18
    wineast  
       244 天前
    @FEINIAO233 感谢,客户那里用的扫描工具,都是直接扫关键词的,扫到了就要我们整改,现在还得排包
    fighterhit
        19
    fighterhit  
       244 天前
    @FEINIAO233 log4j-api 也只是接口吗?那最终实现调的什么?
    Wien
        20
    Wien  
       244 天前
    spring boot 本身就是开箱即用的框架,默认就有日志组件的实现。一键启动,该配的都帮你配好了。
    blessingsi
        21
    blessingsi  
       244 天前 via Android
    理解楼主的问题。如果是一个纯框架 /库,应该是不需要引入具体实现的,但是实际跑在线上的应用,不可能不引入一个实际实现吧。log4j2 的性能确实比 logback 更好
    FEINIAO233
        22
    FEINIAO233  
       244 天前
    @fighterhit springboot 默认使用的 logback 作为日志框架的实现
    securityCoding
        23
    securityCoding  
       244 天前 via Android
    组件里面用 slf4j ,应用里面还是要引入底层实现包的
    fighterhit
        24
    fighterhit  
       244 天前 via iPhone
    @FEINIAO233 那为啥还会用到 log4j-api 这个包呢?
    0017
        25
    0017  
       244 天前
    感觉 logback 用的更多?毕竟是默认的
    fpure
        26
    fpure  
       244 天前
    @wineast log4j-to-slf4j 是用 slf4j 实现的对 log2j 的适配器,springboot 官方解释了没事的
    jiangxin
        27
    jiangxin  
    OP
       244 天前
    @blessingsi 终于看到一个满意的答案了,还是要吐槽一些框架,明明没有独立运行的场景,还是引入了 log4j 。比如 mybatis
    jiangxin
        28
    jiangxin  
    OP
       244 天前
    @muooOOO 过了这段魔鬼赛程,就能看出来能不能争冠了
    WeSoniC
        30
    WeSoniC  
       243 天前
    Spring Boot 本身有一个快速上手的 Tag ,开发者并不需要去关心细枝末节,只要引入几个 xxx-starter ,写两行配置文件就可以开始搞业务代码,开发者并不需要关心日志实现是 log4j 还是 logback ,反正 TM 的能在终端看到输出就完事了。也就是说能够快速上手是因为有人帮你做了选择。
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1088 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 22:34 · PVG 06:34 · LAX 15:34 · JFK 18:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.