CN108228439B - 一种程序与日志解耦的方法 - Google Patents
一种程序与日志解耦的方法 Download PDFInfo
- Publication number
- CN108228439B CN108228439B CN201810008083.7A CN201810008083A CN108228439B CN 108228439 B CN108228439 B CN 108228439B CN 201810008083 A CN201810008083 A CN 201810008083A CN 108228439 B CN108228439 B CN 108228439B
- Authority
- CN
- China
- Prior art keywords
- function
- log
- calling
- program
- name
- 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.)
- Active
Links
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
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种程序与日志解耦的方法,包括步骤:S1,将日志记录逻辑封装为函数接口;S2,重写函数名错误处理机制;S3,程序主逻辑调用函数;S4,判断函数调用时是否出现函数名错误,是则进入步骤5;否则直接调用函数结束;S5,错误处理函数捕获到异常,并将捕获到的函数名称和入参保存在内存中,调用日志记录函数记录日志;S6,错误处理函数将标识增加到函数名中,并重新调用函数。本发明通过采用函数名错误处理机制解决了日志与程序耦合的问题,使得程序主逻辑的代码和运行日志的代码相互隔离,互不影响,即使主逻辑出现了错误,运行日志依然能够被正常地记录,并且不用依赖任何框架,对编程语言也没有局限性,有很好的适应性和实用性。
Description
技术领域
本发明涉及软件技术领域,尤其涉及一种软件程序与日志解耦的方法。
背景技术
钩子:在项目代码中,认为需要扩展(暂时不扩展)的地方放置一个钩子函数,等需要扩展的时候,把实现的类和函数挂载到这个钩子上,就可以实现扩展了。
AOP:Aspect Oriented Programming的缩写。意为面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。
在当前的程序开发当中,记录运行日志是必不可少的一个步骤,特别是在一些关键的主逻辑代码上,运行日志不单单可以监控程序的运行情况,还可以在程序出错的时候用来分析错误原因。运行日志的用途有很多,给程序开发者带来很多便利,但是运行日志也给程序带来了负担。一般而言,不做任何优化,运行日志跟主逻辑代码是耦合在一起的,即使是主逻辑代码没有错误,运行日志在写日志的时候如果发生了错误,主逻辑代码也会运行不下去。
目前解决这一问题的技术主要有两种:
1.采用钩子的方式把日志抽象独立出来。这种做法在一定程度上能够对日志解耦,但是必须在程序的主逻辑中加入钩子函数,这样一来日志跟程序逻辑还是会相互影响,并不能完全解决问题;
2.采用AOP的编程模式。这个方法能把运行日志和程序主逻辑完全解耦,不过方法局限性很大,只能在其提供的框架下编程,而且需要依赖配置文件,当程序逻辑变得复杂的时候,配置文件也会相应的变得复杂,对开发人员十分不友好。
发明内容
为了解决上述技术问题,本发明提供了一种软件程序与日志解耦的方法,其目的在于,不影响程序逻辑的情况下,方便有效地完成运行日志的记录。
本发明所采用的技术方案是:
步骤1,将日志记录逻辑封装为函数接口,并设计入参参数;
步骤2,重写函数名错误处理机制,对于需要记录运行日志的函
数通过在函数名称中增加标识来区分;
步骤3,程序主逻辑正常调用函数,调用时,函数名称不带标识;
步骤4,判断函数调用时是否出现函数名错误,是则进入步骤5;
否则直接调用函数结束;
步骤5,错误处理函数捕获到异常,并将捕获到的函数名称和入
参保存在内存中,调用日志记录函数记录日志;
步骤6,错误处理函数将标识增加到函数名中,并重新调用函数。
优选的,所述步骤2中,函数名称标识要保证与编程语言自身的编程规则不冲突,可以在名称中增加前缀、增加后缀或者在名称中间增加标识。
本发明的有益效果是:
本发明通过采用函数名错误处理机制解决了日志与程序耦合的问题,使得程序主逻辑的代码和运行日志的代码相互隔离,互不影响,即使主逻辑出现了错误,运行日志依然能够被正常地记录,并且不用依赖任何框架,对编程语言也没有局限性,有很好的适应性和实用性。
附图说明
下面结合附图对本发明的具体实施方式作进一步说明:
图1是日志解耦方法的流程图。
具体实施方式
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
如图1所示,本发明的具体实施方式如下:
步骤1,将日志记录逻辑封装为函数接口,并设计两个入参参数,参数一为函数名称funcName,参数二为函数的入参集合paramList;
步骤2,重写函数名错误处理机制,对于需要记录运行日志的函数通过在函数名称中增加标识来区分,函数名称标识要保证与编程语言自身的编程规则不冲突,可以通过在名称中增加前缀、增加后缀或者是其他方式。比如前缀可以是下划线“_”,可以是加号“+”,甚至如果编程语言允许,可以是星号“*”,也可以是单词,例如“LOG”,但是一定要保证与编程规则不冲突;
步骤3,程序主逻辑正常调用函数,调用时,函数名称不带标识。比如,采用下划线“_”前缀标记需要记录日志的函数,程序原来的函数名称是“func”,这个函数是需要记录运行日志的,那么就在函数名称前加上前缀“_”,名称改成“_func”。程序调用这个函数的时候,依然是采用“func”这个名字;
步骤4,判断函数调用时是否出现函数名错误,是则进入步骤5;否则直接调用函数结束;
步骤4中,以步骤3中的例子为例,程序主逻辑调用名称为“func”的函数时,会出现函数名称错误,因为只有“_func”这个函数,没有“func”这个函数;
步骤5,错误处理函数捕获到异常,并将捕获到的函数名称和入参保存在内存中,调用日志记录函数记录日志;
步骤6,错误处理函数将标识增加到函数名中,并重新调用函数。比如函数名称为“func”,需要记录运行日志的函数标识是函数名称前加下划线“_”,那么错误处理函数将调用函数名称为“_func”的函数。这个函数名称是真实存在的,结合之前捕获到的参数,函数能够被正常调用。
以上是对本发明的较佳实施进行了具体说明,但本发明创造并不限于所述实施例,熟悉本领域的技术人员在不违背本发明精神的前提下还可做出种种的等同变形或替换,这些等同的变形或替换均包含在本申请权利要求所限定的范围内。
Claims (2)
1.一种程序与日志解耦的方法,其特征在于,其包括步骤:
步骤1,将日志记录逻辑封装为函数接口,并设计入参参数,所述入参参数包括参数一和参数二,所述参数一为函数名称funcName,所述参数二为函数的入参集合paramList;
步骤2,重写函数名错误处理机制,对于需要记录运行日志的函数通过在函数名称中增加标识来区分;
步骤3,程序主逻辑正常调用函数,调用时,函数名称不带标识;
步骤4,判断函数调用时是否出现函数名错误,是则进入步骤5;否则直接调用函数结束;
步骤5,错误处理函数捕获到异常,并将捕获到的函数名称和入参保存在内存中,调用日志记录函数记录日志;
步骤6,错误处理函数将标识增加到函数名中,并重新调用函数。
2.根据权利要求1所述的一种程序与日志解耦的方法,其特征在于,所述步骤2中,函数名称标识要保证与编程语言自身的编程规则不冲突,可以在名称中增加前缀、增加后缀或者在名称中间增加标识。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810008083.7A CN108228439B (zh) | 2018-01-04 | 2018-01-04 | 一种程序与日志解耦的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810008083.7A CN108228439B (zh) | 2018-01-04 | 2018-01-04 | 一种程序与日志解耦的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108228439A CN108228439A (zh) | 2018-06-29 |
CN108228439B true CN108228439B (zh) | 2021-05-11 |
Family
ID=62643032
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810008083.7A Active CN108228439B (zh) | 2018-01-04 | 2018-01-04 | 一种程序与日志解耦的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108228439B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110275817B (zh) * | 2019-06-13 | 2020-09-22 | 北京航空航天大学 | 一种基于模型驱动的日志文件自动生成方法 |
CN110908820A (zh) * | 2019-11-06 | 2020-03-24 | 北京达佳互联信息技术有限公司 | 一种异步任务的执行方法、装置、设备及存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2010086871A1 (en) * | 2009-01-28 | 2010-08-05 | Harshal Ingale | A modularized micro processor design |
CN102999319A (zh) * | 2011-09-09 | 2013-03-27 | 北京大学 | 一种基于aop技术缓存函数执行结果的方法及*** |
CN105260168A (zh) * | 2014-07-15 | 2016-01-20 | 阿里巴巴集团控股有限公司 | 日志输出方法和装置 |
CN105430433A (zh) * | 2015-10-29 | 2016-03-23 | 小米科技有限责任公司 | 信息处理方法及装置 |
CN106970789A (zh) * | 2017-03-07 | 2017-07-21 | 武汉斗鱼网络科技有限公司 | 一种Android端基于AOP和AspectJ的日志自动埋点方法及*** |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP2514187A1 (en) * | 2009-12-18 | 2012-10-24 | Telefonaktiebolaget L M Ericsson (PUBL) | Control of execution time of time-dependent services by defining different time zones for the subscriber's location, the execution server, and the service subscription information |
-
2018
- 2018-01-04 CN CN201810008083.7A patent/CN108228439B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2010086871A1 (en) * | 2009-01-28 | 2010-08-05 | Harshal Ingale | A modularized micro processor design |
CN102999319A (zh) * | 2011-09-09 | 2013-03-27 | 北京大学 | 一种基于aop技术缓存函数执行结果的方法及*** |
CN105260168A (zh) * | 2014-07-15 | 2016-01-20 | 阿里巴巴集团控股有限公司 | 日志输出方法和装置 |
CN105430433A (zh) * | 2015-10-29 | 2016-03-23 | 小米科技有限责任公司 | 信息处理方法及装置 |
CN106970789A (zh) * | 2017-03-07 | 2017-07-21 | 武汉斗鱼网络科技有限公司 | 一种Android端基于AOP和AspectJ的日志自动埋点方法及*** |
Non-Patent Citations (1)
Title |
---|
《commons-logging日志实现解耦》;珞樱缤纷;《https://www.cnblogs.com/crazyrunning/p/6145890.html》;20170721;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN108228439A (zh) | 2018-06-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107171825B (zh) | 一种终端的重复日志过滤方法 | |
US20210200863A1 (en) | Methods and apparatus to improve feature engineering efficiency with metadata unit operations | |
US20080072216A1 (en) | Method and device for ANBF string pattern matching and parsing | |
CN108228439B (zh) | 一种程序与日志解耦的方法 | |
CN111881102A (zh) | 基于aop切面采集审计日志的方法、装置及可读介质 | |
WO2021125779A1 (ko) | Api 통합관리를 위한 클라우드 기반의 api 메타데이터 관리방법 및 시스템 | |
JP2011516987A (ja) | モバイル・デバイス・ソフトウェアの管理方法及び装置 | |
CN110489310B (zh) | 一种记录用户操作的方法、装置、存储介质及计算机设备 | |
CN103019874A (zh) | 基于数据同步实现异常处理的方法及装置 | |
US20210248114A1 (en) | System and method for customized graphql data-handling scripts | |
CN114579194B (zh) | 一种基于Spring远程调用的异常处理方法和*** | |
CN110750405A (zh) | 一种基于硬件板卡识别的软件兼容性方法 | |
CN115421765A (zh) | 一种应用于国产化操作***的大数据管理部署方法 | |
JP2007065837A (ja) | 状態制御方法、状態制御プログラムおよび状態制御プログラムを記録した記録媒体 | |
CN111290747B (zh) | 一种创建函数钩子的方法、***、设备及介质 | |
CN110147294B (zh) | 调试信息的获取方法、装置、终端及计算机可读存储介质 | |
CN116431603A (zh) | Plc程序的存储和加载方法、装置和电子设备 | |
US20050053091A1 (en) | Method and infrastructure for minimizing compatibility issues among interacting components of different dialect versions | |
CN111240728A (zh) | 应用程序更新方法、装置、设备和存储介质 | |
KR100858156B1 (ko) | 에스시에이 기반 애플리케이션 시스템 및 이의 운용 중컴포넌트 교체방법 | |
CN110826074A (zh) | 一种应用漏洞检测方法、装置和计算机可读存储介质 | |
CN107247904B (zh) | 一种安全基线项目同步方法及装置 | |
CN110806896B (zh) | 基于maven扩展插件实现软件开发中国际化信息提取方法 | |
CN111273940B (zh) | 将程序文件上传至代码仓库的方法及装置 | |
CN113296898A (zh) | 异步任务处理方法、装置、电子设备和存储介质 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |