CN111897787A - 一种面向业务逻辑实现日志输出的方法及装置 - Google Patents
一种面向业务逻辑实现日志输出的方法及装置 Download PDFInfo
- Publication number
- CN111897787A CN111897787A CN202010554138.1A CN202010554138A CN111897787A CN 111897787 A CN111897787 A CN 111897787A CN 202010554138 A CN202010554138 A CN 202010554138A CN 111897787 A CN111897787 A CN 111897787A
- Authority
- CN
- China
- Prior art keywords
- log
- module
- sub
- service logic
- processing
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 32
- 238000012545 processing Methods 0.000 claims abstract description 49
- 230000008569 process Effects 0.000 description 8
- 230000009471 action Effects 0.000 description 4
- 238000013459 approach Methods 0.000 description 3
- 238000012827 research and development Methods 0.000 description 2
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 230000008676 import Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/18—File system types
- G06F16/1805—Append-only file systems, e.g. using logs or journals to store data
- G06F16/1815—Journaling file systems
-
- 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
Abstract
本发明公开了一种面向业务逻辑实现日志输出的方法,当调用处理业务逻辑的主模块时,所述主模块根据预先定义的日志优选级,输出各个子模块对应的日志内容,将错误日志的输出面向逻辑集中输出,解决由于错误日志是分散的不易维护,输出的日志信息很容易出现重复而造成大量的冗余等问题。
Description
技术领域
本申请涉及日志处理技术领域,具体涉及一种面向业务逻辑实现日志输出的方法,同时涉及一种面向业务逻辑实现日志输出的装置。
背景技术
错误管理一定离不开报告错误以便我们针对错误找出解决方法,错误信息大都以日志的形式输出。在日志所提供的信息不足以定位问题的情形下,就需要重现错误。如果错误很容易重试,那基本上能快速地解决。但也存在错误因为不易重视而使得我们难以查错的情况。
在软件系统的研发中,研发人员需要第一时间解决出现的问题,研发过程中需要重视的心态去思考应该输出哪些必要的日志信息。由于大量的日志的输出不可避免地会影响程序的性能,所以,需要思考怎样有效地组织错误日志,以尽可能做到既方便查错又不影响程序的性能。
发明内容
本申请提供一种面向业务逻辑实现日志输出的方法,解决由于错误日志是分散的不易维护。输出的日志信息很容易出现重复而造成大量的冗余等问题。
本申请提供一种面向业务逻辑实现日志输出的方法,包括:
定义处理业务逻辑模块的错误码;
根据所述处理业务逻辑的各个子模块的功能,将包含所述错误码的日志内容添加至所述各个子模块,为所述各个子模块添加日志;
当调用处理业务逻辑的主模块时,所述主模块根据预先定义的日志优选级,输出各个子模块对应的日志内容。
优选的,错误码,包括:
所述处理业务逻辑模块各个子模块的名称和错误类型。
优选的,根据所述处理业务逻辑的各个子模块的功能,将所述包含错误码的日志内容添加至所述各个子模块,为所述各个子模块添加日志,包括:
根据所述处理业务逻辑的各个子模块的功能,获取各个子模块对应的错误码;
将所述包含错误码的日志内容添加至对应的各个子模块,从而为所述各个子模块添加日志。
优选的,预先定义的日志优先级,包括:
致命、错误和调试。
优选的,当调用处理业务逻辑的主模块时,所述主模块根据预先定义的日志优选级,输出各个子模块对应的日志内容,包括:
当调用处理业务逻辑的主模块时,所述主模块根据业务逻辑调用所述主模块包含的子模块;
所述子模块执行时,处理业务逻辑的主模块根据预先定义的日志优先级,输出被调用的子模块对应的日志内容。
优选的,输出被调用的子模块对应的日志内容,包括:
输出被调用的子模块对应的错误码、日志的优先级、日志产生的时间和位置。
本申请同时提供一种面向业务逻辑实现日志输出的装置,包括:
错误码定义单元,用于定义处理业务逻辑模块的错误码;
日志添加单元,用于根据所述处理业务逻辑的各个子模块的功能,将包含所述错误码的日志内容添加至所述各个子模块,为所述各个子模块添加日志;
日志内容输出单元,用于当调用处理业务逻辑的主模块时,所述主模块根据预先定义的日志优选级,输出各个子模块对应的日志内容。
优选的,日志添加单元,包括:
错误码获取子单元,用于根据所述处理业务逻辑的各个子模块的功能,获取各个子模块对应的错误码;
日志添加子单元,用于将所述错误码添加至对应的各个子模块,从而为所述各个子模块添加日志。
优选的,日志内容输出单元,包括:
模块调用子单元,用于当调用处理业务逻辑的主模块时,所述主模块根据业务逻辑调用所述主模块包含的子模块;
日志内容输出子单元,用于所述子模块执行时,处理业务逻辑的主模块根据预先定义的日志优先级,输出被调用的子模块对应的日志内容。
本申请提供一种面向业务逻辑实现日志输出的方法,能够使错误日志信息是面向逻辑集中输出,解决由于错误日志是分散的不易维护,输出的日志信息很容易出现重复而造成大量的冗余等问题。
附图说明
图1是本申请提供的一种面向业务逻辑实现日志输出的方法流程示意图;
图2是本申请提供的一种面向业务逻辑实现日志输出的装置示意图。
具体实施方式
在下面的描述中阐述了很多具体细节以便于充分理解本申请。但是本申请能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本申请内涵的情况下做类似推广,因此本申请不受下面公开的具体实施的限制。
图1是本申请提供的一种面向业务逻辑实现日志输出的方法流程示意图,下面结合图1对本申请提供的方法进行详细说明。
步骤S101,定义处理业务逻辑模块的错误码。
在软件系统的设计中,会根据系统输出的日志对系统的调试,也会根据系统输出的日志定位系统出现的问题,从而解决问题。所以,一般会预先定义日志的错误码,错误码可以告诉我们是什么样的错误发生了且发生在哪一个模块。所以,错误码至少包括,所述处理业务逻辑模块各个子模块的名称和错误类型。
步骤S102,根据所述处理业务逻辑的各个子模块的功能,将包含所述错误码的日志内容添加至所述各个子模块,为所述各个子模块添加日志。
处理业务逻辑的各个子模块用于完成不同的功能,各个子模块的功能,也会有对应的错误码,所以,根据所述处理业务逻辑的各个子模块的功能,获取各个子模块对应的错误码;然后,将所述包含错误码的日志内容添加至对应的各个子模块,从而为所述各个子模块添加日志。日志的内容不仅包括错误码,还包括日志的优先级、日志产生的时间和位置、以及产生日志的代码行等。
步骤S103,当调用处理业务逻辑的主模块时,所述主模块根据预先定义的日志优选级,输出各个子模块对应的日志内容。
当调用处理业务逻辑的主模块时,所述主模块根据业务逻辑调用所述主模块包含的子模块;而在调用子模块时,子模块自身不会输出日志内容,因为日志内容的输出放在了主模块,所以,在子模块被调用时,虽然产生了日志,但是,输出动作却是由主模块来完成的,所以,当子模块执行时,处理业务逻辑的主模块根据预先定义的日志优先级,输出被调用的子模块对应的日志内容。预先定义的日志优先级,包括:致命、错误和调试,严重程度分别从高到低。但并不局限于此,可以根据实际应用不同严重程度的日志优先级。
带有日志功能的程序。通常能通过某种形式控制允许输出的登记。比如,如果只允许输出到错误等级的话,那么低于它的调试级的日志就不能输出。显然,输出日志的级别越低,其所输出的信息就越细。大多软件在正常运行时并不输出调试级信息,这是考虑系统性能而做出的选择。
应用本申请提供的方法,具体的实施例如下:
传统的日志输出方法是以面向过程的方式,为了说明,需要借助一个简化的税控系统开票处理程序片段,如下所示。
Thread_call_process()是一个接收发票开具的入口函数,负责处理接受到的发票流水消息。
这个程序片段使用了三个级别的日志:fatal(致命)、error(错误)、和debug(调试),严重程度分别从高到低。带有日志功能的程序。通常能通过某种形式控制允许输出的登记。比如,如果只允许输出到错误等级的话,那么低于它的调试级的日志就不能输出。显然,输出日志的级别越低,其所输出的信息就越细。大多软件在正常运行时并不输出调试级信息,这是考虑系统性能而做出的选择。
对于上述中的程序,当invoice_number_analyze()、head_alloc()或det_alloc()中出现错误时都会输出错误日志。这一简化程序中输出日志的方式,作者称之为面向过程的平面化输出。这种方式具有以下特点:
日志的输出动作是分散在各函数中的,所获得的日志很像“流水账”,查错时不容易理出整体逻辑。由于错误日志是分散的,当需要增减日志时不易维护。输出的日志信息很容易出现重复而造成大量的冗余。这种形式的错误处理能通过日志反应出的程序的运行路径,这对于分析问题有一定的帮助。
采用这种方式输出的错误日志,由于每一个函数看到的只是其函数内部本身有限的信息,因此更具局限性。为了更有效地组织错误信息,我们需要探索其他的方法。为了解决面向过程方式存在的问题,我们可以考虑将出错时的输出日志的动作放在处理逻辑的更上层。对于上述的程序,处理逻辑的更上层是在invoice_make_process()函数内,因为不论后面要调用多少个函数,消息都是在这个函数中收到并进行处理的。另外,invoice_make_process()所调用的所有函数,都是基于invoice_t结构进行处理的。如果将出错处理放到invoice_make_process()函数中,修订后代码如下所示。
重新设计一种实现日志的输出方法,在于错误日志的输出全部放在invoice_make_process()函数中,而其他的被调用函数中不包含任何的日志输出行为,另外,errstr(error)将具体的错误码名打印出来,错误码名可以告诉我们是什么样的错误发生了且发生在哪一个模块。
采用这种错误处理方式的依据是,不论是什么类型的错误都与相关的业务逻辑有关。也就是说,错误信息是面向业务逻辑进行集中输出的,输出日志不再是一个个小片段。
在这个示例程序中只输出了业务逻辑中invoice_t数据结构相关的信息,在实际项目中还可根据情况输出其他的信息以便查错。比如,如果msg_t数据结构还存在其他的信息,且出错时了解这些信息有助于分析错误成因的话,也可以选择在出错时将它们输出。由于出错时的日志输出是集中管理的,添加、删除将变得容易,也不容易出现冗余日志,更易于后续的维护工程师更全面地考虑哪些日志需要输出以方便查错。
另外,面向业务逻辑的集中输出在这种方式下,如果获得程序的调用路径,就需要设计一种机制或引入一个变量用于记录程序的运行路径,并在出错时从集中控制点一并输出。程序在处理逻辑的过程中一定会产生一些中间消息,这些信息有可能并不是直接放在集中控制点所能看到的数据结构中的,而这些中间信息对于出错成因分析有可能相当重要。为了解决这个问题,可以采用更改集中控制点所能看到的数据结构,将中间结果也存入其中,然后在集中控制点处将其一并输出。可以有效解决应用场景各种问题。
传统的面向过程的平面化输出看到的只是数据结构的片段,难以做到有效地描述出错时的现场,面向业务逻辑的集中输出,错误日志不再是片段。面向业务逻辑的集中日志输出方法,将出错时的输出日志的动作放在处理逻辑的更上层,可以有效解决面向过程输出日志方式带来局限性问题。在实践中,应考虑以面向业务逻辑的集中输出方式为主,结合其他各种方式,能够有效帮助研发人员排查问题,提高软件产品健壮性。
基于同一发明构思,本申请同时提供一种面向业务逻辑实现日志输出的装置200,如图2所示,包括:
错误码定义单元210,用于定义处理业务逻辑模块的错误码;
日志添加单元220,用于根据所述处理业务逻辑的各个子模块的功能,将包含所述错误码的日志内容添加至所述各个子模块,为所述各个子模块添加日志;
日志内容输出单元230,用于当调用处理业务逻辑的主模块时,所述主模块根据预先定义的日志优选级,输出各个子模块对应的日志内容。
优选的,日志添加单元,包括:
错误码获取子单元,用于根据所述处理业务逻辑的各个子模块的功能,获取各个子模块对应的错误码;
日志添加子单元,用于将所述错误码添加至对应的各个子模块,从而为所述各个子模块添加日志。
优选的,日志内容输出单元,包括:
模块调用子单元,用于当调用处理业务逻辑的主模块时,所述主模块根据业务逻辑调用所述主模块包含的子模块;
日志内容输出子单元,用于所述子模块执行时,处理业务逻辑的主模块根据预先定义的日志优先级,输出被调用的子模块对应的日志内容。
本申请提供一种面向业务逻辑实现日志输出的方法,能够使错误日志信息是面向逻辑集中输出,解决由于错误日志是分散的不易维护,输出的日志信息很容易出现重复而造成大量的冗余等问题。
最后应该说明的是:以上实施例仅用以说明本发明的技术方案而非对其限制,尽管参照上述实施例对本发明进行了详细的说明,所属领域的普通技术人员应当理解依然可以对本发明的具体实施方式进行修改或者等同替换,而未脱离本发明精神和范围的任何修改或者等同替换,其均应涵盖在本发明的权利要求范围当中。
Claims (9)
1.一种面向业务逻辑实现日志输出的方法,其特征在于,包括:
定义处理业务逻辑模块的错误码;
根据所述处理业务逻辑的各个子模块的功能,将包含所述错误码的日志内容添加至所述各个子模块,为所述各个子模块添加日志;
当调用处理业务逻辑的主模块时,所述主模块根据预先定义的日志优选级,输出各个子模块对应的日志内容。
2.根据权利要求1所述的方法,其特征在于,错误码,包括:
所述处理业务逻辑模块各个子模块的名称和错误类型。
3.根据权利要求1所述的方法,其特征在于,根据所述处理业务逻辑的各个子模块的功能,将所述包含错误码的日志内容添加至所述各个子模块,为所述各个子模块添加日志,包括:
根据所述处理业务逻辑的各个子模块的功能,获取各个子模块对应的错误码;
将所述包含错误码的日志内容添加至对应的各个子模块,从而为所述各个子模块添加日志。
4.根据权利要求1所述的方法,其特征在于,预先定义的日志优先级,包括:
致命、错误和调试。
5.根据权利要求1所述的方法,其特征在于,当调用处理业务逻辑的主模块时,所述主模块根据预先定义的日志优选级,输出各个子模块对应的日志内容,包括:
当调用处理业务逻辑的主模块时,所述主模块根据业务逻辑调用所述主模块包含的子模块;
所述子模块执行时,处理业务逻辑的主模块根据预先定义的日志优先级,输出被调用的子模块对应的日志内容。
6.根据权利要求1或5所述的方法,其特征在于,输出被调用的子模块对应的日志内容,包括:
输出被调用的子模块对应的错误码、日志的优先级、日志产生的时间和位置。
7.一种面向业务逻辑实现日志输出的装置,其特征在于,包括:
错误码定义单元,用于定义处理业务逻辑模块的错误码;
日志添加单元,用于根据所述处理业务逻辑的各个子模块的功能,将包含所述错误码的日志内容添加至所述各个子模块,为所述各个子模块添加日志;
日志内容输出单元,用于当调用处理业务逻辑的主模块时,所述主模块根据预先定义的日志优选级,输出各个子模块对应的日志内容。
8.根据权利要求8所述的装置,其特征在于,日志添加单元,包括:
错误码获取子单元,用于根据所述处理业务逻辑的各个子模块的功能,获取各个子模块对应的错误码;
日志添加子单元,用于将所述错误码添加至对应的各个子模块,从而为所述各个子模块添加日志。
9.根据权利要求8所述的装置,其特征在于,日志内容输出单元,包括:
模块调用子单元,用于当调用处理业务逻辑的主模块时,所述主模块根据业务逻辑调用所述主模块包含的子模块;
日志内容输出子单元,用于所述子模块执行时,处理业务逻辑的主模块根据预先定义的日志优先级,输出被调用的子模块对应的日志内容。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010554138.1A CN111897787A (zh) | 2020-06-17 | 2020-06-17 | 一种面向业务逻辑实现日志输出的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010554138.1A CN111897787A (zh) | 2020-06-17 | 2020-06-17 | 一种面向业务逻辑实现日志输出的方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111897787A true CN111897787A (zh) | 2020-11-06 |
Family
ID=73207640
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010554138.1A Pending CN111897787A (zh) | 2020-06-17 | 2020-06-17 | 一种面向业务逻辑实现日志输出的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111897787A (zh) |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5790779A (en) * | 1995-03-10 | 1998-08-04 | Microsoft Corporation | Method and system for consolidating related error reports in a computer system |
US20030084377A1 (en) * | 2001-10-31 | 2003-05-01 | Parks Jeff A. | Process activity and error monitoring system and method |
CN102143008A (zh) * | 2010-01-29 | 2011-08-03 | 国际商业机器公司 | 用于数据中心的诊断故障事件的方法及装置 |
CN102981943A (zh) * | 2012-10-29 | 2013-03-20 | 新浪技术(中国)有限公司 | 监控应用日志的方法及系统 |
CN104461844A (zh) * | 2014-10-31 | 2015-03-25 | 大唐移动通信设备有限公司 | 一种基于规则的日志服务方法 |
CN106155864A (zh) * | 2016-07-29 | 2016-11-23 | 北京北信源软件股份有限公司 | 一种扩展Apache Log4j日志输出级别的方法 |
CN109376130A (zh) * | 2018-10-18 | 2019-02-22 | 国云科技股份有限公司 | 一种基于多云平台的自定义模板记录操作日志的方法 |
CN109766239A (zh) * | 2018-12-25 | 2019-05-17 | 努比亚技术有限公司 | 日志输出控制方法、系统及计算机可读存储介质 |
-
2020
- 2020-06-17 CN CN202010554138.1A patent/CN111897787A/zh active Pending
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5790779A (en) * | 1995-03-10 | 1998-08-04 | Microsoft Corporation | Method and system for consolidating related error reports in a computer system |
US20030084377A1 (en) * | 2001-10-31 | 2003-05-01 | Parks Jeff A. | Process activity and error monitoring system and method |
CN102143008A (zh) * | 2010-01-29 | 2011-08-03 | 国际商业机器公司 | 用于数据中心的诊断故障事件的方法及装置 |
US20110191630A1 (en) * | 2010-01-29 | 2011-08-04 | International Business Machines Corporation | Diagnosing a fault incident in a data center |
CN102981943A (zh) * | 2012-10-29 | 2013-03-20 | 新浪技术(中国)有限公司 | 监控应用日志的方法及系统 |
CN104461844A (zh) * | 2014-10-31 | 2015-03-25 | 大唐移动通信设备有限公司 | 一种基于规则的日志服务方法 |
CN106155864A (zh) * | 2016-07-29 | 2016-11-23 | 北京北信源软件股份有限公司 | 一种扩展Apache Log4j日志输出级别的方法 |
CN109376130A (zh) * | 2018-10-18 | 2019-02-22 | 国云科技股份有限公司 | 一种基于多云平台的自定义模板记录操作日志的方法 |
CN109766239A (zh) * | 2018-12-25 | 2019-05-17 | 努比亚技术有限公司 | 日志输出控制方法、系统及计算机可读存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8365196B2 (en) | Method and device for log events processing | |
US10911447B2 (en) | Application error fingerprinting | |
US20200117587A1 (en) | Log File Analysis | |
CN112835924A (zh) | 实时计算任务处理方法、装置、设备及存储介质 | |
US11163675B1 (en) | Mutation testing in parallel threads | |
CN112187933A (zh) | 一种多架构云平台中服务的监控方法和系统 | |
US8997116B2 (en) | Event logging application programming interface (API) | |
US10680913B1 (en) | Error remediation in software as a service (SaaS) portals | |
CN113094238A (zh) | 一种业务系统异常监控方法及装置 | |
Yu et al. | Logreducer: Identify and reduce log hotspots in kernel on the fly | |
WO2007071615A1 (en) | Methods, apparatus and computer programs for handling parameters associated with call statements | |
CN111897787A (zh) | 一种面向业务逻辑实现日志输出的方法及装置 | |
US20200117572A1 (en) | Problem diagnosis technique of memory corruption based on regular expression generated during application compiling | |
CN113760491A (zh) | 一种任务调度系统、方法、设备及存储介质 | |
CN116599881A (zh) | 云平台租户建模测试的方法、装置、设备及存储介质 | |
US11740995B2 (en) | Source quality check service | |
US8819494B2 (en) | Automatically changing parts in response to tests | |
CN111897789B (zh) | 一种日志生成方法及装置 | |
CN108959508B (zh) | Sql数据生成方法及装置 | |
CN112083952A (zh) | 一种基于spring架构的异常处理方法及系统 | |
CN110908870A (zh) | 一种大型机的资源监控方法、装置、存储介质及设备 | |
CN117235107B (zh) | 数据访问处理方法、装置、电子设备及存储介质 | |
US20220398185A1 (en) | Self-optimizing analysis system for core dumps | |
CN114356643B (zh) | 一种遥感卫星处理系统中自动发现任务失败和恢复方法 | |
CN112925667B (zh) | 预防sdk崩溃的方法、装置、设备及可读存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |