LogGen:将传统模型和大型语言模型(LLM)与代码分析相结合,以实现精确的日志生成

《Journal of Systems and Software》:LogGen: Integrating Traditional Model and LLM with Code Analysis for Precise Log Generation

【字体: 时间:2026年02月11日 来源:Journal of Systems and Software 4.1

编辑推荐:

  日志生成框架LogGen融合传统模型与LLMs,通过代码摘要和函数级语义构建特征增强日志定位精度,并利用子组件聚类和知识库构建提升生成质量,实验验证其在Java/C++项目上F1指标提升41.6%,BLEU-4达36.2%,展现强鲁棒性。

  
李敏|谭鸥|陈鹏飞|张传福
中山大学系统科学与工程学院,广州,510006,中国

摘要

日志记录是程序状态运行时监控和测量的关键方法。然而,在大型项目中,由于开发者经验的不同,日志语句中的关键信息存在显著差异,这使得维护统一的日志格式变得具有挑战性。因此,我们提出了LogGen,这是一个结合了传统模型和大型语言模型(LLMs)的日志生成框架。它从现有项目中学习,并自动将日志语句插入新代码中,解决了LLMs难以准确定位日志位置的难题。通过利用LLM的代码摘要功能并整合函数级语义信息,LogGen构建了更强大的特征,使传统模型在日志定位方面实现了高精度。此外,LogGen从项目中提取日志风格和函数调用链,以创建一个知识数据库。LLMs可以通过结合我们的知识与检索增强生成(RAG)框架来生成更精确的日志语句。我们在长期开发的Java和C++项目中评估了LogGen,结果显示其在日志位置F1分数上超过了现有最佳方法41.6%,在文本BLEU-4分数上提高了36.2%,显示出对代码和知识变化的更强鲁棒性。

引言

