Towards a Taxonomy of Software Log Smells

该研究通过文献综述和编码分析,构建了一个包含九类日志坏味(Log Smells)的分类体系,并评估了现有修复工具,旨在帮助开发者编写更高质量的日志代码并指明未来的研究方向。

Nyyti Saarimäki, Donghwan Shin, Domenico Bianculli

发布于 Wed, 11 Ma
📖 1 分钟阅读☕ 轻松阅读

Each language version is independently generated for its own context, not a direct translation.

这篇论文就像是一份**“软件日志体检报告”**,它告诉开发者和研究人员:写日志(Logging)这件看似简单的小事,其实藏着很多容易让人踩坑的“坏毛病”(也就是论文里说的“异味”或 Smells)。

为了让你更容易理解,我们可以把软件系统想象成一家繁忙的餐厅,而日志(Logs)就是餐厅里服务员写的“工作日记”

1. 什么是“日志异味”(Log Smells)?

想象一下,如果餐厅的服务员在写工作日记时:

  • 有的字写得歪歪扭扭,有的用词前后矛盾;
  • 有的日记里全是废话,把重要的“菜做糊了”淹没在几千行“今天天气不错”的记录里;
  • 有的日记甚至没写是谁干的,或者把“上菜慢”记成了“上菜快”。

这些让日记变得难以阅读、容易误导人、或者浪费纸张的问题,就是论文里定义的**“日志异味”**。它们本身不会让餐厅立刻倒闭(系统还能跑),但如果不处理,迟早会导致大麻烦(比如找不到故障原因、系统变慢、甚至泄露顾客隐私)。

2. 这篇论文发现了什么?(9 种“坏毛病”)

作者们像侦探一样,翻阅了 51 篇学术文章,把日志里的问题归纳成了9 大类“坏毛病”,并给它们起了很形象的名字:

  1. 格式混乱 (Format turmoil):就像有的服务员用中文写,有的用英文,有的用符号,大家根本没法统一整理。
  2. 身份隐身 (Undercover identifier):出了事,日记里没写是哪个服务员干的,或者写错了部门,导致找不到责任人。
  3. 等级摇摆 (Mercurial logging level):把“轻微擦伤”记成“重伤”,或者把“火灾”只记成“提醒”。比如,把“数据库连接超时”这种大事,轻描淡写地记成“调试信息”。
  4. 欺骗性变量 (Deceptive variable):日记里写“顾客点了 A 菜”,但实际记录的数据却是 B 菜,或者数据格式乱码,让人看不懂。
  5. 消息疯狂 (Message madness):日记里的文字语法错误百出,或者前后矛盾(前面说“连接成功”,后面又说“连接失败”),让人摸不着头脑。
  6. 随风而逝 (Logging lost in the wind):该记的没记!比如系统崩溃了,但日记里完全没提,就像服务员忘了写“菜烧焦了”这一条。
  7. 垃圾填埋 (Landfill logs):记了太多没用的废话。比如每秒钟记一万次“系统正常”,导致真正重要的错误信息被淹没在垃圾堆里,根本找不到。
  8. 沉睡的守卫 (Sleeping guards):本来应该只在“出大事”时才写的日记,结果不管有没有事,代码都在后台疯狂计算、准备写日记,白白浪费了餐厅的电力(系统性能)。
  9. 柜中骷髅 (Skeleton in the closet):这是指写日记的代码本身太烂了。比如代码写得乱七八糟、重复啰嗦,虽然日记还能看,但维护起来非常痛苦,容易出错。

3. 为什么会得这些“病”?(5 个原因)

论文还分析了导致这些坏毛病的原因:

  • 没有统一规矩:餐厅没给服务员发统一的《日记写作指南》,大家各写各的。
  • 经验不足:新来的服务员不懂业务,不知道什么该记,什么不该记。
  • 工具不兼容:有的用 A 牌子的笔,有的用 B 牌子的笔,写出来的格式对不上。
  • 分工太细:餐厅分成了前厅、后厨、采购,大家各写各的,合起来就乱套了。
  • 疏于维护:餐厅开业久了,没人去检查旧日记,导致错误越积越多。

4. 这些“病”有什么后果?(4 种后果)

如果不治,后果很严重:

  • 信息泄露:日记里不小心记了顾客的身份证号或密码,被坏人看到了。
  • 时间错乱:日记里的时间顺序和实际发生的不一样,让人以为先有鸡后有蛋,导致分析故障时一头雾水。
  • 系统变慢:因为记了太多废话(垃圾填埋)或者没关掉的后台计算(沉睡守卫),餐厅的电脑(服务器)跑得越来越慢,甚至卡死。
  • 意外副作用:为了写日记,反而把系统搞崩了(比如因为写日记把内存占满了)。

5. 有药方吗?(工具现状)

作者们还调查了市面上有没有能“治病”的工具(就像给服务员用的“智能纠错笔”):

  • 好消息:确实有一些工具能帮忙。比如,有的工具能自动建议“这件事应该记为‘警告’而不是‘错误’"(解决等级摇摆);有的能自动删掉废话(解决垃圾填埋)。
  • 坏消息:药方还不够全!
    • 对于“格式混乱”和“代码本身太烂”这两类病,目前几乎没有专门的自动修复工具。
    • 很多工具只能治标(比如改个错别字),不能治本(比如理解为什么这里要记日志)。
    • 这就好比餐厅里虽然有自动擦桌子的机器,但还没有能自动教服务员“怎么把菜做得好吃”的机器人。

总结

这篇论文的核心思想是:写日志不是随便记记就行,它是一门技术活。

就像餐厅的日记决定了老板能不能知道哪里出了问题一样,软件的日志决定了工程师能不能快速修复 Bug。这篇论文给开发者列出了一份**“避坑指南”(9 种坏毛病),并告诉大家目前有哪些“急救箱”(现有工具),同时也指出了哪些地方“缺医少药”**,呼吁未来的研究去填补这些空白。

一句话总结:别让你的软件日志变成一本“天书”或“垃圾堆”,否则当系统出问题时,你连哭都找不到调门!