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

关于日志轮替,应该采用按日期轮替还是按大小轮替的问题

  •  
  •   index90 · 2019-01-25 18:38:15 +08:00 · 1177 次点击
    这是一个创建于 2135 天前的主题,其中的信息可能已经有所发展或是发生改变。

    问题背景: 一个线上系统,需要将系统运行的日志打印到本地磁盘中(没有将日志上传到某个日志系统的技术),日志包括诊断日志( INFO,WARN,ERROR )和访问日志( accesslog )。我们希望日志的输出既能方便问题的分析,也不能影响系统的长期稳定运行,系统在正常运作的过程中,尽可能“免维护”。

    我们假定日志输出的内容是规范的,我们已经实现输出“不多不少”的日志(即不会输出没用的日志,我们这里不讨论应该输出怎样的日志内容)。

    由于日志只能打印到本地磁盘,本地磁盘空间是有限的,因此我们需要用日志轮替的方式来控制历史日志的数量。

    按日期轮替: 按日期轮替即把日志按天分割,保留一周或两周的日志。 优点:采用该轮替方案,可以很方便问题的分析和查找(例如客户说某天系统出问题了,可以根据日期查找),而且对于日志的保留可以更符合业务要求(如业务要求保留过去两周的操作记录)。 缺点:采用该轮替方案,万一日志量过大,或者磁盘过小,或者由于某种程序错误导致大量的 ERROR 日志产生,容易造成日志文件过大,消耗完了磁盘空间,最终导致系统不可用。

    按大小轮替: 按大小轮替即把日志按照固定大小分割,例如限定一个日志文件最大为 100M,当日志写满 100M 时,会分割出一个文件。可以控制保留日志文件的数量来控制日志量。 优点:采用该轮替方案,控制很好控制系统消耗的磁盘大小,例如我们设定日志文件最大 100M,保留 10 个文件时,我们可以预知系统最多占用 1G 的磁盘空间。 缺点:采用该轮替方案,对问题分析不友好,需要逐个文件打开分析。对业务不友好,日志量多时,可能几天前的日志就被冲掉了。

    这里希望跟大家讨论一下,如何采取正确的策略,考虑哪些因素,可以分类讨论。 第一次发表,请多多包涵,多谢!

    shoaly
        1
    shoaly  
       2019-01-25 21:35:11 +08:00   ❤️ 1
    我是按大小 去切割的.
    文中说的定位日期 其实很简单的, 每次切割出来归档的那个日志 是有创建时间的... 所以要定位看某一天的日志是完全没问题的
    julyclyde
        2
    julyclyde  
       2019-01-25 21:46:58 +08:00
    日志的行应该包含足够的信息,尤其是该行的时间戳
    依赖文件名、文件修改时间等都是不靠谱的做法,因为把本质的内容放在外边这个不可靠的机制里了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2667 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 95ms · UTC 10:19 · PVG 18:19 · LAX 02:19 · JFK 05:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.