日志记录对于系统维护中的调试、测量和监控软件状态至关重要。开发人员在代码中插入日志语句,以跟踪程序执行的详细信息,例如函数调用的顺序和关键变量的状态,为代码故障排除提供详细见解(Du等人,2017年;Liu等人,2023年;Yuan等人,2012b年;Zhang等人,2017年)。一个日志语句通常包括三个部分:级别消息变量。例如,在以下日志语句中,“info”是日志级别,“Created new mini-cluster data directory:{}, deleteOnExit={}”是日志消息,“CLUSTER_DIR”是函数内的一个变量,“proc.getProcessId()”是一个提供与函数逻辑相关联的运行时上下文信息的日志对象。
日志语句: LOG.info(“Created new mini-cluster data directory: {}, deleteOnExit={}”, CLUSTER_DIR, proc.getProcessId());
然而,与代码实践不同的是,日志记录具有高度的主观性,并且在可观察性和系统开销之间存在关键的权衡(Li等人,2020b年;Li等人,2020a年;Zhang等人,2022年)。在大型项目中,由于开发者经验和子组件框架重新定义的不同,相同的代码往往会产生冲突的日志语句(Batoun等人,2024年;Wagner等人,2020年)。最近的研究提出了自动推荐日志语句的方法,以解决这些问题并提高开发过程中的日志标准化(Li等人,2024a年;Zhao等人,2023年;Ding等人,2023b年;Li等人,2024b年)。这些任务可以分为三类(Chen和Jiang,2017年):在哪里记录日志如何记录日志记录什么日志
在哪里记录日志。这项任务建议在代码中插入日志语句的适当位置(Li等人,2020b年)。主流方法依赖于从现有项目中学习日志语句的类似模式,使用基于历史代码训练的监督神经网络来预测日志语句的潜在位置(He等人,2018年)。例如,LogAdvisor(Zhu等人,2015年)和Log20(Zhao等人,2017年)提出了基于控制图和代码上下文分析的日志放置策略。
如何记录日志。这项任务选择适当的日志级别,这控制了运行时日志数据的量。过度记录会降低性能并增加存储需求,而记录不足则会妨碍故障诊断。因此,当前的研究调查了平衡这些权衡的最佳级别。例如,DeepLV(Li等人,2021年)和TeLL(Liu等人,2022年)利用双LSTM网络来学习代码的语法和日志消息特征,从而建议日志级别。
记录什么日志。这项任务是生成详细的日志语句内容。主流方法涉及学习代码上下文以生成高质量的日志语句。例如,LoGenTextPlus(Ding等人,2023a年)和FastLog(Xie等人,2024年)利用机器翻译和生成模型通过分析代码上下文来生成日志内容。然而,这些方法通常需要明确的上下文信息或对日志位置的先验知识,这阻碍了端到端的日志生成。
因此,最近的研究使用文本生成模型将日志语句插入提供的代码片段中(He等人,2018年)。例如,LANCE(Mastropaolo等人,2022年);Mastropaolo(2025年)使用文本翻译模型(T5)(Raffel等人,2020年)在给定的代码片段中生成详细的日志语句。正如Li等人(2024a年)的研究报告所述,现代LLMs(如GPT-4 OpenAI(2025a))在日志生成效率方面显示出潜力。尽管生成模型在代码生成方面具有明显优势,但它们在推荐日志语句方面的应用通常仅限于当前函数及其内部代码块,忽略了函数的执行上下文。为了解决这一限制,SCLogger(Li等人,2024b)试图将思维链(CoT)(Wei等人,2022年)框架和代码知识数据库整合到LLMs中,从而增强了日志变量和内容的生成。
尽管当前的日志生成方法在与日志位置或内容相关的特定任务中表现良好,但它们仍然面临一些挑战。在大型项目中,现有方法由于组件众多(通常定义为子模块或子项目)且日志风格和内容各异,难以准确推荐日志位置,这降低了在统一知识数据库中的搜索效率。此外,代码更新和跨项目集成显著影响了传统深度学习模型的性能,需要不断重新训练以保持准确性。另一方面,纯LLMs在生成精确日志位置方面存在困难,并且在日志生成任务中倾向于产生冗长的日志语句,需要更有效的经验指导(Li等人,2024a)。
因此,我们提出了LogGen,这是一个结合了传统模型和LLMs的端到端日志生成框架。LogGen利用LLMs生成的源代码摘要来建立函数的更通用语义特征,从而增强了传统深度学习模型在代码变化下识别日志位置的鲁棒性。此外,通过将大型项目划分为子组件,创建独立的代码风格知识,并构建函数调用链,LogGen进一步提高了LLMs的生成精度。
我们基于17个长期开发的Java和C++项目的实验表明,LogGen在日志位置F1分数上超过了现有最佳方法41.6%,在文本BLEU-4分数上提高了36.2%。同时,消融实验和基线模型实验证明了LogGen在传统模型协作和代码知识增强方面的有效性。我们进一步模拟了涉及代码更新、知识变化和跨项目交互的场景。结果证实LogGen比现有方法表现出更大的鲁棒性。
我们的贡献总结如下。
  • 我们提出了一种新的特征构建方法,该方法结合了LLM代码摘要、函数位置和代码行。这些特征提高了传统模型在日志位置选择方面的准确性和鲁棒性。
  • 我们提出了一种创新的方法,用于对项目中的原子组件进行聚类,并提取代码风格和块以构建知识数据库。
  • 我们提出了LogGen,这是一个结合了传统模型和LLMs的日志生成框架,其中传统模型用于日志位置选择,而LLMs负责日志消息生成。
  • 我们对长期开发的Java和C++项目进行了广泛的实验。结果验证了LogGen在日志位置和内容方面都优于当前的日志生成方法,显示出对代码变化、领域知识和跨项目变化的更强鲁棒性。
  • 本文的其余部分组织如下。第2节概述了当前方法的主要局限性以及我们研究的动机。第3节详细介绍了我们的特征提取过程和LogGen的框架。第4节和第5节展示了详细的实验设置和结果,第6节讨论了有效性的威胁。第7节回顾了相关工作,第8节提供了总体结论。

    部分片段

    动机

    我们研究了当前日志生成方法在Java和C++项目中的性能,如表1所示。这些Java项目被用于之前的日志生成研究(Li等人,2024b)。选择OpenHarmony项目是因为它们的子组件发展完善,表现出强烈的交互性。这与本文解决的核心研究问题相关,包括子组件命名冲突、不一致的日志风格以及由于持续代码更新而出现的问题

    LogGen概述

    LogGen框架的概述如图5所示。这个端到端的日志生成框架将日志语句插入输入文件或整个项目中。LogGen包括两个核心模块:特征提取和模型训练。? 在特征提取阶段,根据文件位置确定函数的位置特征。使用LLMs提供的描述构建函数的语义特征。随后,我们将这两个特征结合起来形成

    数据集

    DATASET1基于SCLogger(Li等人,2024b)构建,包含十个长期稳定的Java项目和七个C++项目(Openharmony,2025a;Openharmony,2025c;Openharmony,2025e;Openharmony,2025h;Openharmony,2025f;Openharmony,2025g;Openharmony,2025b)。用于评估的最新版本如表1所示,其中显示了代码行数(SLOC)、日志语句数量(# of log statements)以及包含这些语句的函数数量(# of

    评估

    我们的评估解决了以下研究问题。
  • RQ1:LogGen在日志生成方面的效果如何?
  • RQ2:LogGen中不同阶段的影响是什么?
  • RQ3:LogGen与不同LLMs结合时的效果如何?
  • RQ4:LogGen在代码知识变化、代码更新和跨项目方面的鲁棒性如何?
  • RQ5:开发人员对结果的反馈如何?
  • 有效性威胁

    内部有效性威胁涉及不同LLMs之间的能力差异。我们的实验表明,常见的LLMs在日志生成方面的准确性较低,主要是因为它们难以处理长代码和理解提示。通过将这些任务分开,并从历史代码中提取知识指导到CoT或RAG框架中,可以显著提高日志生成的准确性。然而,依赖于指定项目的知识可能会降低模型的

    日志记录实践

    日志作为监控系统的关键数据源,吸引了大量旨在提高故障定位效率和优化日志性能的研究(Chen和Jiang,2017年;Chen和Jiang,2021年;Ding等人,2015年;Yuan等人,2012b年)。基于行业实践的研究(Pecchia等人,2015年)揭示了日志记录实践与开发者行为之间的深刻联系(Kabinna等人,2018年;Shang等人,2014年)。尽管标准化日志记录

    结论

    本文提出了LogGen,这是一个结合了传统深度学习模型和LLMs的集成自动化日志生成框架。LogGen结合了函数位置和代码行来创建更强大的语义特征,利用LLMs来理解代码。此外,深度学习模型通过聚类原子子组件实现了高精度的日志位置。此外,LogGen包括一个针对大型项目的数据提取方法。与RAG框架集成

    数据可用性

    本文的源代码、数据集和部分结果可以在我们的匿名复制包LogGen(Anonymous,2025)中找到。如果被接受,我们将将其转换为存档的开放数据。

    未引用的参考文献

    缺少引用4

    CRediT作者贡献声明

    李敏:写作 – 审阅与编辑,撰写原始草稿,可视化,验证,软件,资源,方法论,调查,形式分析,数据整理,概念化。谭鸥:写作 – 审阅与编辑,资源,调查,数据整理,概念化。陈鹏飞:写作 – 审阅与编辑,监督,资源,项目管理,方法论,资金获取,形式分析,概念化。张传福:写作 – 审阅与编辑,

    利益冲突声明

    作者声明他们没有已知的财务利益或个人关系可能影响本文报告的工作。
    相关新闻
    生物通微信公众号
    微信
    新浪微博
    • 搜索
    • 国际
    • 国内
    • 人物
    • 产业
    • 热点
    • 科普

    热点排行

      今日动态 | 人才市场 | 新技术专栏 | 中国科学人 | 云展台 | BioHot | 云讲堂直播 | 会展中心 | 特价专栏 | 技术快讯 | 免费试用

      版权所有 生物通

      Copyright© eBiotrade.com, All Rights Reserved

      联系信箱:

      粤ICP备09063491号