• 关于log4j2的一些想法


    最近两天关于log4j2的远程代码执行漏洞有很多讨论,但是很多都是非技术性的。作为一个技术博客,让我们从技术的角度来做一些讨论,同时记录自己的一些想法。

    为什么需要日志功能

    对于成熟的面向最终用户的软件产品,不管是目标用户是企业还是个人,都会存在或多或少的问题,缺陷,bug等。由于各种因素的限制,出现问题的时候软件开发人员不可能在线调试,定位,甚至看不到问题的表现,或者即使用户反馈了现象,但是描述是不准确的。针对这种情况,软件开发人员不能放之问题不管,只能思考其他的问题分析解决方法。日志功能是针对这种场景的一种重要手段,具体是软件在日常运行过程中,将重要的事件,行为,异常等信息记录下来,有条件还需要记录到文件中持久保存。当软件开发人员需要定位的时候,将问题发生时以及前后的日志倒出来,根据这些日志分析问题发生的原因,进而解决问题。另一种需要日志功能的场景是,软件问题偶尔出现,软件人员长时间监控软件行为耗时耗力,这个时候也需要日志功能来辅助分析问题。

    对于互联网的基石网络设备来说,日志是很重要的功能,很多广泛使用的产品都有具体而详细的日志功能。比如:
    https://www.cisco.com/c/en/us/td/docs/routers/access/wireless/software/guide/SysMsgLogging.html
    https://support.huawei.com/enterprise/en/doc/EDOC1000178167/90adc2f5/configuring-log-output
    https://www.h3c.com/en/d_201601/914610_294551_0.htm

    对于手机客户端软件来说日志功能也很重要,微信的帮助页面就有上传日志功能界面,帮助微信团队分析用户遇到的问题。

    对于这次Log4j2引起的远程日志漏洞来说,之所以影响这么大,就是因为很多基于java开发的网站服务,都用到了Log4j2来记录软件日志。

    由上面可以知道,日志功能是软件非常重要的一项功能,甚至说其是互联网软件的基石都不为过。虽然log的api使用起来可能很简单,但是越简单的使用接口内部实现可能会越复杂,比如内存申请和释放只有alloc/free两个api,但是内存管理本身是一件非常复杂的事情。

    日志有哪些重要特性

    根据上述对日志的分析,以及自己使用使用中的体会,日志应该具有如下一些功能。同时rfc3164和rfc5424也定义了syslog的基本功能,可以参考一下。

    1. 日志输出api接口统一,格式规范。软件的各个模块可以使用统一的接口输出日志信息,便于分析日志的使用情况。
    2. 日志输出支持不同的级别,以便于过滤不同级别的信息,便于分析重要问题,同时不被非重要信息干扰。
    3. 日志输出支持不同的形式,主要有控制台打印,文件形式,内存缓存,网络报文等,便于使用不同工具分析日志。
    4. 日志输出支持计数统计,丢弃个数,发送或者记录失败个数,限速等各种控制功能。
    5. 日志功能具有高性能吞吐的特点,同时不应对系统正常功能产生影响,日志功能应该支持动态开启和关闭。
    6. 日志功能本身的实现要尽可能清晰和简单,不占用太多的系统资源,支持常见的软件开发平台。

    log4j2的主要实现机制

    https://logging.apache.org/log4j/2.x/manual/architecture.html

    log4j2的优势在于哪里

    https://logging.apache.org/log4j/2.x/manual/index.html

    日志功能的未来发展

    远程监控功能
    软件调试技术
    分布式数据库

    扩展想法

    软件基础设施建设
    软件漏洞数据库CVE
    软件开放源代码

    参考资料

    https://logging.apache.org/log4j/2.x/index.html
    https://stackify.com/syslog-101/
    https://www.ietf.org/rfc/rfc3164.txt
    https://www.ietf.org/rfc/rfc5424.txt

  • 相关阅读:
    「UVA12293」 Box Game
    「CF803C」 Maximal GCD
    「CF525D」Arthur and Walls
    「CF442C」 Artem and Array
    LeetCode lcci 16.03 交点
    LeetCode 1305 两棵二叉搜索树中的所有元素
    LeetCode 1040 移动石子直到连续 II
    LeetCode 664 奇怪的打印机
    iOS UIPageViewController系统方法崩溃修复
    LeetCode 334 递增的三元子序列
  • 原文地址:https://www.cnblogs.com/lionelgeng/p/15730350.html
Copyright © 2020-2023  润新知