CN103092742A - 程序日志记录优化方法和系统 - Google Patents
程序日志记录优化方法和系统 Download PDFInfo
- Publication number
- CN103092742A CN103092742A CN2011103378954A CN201110337895A CN103092742A CN 103092742 A CN103092742 A CN 103092742A CN 2011103378954 A CN2011103378954 A CN 2011103378954A CN 201110337895 A CN201110337895 A CN 201110337895A CN 103092742 A CN103092742 A CN 103092742A
- Authority
- CN
- China
- Prior art keywords
- log
- approach
- variable
- constant
- former
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 74
- 238000005457 optimization Methods 0.000 title claims abstract description 47
- 238000013459 approach Methods 0.000 claims description 111
- 238000002347 injection Methods 0.000 claims description 10
- 239000007924 injection Substances 0.000 claims description 10
- 238000012545 processing Methods 0.000 claims description 5
- 230000001960 triggered effect Effects 0.000 claims description 5
- 238000010586 diagram Methods 0.000 description 32
- 230000008569 process Effects 0.000 description 20
- 238000004590 computer program Methods 0.000 description 9
- 230000006870 function Effects 0.000 description 8
- 230000008859 change Effects 0.000 description 7
- 230000008878 coupling Effects 0.000 description 6
- 238000010168 coupling process Methods 0.000 description 6
- 238000005859 coupling reaction Methods 0.000 description 6
- 230000007246 mechanism Effects 0.000 description 6
- 238000013461 design Methods 0.000 description 4
- 239000000203 mixture Substances 0.000 description 4
- 238000011161 development Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 238000003860 storage Methods 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 2
- 238000010276 construction Methods 0.000 description 2
- 230000014509 gene expression Effects 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000001914 filtration Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3466—Performance evaluation by tracing or monitoring
- G06F11/3476—Data logging
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3628—Software debugging of optimised code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3466—Performance evaluation by tracing or monitoring
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3636—Software debugging by tracing the execution of the program
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/865—Monitoring of software
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明涉及应用程序日志技术领域。更具体地,本发明尤其涉及通过将应用程序中原有的日志方法进行优化并重新注入应用程序的方法和系统。根据本发明的一个方面,提供了一种用于优化应用程序日志记录的方法,包括:识别应用程序中的原日志方法;将所述原日志方法中的字符串参数分为常量部分和变量部分;建立所述常量部分和变量部分间的对应关系标识;利用所述常量部分、变量部分以及对应关系标识,构造优化日志方法;通过代码注入,将所述应用程序中的原日志方法替换为所述优化日志方法。通过上述方法,可以减小日志记录的硬盘存储量以及IO操作频率。
Description
技术领域
本发明涉及应用程序日志技术领域。更具体地,本发明尤其涉及通过将应用程序中原有的日志方法进行优化并重新注入应用程序的方法和系统。
背景技术
应用程序的日志方法(Log Method)是在应用程序开发时被注入程序自身代码中的一些指令,用于在程序运行时记录所发生的各种事件,对程序的运行进行监控,从而有助于理解系统及程序的运行状态并对出现的问题进行诊断。对于缺乏用户交互性的应用程序而言,日志记录工作尤为重要。例如,为了监控一个应用程序在运行时出现的网络连接错误,可以在该程序中插入相关的日志方法,将出现网络连接错误所对应的IP地址、出错时间等信息记录下来,存储在日志文件中,以便程序管理员对其进行分析、诊断。有研究显示,一个应用程序中大约有5%的代码是专门用于记录程序日志的。现有的程序日志系统如图2所示:应用程序201中包含程序自身的代码以及用于日志记录的日志方法的代码。在实时运行环境202下,应用程序在运行过程中可能会被触发日志记录,通过执行日志方法203,可以生成日志信息204。日志信息204通常以文件的形式存在,存储于硬盘或其它存储介质上。
目前,程序日志记录主要存在两大问题。其一是存储日志文件会耗费大量的硬盘资源。在程序运行过程中,会有大量的日志信息被记录在硬盘或其它存储装置中,并且日志信息的增长是不受限制的。由于硬盘容量的限制,可能自动清除旧的日志信息,从而导致重要信息丢失。其二,记录大量的日志信息会导致频繁的IO(输入输出)操作,从而降低了应用程序运行的速度。
现有技术中存在解决上述问题的技术方案。根据其中一种现有技术方案是通过根据性能开销(Performance Overhead)来调整日志策略,性能开销指的是由日志记录操作占用的计算资源。这种现有技术方案的实质是以牺牲日志信息的完整性为代价来换取性能的提升,同样存在日志信息丢失的问题,并且其只能在应用程序开发时采用,而无法在不修改已有的程序代码和日志记录机制(legacy mechanism)的前提下减小日志文件的大小。另一种现有技术方案是通过人工手动地更改已有的日志记录机制,但需要耗费大量的人力和时间,需要对程序代码的深入理解,在实践中并不可行。
发明内容
考虑到上述存在的问题,本发明的目的之一在于提供一种减小日志信息存储量的应用程序日志记录优化方法和系统。本发明的又一目的在于提供一种能够降低日志记录操作对应用程序的运行所造成的性能影响的应用程序日志记录优化方法和系统。本发明的再一目的在于提供一种无需改变已有的应用程序中的日志记录机制,就可以减小日志信息存储量降低日志记录操作对应用程序的运行所造成的性能影响的应用程序日志记录优化方法和系统。
根据本发明的一个方面,提供了一种用于优化应用程序日志记录的方法,包括:识别应用程序中的原日志方法;将所述原日志方法中的参数分为常量部分和变量部分;建立所述常量部分和变量部分间的对应关系标识;利用所述常量部分、变量部分以及对应关系标识,构造优化日志方法;以及通过代码注入,将所述应用程序中的原日志方法替换为所述优化日志方法。
根据本发明的一个实施例,对应于常量部分的日志信息仅被记录一次,并且所述对应于变量部分的日志信息在每次被触发时均被记录。
根据本发明的另一方面,提供了一种用于优化应用程序日志记录的系统,包括日志方法识别装置,被配置为识别应用程序中的原日志方法;参数划分装置,被配置为将所述原日志方法中的字符串参数分为常量部分和变量部分;标识建立装置,被配置为建立所述常量部分和变量部分间的对应关系标识;优化日志方法构造装置,被配置为利用所述常量部分、变量部分以及对应关系标识,构造优化日志方法;以及日志方法替换装置,被配置为通过代码注入,将所述应用程序中的原日志方法替换为所述优化日志方法。
根据本发明的方法和系统,可以减小日志信息存储量并降低日志记录的IO操作,从而减小对应用程序的运行所造成的性能影响。同时,代码的注入可在目标代码层面实现,并且无需改变已有的应用程序中的日志记录机制——触发日志记录的条件以及最终生成的日志记录与利用原日志方法的情况下是一致的。
附图说明
通过对结合附图所示出的实施方式进行详细说明,本发明的上述以及其他特征将更加明显,本发明附图中相同的标号表示相同或相似的部件。在附图中,
图1示出了适于用来实现本发明实施方式的示例性计算系统100的框图;
图2示出了现有技术中的程序日志系统的组成模块图;
图3示出了根据本发明一实施例的用于优化应用程序日志记录的方法的流程图;
图4示出了根据本发明另一实施例的用于优化应用程序日志记录的方法的流程图;
图5示出了根据本发明一实施例的用于优化应用程序日志记录的系统的框图;
图6A示出了根据本发明一实施例的原日志文件和优化日志文件的示意图;
图6B示出了根据本发明一实施例的利用优化日志文件记录日志的示意图;
图7示出了根据本发明一实施例的程序日志系统的组成模块图。
具体实施方式
在下文中,将参考附图通过实施方式对本发明提供的用于优化应用程序日志记录的方法和系统进行详细地描述。
所属技术领域的技术人员知道,本发明的多个方面可以体现为系统、方法或计算机程序产品。因此,本发明的多个方面可以具体实现为以下形式,即,可以是完全的硬件、完全的软件(包括固件、驻留软件、微代码等)、或者本文一般称为“电路”、“模块”或“系统”的软件部分与硬件部分的组合。此外,本发明的多个方面还可以采取体现在一个或多个计算机可读介质中的计算机程序产品的形式,该计算机可读介质中包含计算机可用的程序码。
可以使用一个或多个计算机可读的介质的任何组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是——但不限于——电的、磁的、光的、电磁的、红外线的、或半导体的系统、装置、器件或任何以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括以下:有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任何合适的组合。在本文件的语境中,计算机可读存储介质可以是任何包含或存储程序的有形的介质,该程序被指令执行系统、装置或者器件使用或者与其结合使用。
计算机可读的信号介质可包括在基带中或者作为载波一部分传播的、其中体现计算机可读的程序码的传播的数据信号。这种传播的信号可以采用多种形式,包括——但不限于——电磁信号、光信号或任何以上合适的组合。计算机可读的信号介质可以是并非为计算机可读存储介质、但是能发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序的任何计算机可读介质。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于——无线、电线、光缆、RF等等,或者任何合适的上述组合。
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于——无线、电线、光缆、RF等等,或者任何合适的上述组合。
用于执行本发明的操作的计算机程序码,可以以一种或多种程序设计语言的任何组合来编写,所述程序设计语言包括面向对象的程序设计语言-诸如Java、Smalltalk、C++之类,还包括常规的过程式程序设计语言-诸如“C”程序设计语言或类似的程序设计语言。程序码可以完全地在用户的计算上执行、部分地在用户的计算机上执行、作为一个独立的软件包执行、部分在用户的计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在后一种情形中,远程计算机可以通过任何种类的网络——包括局域网(LAN)或广域网(WAN)-连接到用户的计算机,或者,可以(例如利用因特网服务提供商来通过因特网)连接到外部计算机。
以下参照按照本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述本发明的多个方面。要明白的是,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机程序指令实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得通过计算机或其它可编程数据处理装置执行的这些指令,产生实现流程图和/或框图中的方框中规定的功能/操作的装置。
也可以把这些计算机程序指令存储在能指令计算机或其它可编程数据处理装置以特定方式工作的计算机可读介质中,这样,存储在计算机可读介质中的指令产生一个包括实现流程图和/或框图中的方框中规定的功能/操作的指令装置(instruction means)的制造品。
也可以把计算机程序指令加载到计算机或其它可编程数据处理装置上,使得在计算机或其它可编程数据处理装置上执行一系列操作步骤,以产生计算机实现的过程,从而在计算机或其它可编程装置上执行的指令就提供实现流程图和/或框图中的方框中规定的功能/操作的过程。
下面参看图1。图1示出了适于用来实现本发明实施方式的示例性计算系统100的框图。如所示,计算机系统100可以包括:CPU(中央处理单元)101、RAM(随机存取存储器)102、ROM(只读存储器)103、系统总线104、硬盘控制器105、键盘控制器106、串行接口控制器107、并行接口控制器108、显示控制器109、硬盘110、键盘111、串行外部设备112、并行外部设备113和显示器114。在这些设备中,与系统总线104耦合的有CPU 101、RAM 102、ROM 103、硬盘控制器105、键盘控制器106、串行控制器107、并行控制器108和显示控制器109。硬盘110与硬盘控制器105耦合,键盘111与键盘控制器106耦合,串行外部设备112与串行接口控制器107耦合,并行外部设备113与并行接口控制器108耦合,以及显示器114与显示控制器109耦合。应当理解,图1所述的结构框图仅仅为了示例的目的而示出的,而不是对本发明范围的限制。在某些情况下,可以根据具体情况而增加或者减少某些设备。
图3示出了根据本发明一实施例的用于优化应用程序日志记录的方法的流程图。图3所示的方法从步骤301开始。在步骤301中,识别应用程序中的原日志方法。这里,“方法”是面向对象程序中的概念,是程序“类”的下层概念,程序代码包含在“方法”中,所有的“方法”都在“类”中声明。“原日志方法”即指的是在应用程序开发过程中即编写好的用于程序日志记录的代码,以区别于下文中的“优化日志方法”。根据本发明一实施例,由于大多数应用程序只提供编译后的目标代码(binary code),而不提供源代码(source code),因此通过检索应用程序的目标代码来识别其中所包含的原日志方法。根据本发明另一实施例,在应用程序提供源代码的情况下,通过检索其源代码来识别原日志方法。关于具体能够从程序代码中识别出其中包含的日志方法,本领域技术人员应当了解,程序中的日志方法都是具有特定名称的(不管用于编写何种面向对象程序),因此可以通过从程序所有代码中检索出符合特定名称的“方法”,即可识别出日志方法。例如,java/io/PrintStream.println:(Ljava/lang/String;)V即为Java代码中的一个特定的日志方法,其中java/io/PrintStream.println:是其方法名,:(Ljava/lang/String;)是该方法的参数类型,V是方法返回类型。应当了解,本发明不限于Java语言,而可以适用于任何面向对象语言。
日志方法可能有很多,有些用于处理字符串参数,有些用于处理非字符串参数。根据本发明一实施例,在步骤301中识别原日志方法是指仅识别用于处理字符串参数(String Parameter)的日志方法。根据本发明另一实施例,在步骤301中识别原日志方法可以识别出所有的日志方法,然后在后续的步骤中在过滤掉那些非用于处理字符串参数的日志方法。
接下来,在步骤302中,将所识别出的原日志方法中的字符串参数分为常量部分和变量部分。顾名思义,“常量部分”指的是无论程序运行时产生何种日志内容,该部分字符串的内容都是固定的。而“变量部分”则指该部分字符串的内容在记录日志过程中可能发生变化。如图6A所示的原日志方法的示例,其括号内的部分即为日志方法System.out.println处理的字符串参数,其中的“It’s not able to get connection from”以及“now”在日志记录中不会发生变化,因此属于字符串参数的常量部分,而ip则指具体的IP地址,显然是依具体地址而发生改变的,因此属于字符串参数的变量部分。通常,字符串参数的常量部分和变量部分在源代码中的字面表达具有明显的差别,例如是否具有引号(“”)等,在目标代码中相应地也具有明显的差别,可以利用检索其参数指令特征来判断究竟是常量字符串还是变量字符串。图4及相应的文字部分将具体介绍识别常量部分和变量部分的实施例。
在步骤303中,建立所述常量部分和变量部分间的对应关系标识。根据本发明一实施例,对应关系标识为特定的ID。例如,将图6A中的常量部分和变量部分均赋予特定的对应关系标识“id#1”。建立对应关系标识的原因是为了在后续步骤中将常量部分和变量部分分开处理时不会丢失两者间的关联关系。本领域技术人员应当理解,对应关系标识可能包括很多种,不限于数字标识、字符标识等,只要能够将对应于原日志方法中所处理的一条字符串参数中的常量部分和变量部分唯一地关联起来即可。
接下来,图3所示的方法进行至步骤304,利用所述常量部分、变量部分以及对应关系标识,构造优化日志方法。如图6A箭头右侧框图所示,所构造的优化日志方法中包含原日志方法中的所有参数,但是将原日志方法中的字符串参数按常量部分和变量部分分开,并均加入了所建立的对应关系标识。尤其需要注意的是,该框图中示出的优化构造方法在方法名中加入了“ConsAndVar”,表明参数包含常量和变量两部分,也就意味着执行优化构造方法时可以将常量部分和变量部分分开记录。需要指出的是,图6A中的示例仅仅是针对Java语言所举的例子,并且为了便于理解以源代码的形式展现。本领域技术人员应当理解,所有面向对象语言均可基于本发明的构思执行图3所示的方法,并且大多数情况下是在目标代码层面执行,而非在源代码层面执行。
在步骤305中,通过代码注入,将所述应用程序中的原日志方法替换为所构造的优化日志方法。由于在步骤301识别出了原日志方法,在步骤304中构造了优化日志方法,因此可以在步骤305中进行替换。替换的目的是为了在运行应用程序时执行优化日志方法,从而将原日志方法中的返回参数分成常量、变量两部分进行记录,由于常量中的字符串内容固定,因此只需记录一次,而变量中的字符串内容不固定,因此需要记录多次。本领域技术人员应当理解,在目标代码层面的代码注入(Code Instrument)技术属于本领域的公知技术,因此在本发明中不做赘述。
图6B示出了根据本发明一实施例的利用优化日志文件记录日志的示意图。如图6B所示,箭头左边的框图为执行原日志文件所生成的日志记录,可以看出,执行原日志文件时认为参数是一个完整的字符串,因此每次触发日志记录(某个IP地址无法连接)时均需完整地向日志文件中输出完整的字符串内容,导致“It’s not able to get connection from”以及“now”出现在每条日志记录中,长此以往就会带来大量的I/O操作并导致硬盘空间迅速被占用。而图6B中箭头右边的框图则示出了执行如图6A所示的优化日志文件而生成的日志记录。可以看出,字符串参数中的常量部分被记录在常量日志文件中,且仅记录一次,其中包含对应关系标识id#1,而变量部分则被记录在变量日志文件中,且每次触发均记录。这样一来,如果需要阅读完整的日志文件的话,就可以通过对应关系标识id#1将对应的常量日志文件和变量日志文件组合到一起,生成完整的日志文件。可以理解,常量日志文件中可以记录多个日志方法的常量参数,而变量日志文件中可以记录多个日志方法的变量参数,由于有特定对应关系标识,因此不会导致在组合日志文件时发生错误。
如上所述,利用图3所示的方法并参考图6示出的具体实例,可以减小日志信息存储量并降低日志记录的IO操作,从而减小对应用程序的运行所造成的性能影响。同时,代码的注入可在目标代码层面实现,并且无需改变已有的应用程序中的日志记录机制——触发日志记录的条件以及最终生成的日志记录与利用原日志方法的情况下是完全一致的。
图4示出了根据本发明另一实施例的用于优化应用程序日志记录的方法的流程图。图4所示的方法从步骤401开始。在步骤401中,检索应用程序的目标代码。接下来在步骤402中,在应用程序的类中识别具有特定名称且用于处理字符串参数的原日志方法。步骤401和402对应于图3中的步骤301,在上文已有过详细描述。
接下,进行至步骤403,定位原日志方法中用于创建字符串参数的指令。虽然在步骤402中已经识别了处理字符串参数的原日志方法,但是对于一个日志方法而言,其中所包含的指令可能不仅仅是用于创建字符串参数的指令,因此为了后续对字符串参数进行分类,需要定位用于创建字符串参数的指令。考虑到在面向对象语言编写的程序中,通常是先将参数堆栈再调用所声明的方法,根据本发明的一个实施例,通过利用指针先迭代地找到把参数压栈的指令,来定位构造字符串参数的指令。本领域技术人员应当理解,可以利用现有技术找到日志方法中把参数压栈的指令。
接下来在步骤404中,检索所定位的用于创建字符串参数的指令。根据本发明的一个实施例,检索所定位的用于创建字符串参数的指令包括逐行扫描用于创建字符串参数的指令中的代码。然后,在步骤405中判断所检索的用于创建字符串参数的指令是否为处理常量字符串的常量参数指令。根据本发明的一个实施例,在Java程序中,ldc#number表示常量字符串操作,因此如果检索到ldc#number指令(判断结果为是),则在步骤406中确定所述指令所创建的字符串参数为常量部分。相应地,如果判断结果为否,则在步骤407中确定所述指令所创建的字符串参数为变量部分。需要指出的是,在非Java的其它面向对象语言编写的程序中,本领域技术人员可以在不脱离本发明构思的前提下,根据具体的语言规范来设计判断指令是否用于创建常量字符串的方法。
接下来,无论判断出是常量部分还是变量部分,均进行至步骤408,建立所述常量部分和变量部分间的对应关系标识。步骤408对应于图3中的步骤303,在此不在赘述。图4所示的方法进行至步骤409。
在步骤409中,将对应关系标识分别加入常量部分和变量部分,并将常量和变量部分合并,以构造优化日志方法。步骤409的实现在图6A中箭头右侧的框图中可以得到源代码层面直观的展示。如图6A所示,步骤409中将常量和变量部分合并是指将常量和变量部分放在优化日志方法中的一个大参数下的两个子参数(new String)结构中,这区别于原日志方法中用字符串缓冲附加方法(“+”)连接的单参数结构。需要指出的是,具体如何利用常量部分、变量部分以及对应关系标识来构造优化日志方法,依据不同的语言规范可能有所不同,本发明的实施例仅以Java语言为例阐述本发明的构思可以实现,并不试图对具体的构造优化日志的方法做出任何限制。
接下来,在步骤410中,通过代码注入将应用程序中的原日志方法替换为所构造的优化日志方法。该步骤对应于图3中的步骤305,在此不再赘述。
最后,在步骤411中,执行优化日志方法,以生成所述应用程序的日志记录。根据本发明的一个实施例,执行优化日志方法,以生成所述应用程序的日志记录包括将对应于常量部分的日志信息及对应关系标识记录在常量日志文件中,以及将对应于变量部分的日志信息以及对应关系标识记录在变量日志文件中。根据本发明的一个实施例,对应于常量部分的日志信息仅被记录一次,并且对应于变量部分的日志信息在每次被触发日志记录时均被记录。当然,记录的次数并非绝对,本领域技术人员完全可以根据需要调整常量日志信息的记录次数,可能大于一次但是少于每次都记录。
本领域技术人员应当理解,即使不实际执行所替换的优化日志方法,本发明的发明目的也已实现——所构造的日志方法本身的特点即可以保证减少日志记录的IO操作、减少日志记录对硬盘存储空间的占用等。
图5示出了根据本发明一实施例的用于优化应用程序日志记录的系统的框图。图5所示的系统在整体上由系统500表示,具体地系统500包括日志方法识别装置501,被配置为识别应用程序中的原日志方法;参数划分装置502,被配置为将所述原日志方法中的字符串参数分为常量部分和变量部分;标识建立装置503,被配置为建立所述常量部分和变量部分间的对应关系标识;优化日志方法构造装置504,被配置为利用所述常量部分、变量部分以及对应关系标识,构造优化日志方法;日志方法替换装置505,被配置为通过代码注入,将所述应用程序中的原日志方法替换为所述优化日志方法。可以理解,系统500中的装置501-505分别对应于图3所示的方法中的步骤301-305,在此不再赘述。
图7示出了根据本发明一实施例的程序日志系统的组成模块图。图7的目的是为了与图2示出的现有技术中的程序日志系统的组成模块进行对比,以更好地体现本发明的构思及创新点,但并非对本发明进行任何限制。图7示出的程序日志系统包括应用程序701、优化日志分析器702、实时运行环境703、优化日志方法704、常量日志705以及变量日志706。其中应用程序701对应于图2中的应用程序201,实时运行环境703对应于图2中的应用程序202,在此不再赘述。而优化日志分析器702的作用是执行图3中的步骤301-305,因此优化日志方法704替换了图2中的原日志方法203。因此,利用优化日志方法可以将常量参数存储在常量日志705中,将变量参数存储在变量日志706中。
附图中的流程图和框图,图示了按照本发明各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,所述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
虽然以上结合具体实例,对本发明的利用远程应用处理本地文件的系统及方法进行了详细描述,但本发明并不限于此。本领域普通技术人员能够在说明书教导之下对本发明进行多种变换、替换和修改而不偏离本发明的精神和范围。应该理解,所有这样的变化、替换、修改仍然落入本发明的保护范围之内。本发明的保护范围由所附权利要求来限定。
Claims (16)
1.一种用于优化应用程序日志记录的方法,包括:
识别应用程序中的原日志方法;
将所述原日志方法中的字符串参数分为常量部分和变量部分;
建立所述常量部分和变量部分间的对应关系标识;
利用所述常量部分、变量部分以及所述对应关系标识,构造优化日志方法;
通过代码注入,将所述原日志方法替换为所述优化日志方法。
2.如权利要求1所述的方法,其中利用所述常量部分、变量部分以及对应关系标识,构造优化日志方法包括:
将所述对应关系标识分别加入所述常量部分和变量部分;以及
将含有所述对应关系标识的常量部分和变量部分合并,以构造优化日志方法。
3.如权利要求1或2所述的方法,其中将所述原日志方法中的字符串参数分为常量部分和变量部分包括:
响应于原日志方法中用于创建字符串参数的指令为处理常量字符串的常量参数指令,确定所述指令所创建的字符串参数为常量部分;以及
响应于原日志方法中用于创建字符串参数的指令为处理变量字符串的变量参数指令,确定所述指令所创建的字符串参数为变量部分。
4.如权利要求3所述的方法,其中将所述原日志方法中的参数分为常量部分和变量部分进一步包括:
定位所述原日志方法中用于创建字符串参数的指令;以及
检索所述原日志方法中用于创建字符串参数的指令。
5.如权利要求1或2所述的方法,其中识别应用程序中的原日志方法包括:
检索所述应用程序的目标代码;以及
在所述应用程序的类中识别具有特定名称且用于处理字符串参数的原日志方法。
6.如权利要求1所述的方法,进一步包括:
利用所述优化日志方法生成所述应用程序的日志记录。
7.如权利要求6所述的方法,其中利用所述优化日志方法生成所述应用程序的日志记录包括:
将对应于所述常量部分的日志信息以及所述对应关系标识记录在常量日志文件中;以及
将对应于所述变量部分的日志信息以及所述对应关系标识记录在变量日志文件中。
8.如权利要求7所述的方法,其中所述对应于常量部分的日志信息仅被记录一次,并且所述对应于变量部分的日志信息在每次被触发时均被记录。
9.一种用于优化应用程序日志记录的系统,包括:
日志方法识别装置,被配置为识别应用程序中的原日志方法;
参数划分装置,被配置为将所述原日志方法中的字符串参数分为常量部分和变量部分;
标识建立装置,被配置为建立所述常量部分和变量部分间的对应关系标识;
优化日志方法构造装置,被配置为利用所述常量部分、变量部分以及所述对应关系标识,构造优化日志方法;以及
日志方法替换装置,被配置为通过代码注入,将所述原日志方法替换为所述优化日志方法。
10.如权利要求1所述的系统,其中优化日志方法构造装置被配置为:
将所述对应关系标识分别加入所述常量部分和变量部分;以及
将含有所述对应关系标识的常量部分和变量部分合并,以构造优化日志方法。
11.如权利要求9或10所述的系统,其中参数划分装置被配置为:
响应于原日志方法中用于创建字符串参数的指令为处理常量字符串的常量参数指令,确定所述指令所创建的字符串参数为常量部分;以及
响应于原日志方法中用于创建字符串参数的指令为处理变量字符串的变量参数指令,确定所述指令所创建的字符串参数为变量部分。
12.如权利要求11所述的系统,其中参数划分装置被进一步配置为:
定位所述原日志方法中用于创建字符串参数的指令;以及
检索所述原日志方法中用于创建字符串参数的指令。
13.如权利要求9或10所述的系统,其中日志方法识别装置被配置为:
检索所述应用程序的目标代码;以及
在应用程序的类中识别具有特定名称且用于处理字符串参数的原日志方法。
14.如权利要求9所述的系统,进一步包括:
日志记录生成装置,被配置为利用所述优化日志方法生成所述应用程序的日志记录。
15.如权利要求14所述的系统,其中日志记录生成装置被配置为:
将对应于所述常量部分的日志信息以及所述对应关系标识记录在常量日志文件中;以及
将对应于所述变量部分的日志信息以及所述对应关系标识记录在变量日志文件中。
16.如权利要求15所述的系统,其中所述对应于常量部分的日志信息仅被记录一次,并且所述对应于变量部分的日志信息在每次被触发时均被记录。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110337895.4A CN103092742B (zh) | 2011-10-31 | 2011-10-31 | 程序日志记录优化方法和系统 |
US13/653,571 US8949799B2 (en) | 2011-10-31 | 2012-10-17 | Program log record optimization |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110337895.4A CN103092742B (zh) | 2011-10-31 | 2011-10-31 | 程序日志记录优化方法和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103092742A true CN103092742A (zh) | 2013-05-08 |
CN103092742B CN103092742B (zh) | 2015-08-19 |
Family
ID=48173819
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110337895.4A Expired - Fee Related CN103092742B (zh) | 2011-10-31 | 2011-10-31 | 程序日志记录优化方法和系统 |
Country Status (2)
Country | Link |
---|---|
US (1) | US8949799B2 (zh) |
CN (1) | CN103092742B (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104283723A (zh) * | 2014-10-31 | 2015-01-14 | 北京蓝汛通信技术有限责任公司 | 网络访问日志处理方法及装置 |
CN104378234A (zh) * | 2014-11-19 | 2015-02-25 | 北京数迅科技有限公司 | 跨数据中心的数据传输处理方法及系统 |
CN106648467A (zh) * | 2016-12-28 | 2017-05-10 | 税友软件集团股份有限公司 | 一种日志生成方法及系统 |
CN109542413A (zh) * | 2018-10-25 | 2019-03-29 | 腾讯科技(成都)有限公司 | 数据的处理方法、装置、存储介质和电子装置 |
CN110377576A (zh) * | 2019-07-24 | 2019-10-25 | 中国工商银行股份有限公司 | 创建日志模板的方法和装置、日志分析方法 |
CN111488260A (zh) * | 2019-01-29 | 2020-08-04 | 华为技术有限公司 | 数据模板获取方法、装置、计算机设备以及可读存储介质 |
CN112100018A (zh) * | 2019-06-17 | 2020-12-18 | 腾讯科技(深圳)有限公司 | 一种日志信息生成的方法及相关装置 |
CN113179265A (zh) * | 2021-04-26 | 2021-07-27 | 湖南蚁坊软件股份有限公司 | 一种日志压缩加密方法、装置、设备及存储介质 |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8627302B2 (en) * | 2007-11-27 | 2014-01-07 | Oracle America, Inc. | Sampling based runtime optimizer for efficient debugging of applications |
US9063803B1 (en) * | 2013-04-29 | 2015-06-23 | Amazon Technologies, Inc. | Rich recording and playback of program execution |
US9274931B2 (en) | 2013-05-06 | 2016-03-01 | International Business Machines Corporation | Inserting implicit sequence points into computer program code to support debug operations |
JP6244992B2 (ja) * | 2014-03-07 | 2017-12-13 | 富士通株式会社 | 構成情報管理プログラム、構成情報管理方法、及び構成情報管理装置 |
US11132356B2 (en) | 2018-08-31 | 2021-09-28 | International Business Machines Corporation | Optimizing data entries in a log |
CN109857716B (zh) * | 2019-01-28 | 2023-06-27 | 平安科技(深圳)有限公司 | 系统交互日志记录方法、装置及存储介质、服务器 |
CN112527265A (zh) * | 2019-09-19 | 2021-03-19 | 深圳Tcl数字技术有限公司 | 一种日志自动注入的方法和计算机设备 |
CN111475324B (zh) * | 2020-04-03 | 2024-03-15 | 西安广和通无线软件有限公司 | 日志信息的分析方法、装置、计算机设备和存储介质 |
CN112579553B (zh) * | 2020-12-15 | 2024-05-17 | 京东科技控股股份有限公司 | 用于记录信息的方法和装置 |
CN113836031B (zh) * | 2021-09-29 | 2024-05-10 | 长江存储科技有限责任公司 | 用于嵌入式系统测试的系统、方法、设备以及介质 |
CN114218106A (zh) * | 2021-12-16 | 2022-03-22 | 建信金融科技有限责任公司 | 系统测试方法和装置 |
CN114721916A (zh) * | 2022-03-08 | 2022-07-08 | 北京健康之家科技有限公司 | 日志生成方法、装置、终端设备及介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN2519964Y (zh) * | 2001-09-03 | 2002-11-06 | 广州广电运通金融电子有限公司 | 电子日志记录设备 |
CN101009699A (zh) * | 2006-01-25 | 2007-08-01 | 姜斌斌 | 透明本地安全环境系统及其实现方法 |
US20080235297A1 (en) * | 2007-03-22 | 2008-09-25 | Innerbus Co., Ltd. | Method for Indexing a Large Log File, Computer-Readable Medium for Storing a Program for Executing the Method, and System for Performing the Same |
US20090007065A1 (en) * | 2007-06-29 | 2009-01-01 | Alcatel-Lucent | Logging system and method for computer software |
Family Cites Families (25)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020087949A1 (en) * | 2000-03-03 | 2002-07-04 | Valery Golender | System and method for software diagnostics using a combination of visual and dynamic tracing |
KR100390853B1 (ko) | 2000-06-07 | 2003-07-10 | 차상균 | 주 메모리 트랜잭션 처리 시스템에서 병렬적 회복 연산을 위한 디퍼런셜 로깅 방법 및 장치 |
US7110936B2 (en) * | 2001-02-23 | 2006-09-19 | Complementsoft Llc | System and method for generating and maintaining software code |
FR2822002B1 (fr) | 2001-03-12 | 2003-06-06 | France Telecom | Authentification cryptographique par modules ephemeres |
WO2003081433A1 (en) | 2002-03-26 | 2003-10-02 | Nokia Corporation | Method and apparatus for compressing log record information |
US7188279B2 (en) | 2002-06-28 | 2007-03-06 | Canon Kabushiki Kaisha | Method, program, and storage medium for acquiring logs |
US7086034B2 (en) | 2002-06-28 | 2006-08-01 | Canon Kabushiki Kaisha | Method, program, and storage medium for acquiring logs |
US7305564B2 (en) | 2002-12-19 | 2007-12-04 | International Business Machines Corporation | System and method to proactively detect software tampering |
US7191256B2 (en) | 2003-12-19 | 2007-03-13 | Adams Lyle E | Combined host interface controller for conducting communication between a host system and multiple devices in multiple protocols |
CN100347669C (zh) | 2003-12-30 | 2007-11-07 | 佳能株式会社 | 运行日志取得方法 |
US7444362B2 (en) | 2004-07-27 | 2008-10-28 | Halliburton Energy Services, Inc. | Method and system of sending a reduced representation of logging data to log analysis applications |
US8499293B1 (en) * | 2005-09-28 | 2013-07-30 | Oracle America, Inc. | Symbolic renaming optimization of a trace |
US8799882B2 (en) * | 2005-12-07 | 2014-08-05 | Microsoft Corporation | Compiler support for optimizing decomposed software transactional memory operations |
KR100725415B1 (ko) | 2005-12-24 | 2007-06-07 | 삼성전자주식회사 | 데이터베이스의 로그병합 방법 및 장치 |
US8307346B2 (en) * | 2006-06-09 | 2012-11-06 | Oracle America, Inc. | Atomic groups for debugging |
US8024708B2 (en) * | 2006-06-20 | 2011-09-20 | Google Inc. | Systems and methods for debugging an application running on a parallel-processing computer system |
US8239831B2 (en) * | 2006-10-11 | 2012-08-07 | Micro Focus (Ip) Limited | Visual interface for automated software testing |
KR100862661B1 (ko) | 2006-11-16 | 2008-10-10 | 삼성전자주식회사 | 지연된 로깅 방법 및 그 장치 |
US8209662B2 (en) * | 2006-12-04 | 2012-06-26 | Microsoft Corporation | Application retargeting |
US8418146B2 (en) * | 2008-11-26 | 2013-04-09 | Microsoft Corporation | Sampling techniques for dynamic data-race detection |
US8473902B2 (en) * | 2009-08-07 | 2013-06-25 | International Business Machines Corporation | Identifying source code elements for refactoring |
US9529694B2 (en) * | 2009-09-14 | 2016-12-27 | Oracle International Corporation | Techniques for adaptive trace logging |
US20110191758A1 (en) * | 2010-01-29 | 2011-08-04 | Michael Scharf | Optimized Memory Allocator By Analyzing Runtime Statistics |
US8732671B2 (en) * | 2010-02-26 | 2014-05-20 | Red Hat, Inc. | Generating stack traces of call stacks that lack frame pointers |
US8938720B2 (en) * | 2010-11-30 | 2015-01-20 | Sap Se | Trace visualization for object oriented programs |
-
2011
- 2011-10-31 CN CN201110337895.4A patent/CN103092742B/zh not_active Expired - Fee Related
-
2012
- 2012-10-17 US US13/653,571 patent/US8949799B2/en active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN2519964Y (zh) * | 2001-09-03 | 2002-11-06 | 广州广电运通金融电子有限公司 | 电子日志记录设备 |
CN101009699A (zh) * | 2006-01-25 | 2007-08-01 | 姜斌斌 | 透明本地安全环境系统及其实现方法 |
US20080235297A1 (en) * | 2007-03-22 | 2008-09-25 | Innerbus Co., Ltd. | Method for Indexing a Large Log File, Computer-Readable Medium for Storing a Program for Executing the Method, and System for Performing the Same |
US20090007065A1 (en) * | 2007-06-29 | 2009-01-01 | Alcatel-Lucent | Logging system and method for computer software |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104283723B (zh) * | 2014-10-31 | 2018-09-21 | 北京蓝汛通信技术有限责任公司 | 网络访问日志处理方法及装置 |
CN104283723A (zh) * | 2014-10-31 | 2015-01-14 | 北京蓝汛通信技术有限责任公司 | 网络访问日志处理方法及装置 |
CN104378234A (zh) * | 2014-11-19 | 2015-02-25 | 北京数迅科技有限公司 | 跨数据中心的数据传输处理方法及系统 |
CN104378234B (zh) * | 2014-11-19 | 2018-09-07 | 北京数介科技有限公司 | 跨数据中心的数据传输处理方法及系统 |
CN106648467A (zh) * | 2016-12-28 | 2017-05-10 | 税友软件集团股份有限公司 | 一种日志生成方法及系统 |
CN109542413A (zh) * | 2018-10-25 | 2019-03-29 | 腾讯科技(成都)有限公司 | 数据的处理方法、装置、存储介质和电子装置 |
CN111488260A (zh) * | 2019-01-29 | 2020-08-04 | 华为技术有限公司 | 数据模板获取方法、装置、计算机设备以及可读存储介质 |
CN111488260B (zh) * | 2019-01-29 | 2023-12-08 | 华为云计算技术有限公司 | 数据模板获取方法、装置、计算机设备以及可读存储介质 |
CN112100018B (zh) * | 2019-06-17 | 2023-10-13 | 腾讯科技(深圳)有限公司 | 一种日志信息生成的方法及相关装置 |
CN112100018A (zh) * | 2019-06-17 | 2020-12-18 | 腾讯科技(深圳)有限公司 | 一种日志信息生成的方法及相关装置 |
CN110377576A (zh) * | 2019-07-24 | 2019-10-25 | 中国工商银行股份有限公司 | 创建日志模板的方法和装置、日志分析方法 |
CN110377576B (zh) * | 2019-07-24 | 2021-10-29 | 中国工商银行股份有限公司 | 创建日志模板的方法和装置、日志分析方法 |
CN113179265A (zh) * | 2021-04-26 | 2021-07-27 | 湖南蚁坊软件股份有限公司 | 一种日志压缩加密方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN103092742B (zh) | 2015-08-19 |
US20130111451A1 (en) | 2013-05-02 |
US8949799B2 (en) | 2015-02-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103092742A (zh) | 程序日志记录优化方法和系统 | |
US11599356B1 (en) | Systems and methods for legacy source code optimization and modernization | |
CN107632842B (zh) | 规则配置和发布方法、系统、设备及存储介质 | |
JP5602597B2 (ja) | 外来情報を区分けすることにより仮想マシン・コードをメモリ最適化する方法、コンピュータ・プログラム、およびシステム | |
US8661023B1 (en) | Optimizing search query logic to speed retrieval | |
US20230117105A1 (en) | On-demand loading of dynamic scripting language code for reduced memory usage | |
US11593342B2 (en) | Systems and methods for database orientation transformation | |
JP5791149B2 (ja) | データベース・クエリ最適化のためのコンピュータで実装される方法、コンピュータ・プログラム、およびデータ処理システム | |
CN110780879B (zh) | 一种基于智能编译技术的决策执行方法、装置、设备及介质 | |
CN103729235A (zh) | Java虚拟机的编译方法和Java虚拟机 | |
JP2015118609A (ja) | 予め決められた複数のビット幅のデータに対して操作を行う命令を使用してツリーの検索を行うための方法、並びに、当該命令を使用してツリーの検索を行うためのコンピュータ及びそのコンピュータ・プログラム | |
CN109871290B (zh) | 应用于Java的调用堆栈追踪方法、装置和存储介质 | |
CN105446725A (zh) | 用于模型驱动开发的方法和系统 | |
US11704186B2 (en) | Analysis of deep-level cause of fault of storage management | |
CN105446705A (zh) | 用于确定配置文件的特性的方法和装置 | |
CN112181951B (zh) | 一种异构数据库数据迁移方法、装置及设备 | |
JP2021530073A (ja) | 分散コンピューティングデバイスの自動制御 | |
CN105302536A (zh) | MapReduce应用的相关参数的配置方法和装置 | |
CN107169092A (zh) | 交互过程中智能识别并处理敏感内容的方法及系统 | |
US20190087160A1 (en) | System and method for creating domain specific language | |
JP2023553220A (ja) | マルチインスタンスプロセスのためのプロセスマイニング | |
CN105574031A (zh) | 用于数据库索引的方法和系统 | |
CN113282606A (zh) | 数据处理方法、装置、存储介质和计算设备 | |
US10761940B2 (en) | Method, device and program product for reducing data recovery time of storage system | |
CN110908644B (zh) | 状态节点的配置方法、装置、计算机设备和存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20150819 |