CN117742783B - 用于软件系统的日志数据跨语言自动记录方法 - Google Patents
用于软件系统的日志数据跨语言自动记录方法 Download PDFInfo
- Publication number
- CN117742783B CN117742783B CN202410185090.XA CN202410185090A CN117742783B CN 117742783 B CN117742783 B CN 117742783B CN 202410185090 A CN202410185090 A CN 202410185090A CN 117742783 B CN117742783 B CN 117742783B
- Authority
- CN
- China
- Prior art keywords
- log
- log data
- software system
- language
- log4cplus
- 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
- 238000000034 method Methods 0.000 title claims abstract description 77
- 238000011161 development Methods 0.000 claims abstract description 25
- 230000009471 action Effects 0.000 claims abstract description 24
- 230000008569 process Effects 0.000 claims abstract description 10
- 230000006870 function Effects 0.000 claims description 21
- 238000001914 filtration Methods 0.000 claims description 9
- 238000005538 encapsulation Methods 0.000 claims description 5
- 238000012423 maintenance Methods 0.000 abstract description 9
- 230000003068 static effect Effects 0.000 abstract description 4
- 238000013459 approach Methods 0.000 description 4
- 230000006399 behavior Effects 0.000 description 3
- 239000000306 component Substances 0.000 description 3
- 230000003993 interaction Effects 0.000 description 3
- 238000007726 management method Methods 0.000 description 3
- 238000012544 monitoring process Methods 0.000 description 3
- 238000012360 testing method Methods 0.000 description 3
- 239000011800 void material Substances 0.000 description 3
- 230000008859 change Effects 0.000 description 2
- 238000004140 cleaning Methods 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 239000008358 core component Substances 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000003745 diagnosis Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000002708 enhancing effect Effects 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 238000012800 visualization Methods 0.000 description 1
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明公开了用于软件系统的日志数据跨语言自动记录方法,包括步骤:注册监听器以监听软件系统运行过程中的事件动作;引入log4cplus库以将所述软件系统的事件动作记录为日志数据,并输出为动态链接库文件和静态链接库文件;利用C++语言注册通用调用接口,通过所述通用调用接口调用动态链接库文件以实现对日志数据的查看。本发明能够广泛适用于多语言编程环境,提高了系统的通用性和适应性;显著降低日志记录系统维护的复杂性和成本,提高了日志记录的效率和灵活性,还降低了系统维护的复杂性,从而为软件开发和维护提供了有力的技术支持。同时提供强大的二次开发接口,允许根据不同项目的具体需求进行定制。
Description
技术领域
本发明涉及计算机软件技术领域,尤其涉及用于软件系统的日志数据跨语言自动记录方法。
背景技术
随着信息技术的迅速发展,软件系统在各行各业中的应用日益广泛。在软件系统的运行过程中,日志记录是一个重要环节,它不仅有助于监控系统状态和行为,还是分析和解决软件问题的关键。传统的日志记录方法主要依赖于特定的编程语言或框架,这限制了日志记录的灵活性和适用性。例如,当软件系统跨越多种编程语言或平台时,传统的日志记录方法可能无法有效地协同工作,从而导致日志信息的不完整或丢失。
当前,多数主流开发环境采用面向切面编程(AOP)技术来实现日志记录。这种方法主要在前端用户界面(UI)触发后台服务时介入,对事件动作进行监控,从而捕获和记录系统调用行为。生成的日志随后被持久化到文件系统或数据库中。虽然这些方法在特定场景下有效,但它们往往作为孤立的解决方案存在,缺乏足够的通用性和灵活性,难以满足跨平台和多语言环境的需求。
此外,这些传统的日志记录方法通常涉及较高的实现成本和复杂的实现路径,给开发者带来了较高的学习成本。并且这些方法单独存在,存在不具有通用性,不能实现跨平台语言,往往还缺乏支持第三方或终端用户进行有效二次开发的能力,导致在不同业务场景下需要对日志监视器进行重复修改和定制,从而增加了维护成本和降低了系统的可维护性。此外,这些方法往往缺乏支持自定义配置的灵活性,限制了其在各种复杂环境下的适应能力。
发明内容
针对以上问题,迫切需要一种在软件的日常运行中跨语言自动记录日志的方法和系统,以提高日志记录的灵活性和有效性,同时降低系统维护的复杂性。
为了实现上述技术目的,本发明提供的技术方案包括:
用于软件系统的日志数据跨语言自动记录方法,包括步骤:
S1、注册监听器以监听软件系统运行过程中的事件动作;
S2、引入log4cplus库以将所述软件系统的事件动作记录为日志数据,并输出为动态链接库文件;
S3、利用C++语言注册通用调用接口,通过所述通用调用接口调用动态链接库文件以实现对日志数据的查看。
在一些较优的实施例中,所述监听器根据日志级别对软件系统事件动作进行不同类型的监听。
在一些较优的实施例中,步骤S2中所述引入log4cplus库以将所述软件系统的事件动作记录为日志数据的写入方法包括:
S201、调用log4cplus::initialize()初始化日志系统;
S202、根据日志级别数量创建对应的日志记录器;
S203、使用日志记录器记录日志数据。
在一些较优的实施例中,步骤S3中所述利用C++语言注册通用调用接口的方法包括:
S301、确定动态链接库文件的文件路径与文件名,并记录动态链接库文件的绝对路径;
S302、创建与动态链接库文件中函数的对应关系和调用链路的接口定义;
S303、创建目标语言与C++语言的绑定或声明;
S304、实现至少一个使用所述接口定义的封装层,用以将高级语言的调用转换为动态链接库文件函数的调用。
在一些较优的实施例中,步骤S3中所述对日志数据的查看方法包括:
在log4cplus.properties中配置ConsoleAppender的布局类型、输出格式和对应的日志级别,用以将日志数据输出到控制台;
或,在log4cplus.properties中配置RollingFileAppender的日志文件名称、最大文件大小、备份文件数量、输出格式和对应的日志级别,用以将日志数据输出到文件中以便稍后查看。
在一些较优的实施例中,还包括用于定义日志输出目的地的二次开发方法:通过实现自定义的 Appender 类来将日志输出到目标位置。
在一些较优的实施例中,还包括用于定义日志输出格式的二次开发方法:通过实现自定义的 Layout 类来调整日志输出的格式。
在一些较优的实施例中,还包括用于在运行时动态配置日志的二次开发方法:通过读取新的配置并重新配置 log4cplus,以实现动态配置日志。
在一些较优的实施例中,还包括用于控制被记录的事件动作信息的二次开发方法:通过将自定义的过滤逻辑,实现自定义的包含目标过滤逻辑的过滤器,并将所述过滤器添加到日志记录器中。
在一些较优的实施例中,还包括用于追踪日志中软件系统运行过程产生的事件动作的二次开发方法:通过使用MDC 工具在每个线程中保存上下文信息,通过使用NDC在堆栈中保存上下文信息,以实现在日志中附加上下文信息。
有益效果
本发明能够跨多种编程语言自动记录日志,有效解决了传统日志系统只能在单一语言环境下运行的限制,能够广泛适用于多语言编程环境,提高了系统的通用性和适应性;提供了日志级别的灵活管理方法,允许用户根据需要调整日志记录的详细程度,可以更加精准地满足不同的监控和调试需求;显著降低日志记录系统维护的复杂性和成本,提高了日志记录的效率和灵活性,还降低了系统维护的复杂性,从而为软件开发和维护提供了有力的技术支持;同时提供强大的二次开发接口,允许根据不同项目的具体需求进行定制。
附图说明
图1为本发明一种较优实施例中提供的用于软件系统的日志数据跨语言自动记录方法流程示意图;
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面结合附图对本发明作进一步阐述。在本发明的描述中,需要理解的是,术语“上”、“下”、“前”、“后”、“左”、“右”、“顶”、“底”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的系统或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。
如图1所示,本实施例提供了一种用于软件系统的日志数据跨语言自动记录方法,包括步骤:
S1、注册监听器以监听软件系统运行过程中的事件动作。该步骤实施监听器注册机制,该机制负责在软件系统的运行时针对软件每一时刻运行情况,记录其运行过程当中遇到的error或crash时的信息(线程,关键变量,出错位置,时间);另一方面也可以跟踪和回忆某时刻或者某段时间内程序运行情况,从而分析软件运行时消耗的内存空间,网络消耗等参数,方便跟踪定位代码问题。这包括初始化监听器实例,将其与特定的事件类型关联,并嵌入到系统的关键节点以捕捉如错误、警告、用户交互及系统状态变更等事件。监听器设计应确保最小的性能开销同时提供实时、准确的事件捕获功能,从而为系统运行提供全面的可视化和诊断支持。
在一些较优的实施例中,所述监听器根据日志级别对软件系统事件动作进行不同类型的监听,包括但不限于以下的监听类型:
NOT_SET_LOG_LEVEL:接受缺省的LogLevel,如果有父logger则继承它的LogLevel;
ALL_LOG_LEVEL:开放所有log信息输出
TRACE_LOG_LEVEL:开放trace信息输出
DEBUG_LOG_LEVEL:开放debug信息输出
INFO_LOG_LEVEL:开放info信息输出
WARN_LOG_LEVEL:开放warning信息输出
ERROR_LOG_LEVEL:开放error信息输出
FATAL_LOG_LEVEL:开放fatal信息输出
OFF_LOG_LEVEL:关闭所有log信息输出
S2、引入log4cplus库以将所述软件系统的事件动作记录为日志数据,并输出为动态链接库文件。该步骤通过整合log4cplus日志库以实现高效的日志管理功能,该库专门用于捕获并格式化软件系统的事件动作,如异常、操作请求以及其他关键系统事件。通过定义各类事件的日志级别和格式,log4cplus能够将这些事件转换为详细的日志数据。进一步地,系统将这些日志数据编译并封装为一个动态链接库(DLL)文件,确保日志记录模块的独立性和可重用性,同时提供了跨语言和平台的日志记录能力。在一些较优的实施例中,通过采用简单、多线程、安全的方式将信息划分优先级使其可以面向程序调试、运行、测试、和维护等全生命周期;可以选择将信息输出到数据库、文件,甚至是远程服务器;通过制定策略对日志进行定期备份等等。基于C++语言的跨平台特性,所以可将日志记录系统输出为动态链接库.dll外,还可以输出为静态链接库.lib文件,以供多种开发语言支持使用。
在一些较优的实施例中,给出了一种引入log4cplus库以将所述软件系统的事件动作记录为日志数据的写入方法,具体包括:
S201、调用log4cplus::initialize()初始化日志系统;
S202、根据日志级别数量创建对应的日志记录器;
S203、使用日志记录器记录日志数据。
下面以log4cplus写入记录日志的过程涉及几个关键的概念:Logger(日志记录器),Appender(输出目标),Layout(日志布局)为例,给出如下示例以说明一般的写入步骤:
A、初始化日志系统:在程序启动时,需要调用log4cplus::initialize()来初始化日志系统
B、创建Logger:Logger是log4cplus中用于记录日志的对象
#include
#include
#include
log4cplus::Logger logger = log4cplus::Logger::getInstance("MyLogger");
C、使用日志记录器记录日志,这里分别使用了五个日志级别进行记录
LOG4CPLUS_DEBUG(logger, "This is a debug message");
LOG4CPLUS_INFO(logger, "This is an info message");
LOG4CPLUS_WARN(logger, "This is a warning message");LOG4CPLUS_ERROR(logger, "This is an error message");
LOG4CPLUS_FATAL(logger, "This is a fatal message");
D、清理资源,在程序结束时,清理log4cplus 资源
log4cplus::Logger::shutdown()。
S3、利用C++语言注册通用调用接口,通过所述通用调用接口调用动态链接库文件以实现对日志数据的查看。具体的,在C++环境中实现和注册一系列通用调用接口,这些接口专为与动态链接库(DLL)进行交互而设计。通过这些精心构建的通用接口,系统能够激活和利用DLL文件中的功能,进而实现对日志数据的高效查看和管理。这一过程包括定义标准的接口协议,确保接口与DLL中的日志记录和查看功能正确对接。接着,通过标准的C++调用机制(如函数指针或者C++11之后的std::function),实现对这些通用接口的调用。
在一些较优的实施例中,给出了一种利用C++语言注册通用调用接口的通用方法包括:
S301、确定动态链接库文件的文件路径与文件名,并记录动态链接库文件的绝对路径;
S302、创建与动态链接库文件中函数的对应关系和调用链路的接口定义;
S303、创建目标语言与C++语言的绑定或声明;
S304、实现至少一个使用所述接口定义的封装层,用以将高级语言的调用转换为动态链接库文件函数的调用。
目前跨平台开发语言Java、C#、C++都具有调用dll动态库的方法,所以可使用上述方法为开发语言提供日志记录解决方案。下面以java平台为例对上述调用方法作进一步的说明:
A、确定dll文件路径
在调用dll动态库之前,首先确定文件路径与文件名,并记录下文件的绝对路径。
B、创建Java接口
为方便Java代码与dll动态库进行交互,需要创建一个Java接口,接口中将定义与dll动态库中函数的对应关系与调用链路。
C、定义Native方法
在接口中定义Native方法,用于与dll动态库中的函数进行绑定。使用native关键字声明这些方法。
Public interface mydll{
void myfunction();
native void mydllFunction();
}
D、生成JNI头文件
使用javah命令生成JNI头文件,该头文件用于定义连接Java代码和dll动态库。
Javah-ini com.exa.mydll
E、实现Native方法
在生成的JNI头文件中实现Native方法,通过JNI调用dll动态库中的函数。
F、加载Native库
在Java代码中加载Native库,以便能够调用dll动态库中的函数。使用System.loadLibrary()方法加载库文件。
G、编译和运行
使用java编译器编译代码,并运行程序。
Javac com/exa/Main.java
H、通过配置初始化日志监听组件
Java项目中通过在配置文件里进行日志初始化配置,通过JNI调用动态库中的函数方法进行初始化,log4cplus会自动初始化组件。Log4cplus::Initializer类中维护了一个引用计数。该类可以被实例化多次。当此引用计数达到零时,在最后一个实例被销毁后,会自动关闭log4cplus内部。
下面以C#平台为例对上述调用方法再作进一步的说明:
A、引入命名空间:
在C#文件的顶部,确保引入了必要的命名空间:
using System;
using System.Runtime.InteropServices;
B、声明外部函数:
使用DllImport属性声明外部的DLL函数。假定RecordEvent函数遵循C调用约定并接受一个字符串参数:
class LogInterop
{
[DllImport("LogSystem.dll", CallingConvention =CallingConvention.Cdecl)]
public static extern int RecordEvent(string message);
}
C、调用函数:
调用RecordEvent方法,创建一个实例并记录一个事件:
class Program
{
static void Main()
{
int status = LogInterop.RecordEvent("This is a test logmessage.");
if (status == 0) // 假设0为成功状态码
{
Console.WriteLine("Event logged successfully.");
}
else
{
Console.WriteLine("Failed to log event.");
}
}
}
D、错误处理和调试:
当处理外部库时,错误处理特别重要。确保添加足够的错误处理和日志记录,以便于调试和运行时问题诊断。
E、测试:
在实际部署前,对所有可能的输入和环境进行充分测试,确保代码的健壮性。
在一些较优的实施例中,所述监听器根据日志级别对软件系统事件动作进行不同类型的监听。
在一些较优的实施例中,步骤S2中所述引入log4cplus库以将所述软件系统的事件动作记录为日志数据的写入方法包括:
S201、调用log4cplus::initialize()初始化日志系统;
S202、根据日志级别数量创建对应的日志记录器;
S203、使用日志记录器记录日志数据。
进一步的是,本实施例还提供了一种对日志数据的查看方法,包括步骤:
在log4cplus.properties中配置ConsoleAppender的布局类型、输出格式和对应的日志级别,用以将日志数据输出到控制台;
或,在log4cplus.properties中配置RollingFileAppender的日志文件名称、最大文件大小、备份文件数量、输出格式和对应的日志级别,用以将日志数据输出到文件中以便稍后查看。
下面,本实施例以控制台输出、文件输出、集成其他日志查看工具与其他自定义查看工具等方式查看日志分别给出示例。
A、控制台输出:在配置文件中配置一个 ConsoleAppender,日志信息将输出到控制台。这对于调试和开发阶段是很有用的。在 log4cplus.properties 配置文件中添加如下内容:
log4cplus.appender.console=log4cplus::ConsoleAppender log4cplus.appender.console.layout=log4cplus::PatternLayout log4cplus.appender.console.layout.ConversionPattern=%-5p [%c] - %m%n log4cplus.rootLogger=DEBUG, console
B、文件输出:将日志信息输出到文件中,以便稍后查看。这里的 logFile.log 是日志文件的名称,MaxFileSize 和 MaxBackupIndex 分别定义了日志文件的大小和备份文件的数量。在 log4cplus.properties 配置文件中添加如下内容:
log4cplus.appender.file=log4cplus::RollingFileAppenderlog4cplus.appender.file.File=logFile.log log4cplus.appender.file.MaxFileSize=5MB log4cplus.appender.file.MaxBackupIndex=1 log4cplus.appender.file.layout=log4cplus::PatternLayout log4cplus.appender.file.layout.ConversionPattern=%-5p [%c] - %m%n log4cplus.rootLogger=DEBUG, file
C、集成其他日志查看工具:也可以使用其他日志查看工具,如 tail、grep 等命令行工具,或者使用图形化的日志查看工具,比如 Log4View、Chainsaw 等。这些工具通常支持从文件中实时查看和过滤日志
D、自定义查看工具:可以编写自己的日志查看工具,读取 log4cplus 生成的日志文件或者通过网络连接到日志服务器,然后以需要的方式展示日志信息。
本实施例是在上述实施例1的基础上展开的,本实施例给出了一些通过实现自定义的Appender、Layout、过滤器等方式实现二次开发的示例。
1、用于定义日志输出目的地的二次开发方法:通过实现自定义的 Appender 类来将日志输出到目标位置。
Appender是log4cplus的一个核心组件,负责定义日志的最终输出目的地。框架内置了多种Appender,如文件Appender、控制台Appender等,以支持日志信息的多样化输出需求。为了进一步增强其灵活性和适应性,log4cplus还允许开发者通过实现自定义的Appender类来实现日志输出到特定目的地的功能,例如数据库、消息队列、或者其他任何特定的存储或消息传递系统。
要创建一个自定义Appender,可以从log4cplus::Appender类继承,并实现必要的虚拟方法。其中最关键的是append方法,它定义了每当有日志消息时应如何处理这些消息。完成自定义Appender类的实现后,可以通过log4cplus的配置文件或者程序代码来将其注册为日志系统的一部分。
2、用于定义日志输出格式的二次开发方法:通过实现自定义的 Layout 类来调整日志输出的格式。
log4cplus使用Layout组件来定义日志消息的格式化输出。Layout负责将日志事件转换成可读的字符串格式,以便输出到各种Appender中。为了提供更高的灵活性和适应性,log4cplus允许用户实现自定义的Layout类。
要创建一个自定义Layout,可以从log4cplus::Layout基类继承,并重写format方法。这个方法负责接收日志事件并将其转换成特定格式的字符串。这一过程中,根据需求添加时间戳、日志级别、线程ID、消息本身以及任何其他相关信息。此外,还可以设置如何显示这些信息,比如添加特定前缀或后缀,使用JSON或XML格式化等。
完成自定义Layout类的实现后,可以在log4cplus的配置文件中指定使用自定义Layout。这通常涉及到修改Appender配置,将Layout部分指向自定义类。配置文件的这一改动告诉log4cplus在日志记录时使用的Layout来格式化消息。
3、用于在运行时动态配置日志的二次开发方法:通过读取新的配置并重新配置log4cplus,以实现动态配置日志。
log4cplus支持在程序运行时动态更改日志配置,这使得开发者能够根据当前的运行环境或需求调整日志记录的行为,如修改日志级别或更改输出目的地。这种灵活性对于需要实时监控和调整其日志策略的复杂或长时间运行的应用程序尤为宝贵。下面给出一个如何在运行时动态更改log4cplus配置的示例:
A、读取新配置:
在程序运行中,首先需要从某个源(如文件、数据库或远程服务)读取新的配置信息。这可能涵盖日志级别的变更、新的Appender定义、或是Layout的调整等。
B、重新配置Logger:
一旦获得新的配置,使用log4cplus提供的API来重新配置日志系统。这通常涉及到获取当前的Logger实例,然后应用新的配置。例如,可能需要更改Logger的级别或为其添加或移除某个Appender。
C、更新Appender:
如果需要更改Appender的配置(如文件路径、最大大小或Layout),则需要对每个相关的Appender实例进行相应的更新。这可能包括创建新的Appender实例或修改现有的实例配置。
D、应用新Layout:
如果改变的是日志的格式化方式,需要创建新的Layout实例并将其应用到相应的Appender上。
通过上述步骤,可以在不停止程序的情况下,动态地调整和优化日志记录策略。
4、用于控制被记录的事件动作信息的二次开发方法:通过将自定义的过滤逻辑,实现自定义的包含目标过滤逻辑的过滤器,并将所述过滤器添加到日志记录器中。
通过过滤器的设置可以决定哪些日志事件应该被记录。通过实现自定义过滤器,开发者可以精确控制哪些消息被记录到日志中,这对于减少日志量、过滤无关信息或仅关注特定类型的日志事件特别有用。下面给出一个如何实现和使用自定义日志过滤器的示例:
A、定义过滤逻辑:
首先,定义过滤逻辑。这可能基于消息的级别、内容、发生的时间、或者其他任何可以从log4cplus::spi::InternalLoggingEvent对象中获得的信息。
B、实现自定义过滤器:
继承log4cplus::spi::Filter类,并实现其decide方法。在这个方法中,将根据自定义的逻辑来决定是否接受、拒绝或者继续处理一个日志事件。
例如,实现一个过滤器,它只接受包含特定关键字的消息,或者拒绝低于特定级别的消息。
C、将过滤器添加到日志记录器:
一旦实现了自定义过滤器,就可以将它添加到一个或多个Logger中。这通常涉及到获取Logger的实例,然后将过滤器实例附加到其Appender上。可以为不同的Logger或Appender设置不同的过滤器,提供灵活的控制。
5、用于追踪日志中软件系统运行过程产生的事件动作的二次开发方法:通过使用MDC 工具在每个线程中保存上下文信息,通过使用NDC在堆栈中保存上下文信息,以实现在日志中附加上下文信息。
Mapped Diagnostic Context (MDC) 和 Nested Diagnostic Context (NDC) 是两种强大的诊断工具,它们提供了在日志记录时附加上下文信息的能力,增强了日志的信息量和可追踪性。这些工具在处理复杂的多线程环境或者需要深入分析调用栈的情况下特别有用。以下给出一个如何使用MDC和NDC的示例:
MDC是一个键值对集合,它与当前线程关联。可以在执行过程中的任何点向MDC中添加信息,然后这些信息将自动附加到由该线程产生的所有日志事件中,非常适合存储诸如用户ID、事务ID或其他特定于线程的详细信息。这使得在并发环境中追踪特定用户或任务的日志变得简单。可以使用MDC API来设置和获取上下文信息,这些信息可以通过配置日志Layout来自动展示在日志消息中。
NDC是一个与线程关联的堆栈结构。与MDC不同的是,NDC被设计用来反映程序的调用栈,而不是存储线程的诊断数据。可以在调用堆栈的每个层级添加信息,每次调用或任务进入和退出时都可以推送和弹出信息。这样,日志事件可以包含与当前执行点相关的调用路径信息,使得追踪和调试复杂的调用序列变得更加容易。NDC同样提供了API来操作堆栈,可以很容易地在代码中添加和移除上下文信息。
以上显示和描述了本发明的基本原理、主要特征和本发明的优点。本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下,本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。本发明要求保护范围由所附的权利要求书及其等效物界定。
Claims (7)
1.用于软件系统的日志数据跨语言自动记录方法,其特征在于,包括步骤:
S1、注册监听器以监听软件系统运行过程中的事件动作;
S2、引入log4cplus库以将所述软件系统的事件动作记录为日志数据,并输出为动态链接库文件;
S3、利用C++语言注册通用调用接口,通过所述通用调用接口调用动态链接库文件以实现对日志数据的查看;
所述监听器根据日志级别对软件系统事件动作进行不同类型的监听;
步骤S3中所述利用C++语言注册通用调用接口的方法包括:
S301、确定动态链接库文件的文件路径与文件名,并记录动态链接库文件的绝对路径;
S302、创建与动态链接库文件中函数的对应关系和调用链路的接口定义;
S303、创建目标语言与C++语言的绑定或声明;
S304、实现至少一个使用所述接口定义的封装层,用以将高级语言的调用转换为动态链接库文件函数的调用;
还包括用于在运行时动态配置日志的二次开发方法:通过读取新的配置并重新配置log4cplus,以实现动态配置日志。
2.如权利要求1所述的用于软件系统的日志数据跨语言自动记录方法,其特征在于,步骤S2中所述引入log4cplus库以将所述软件系统的事件动作记录为日志数据的写入方法包括:
S201、调用log4cplus::initialize()初始化日志系统;
S202、根据日志级别数量创建对应的日志记录器;
S203、使用日志记录器记录日志数据。
3.如权利要求1所述的用于软件系统的日志数据跨语言自动记录方法,其特征在于,步骤S3中所述对日志数据的查看方法包括:
在log4cplus.properties中配置ConsoleAppender的布局类型、输出格式和对应的日志级别,用以将日志数据输出到控制台;
或,在log4cplus.properties中配置RollingFileAppender的日志文件名称、最大文件大小、备份文件数量、输出格式和对应的日志级别,用以将日志数据输出到文件中以便稍后查看。
4.如权利要求1-3任一项所述的用于软件系统的日志数据跨语言自动记录方法,其特征在于,还包括用于定义日志输出目的地的二次开发方法:通过实现自定义的 Appender类来将日志输出到目标位置。
5.如权利要求1-3任一项所述的用于软件系统的日志数据跨语言自动记录方法,其特征在于,还包括用于定义日志输出格式的二次开发方法:通过实现自定义的 Layout 类来调整日志输出的格式。
6.如权利要求1-3任一项所述的用于软件系统的日志数据跨语言自动记录方法,其特征在于,还包括用于控制被记录的事件动作信息的二次开发方法:通过将自定义的过滤逻辑,实现自定义的包含目标过滤逻辑的过滤器,并将所述过滤器添加到日志记录器中。
7.如权利要求1-3任一项所述的用于软件系统的日志数据跨语言自动记录方法,其特征在于,还包括用于追踪日志中软件系统运行过程产生的事件动作的二次开发方法:通过使用MDC 工具在每个线程中保存上下文信息,通过使用NDC在堆栈中保存上下文信息,以实现在日志中附加上下文信息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410185090.XA CN117742783B (zh) | 2024-02-19 | 2024-02-19 | 用于软件系统的日志数据跨语言自动记录方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410185090.XA CN117742783B (zh) | 2024-02-19 | 2024-02-19 | 用于软件系统的日志数据跨语言自动记录方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117742783A CN117742783A (zh) | 2024-03-22 |
CN117742783B true CN117742783B (zh) | 2024-06-07 |
Family
ID=90254888
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410185090.XA Active CN117742783B (zh) | 2024-02-19 | 2024-02-19 | 用于软件系统的日志数据跨语言自动记录方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117742783B (zh) |
Citations (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104318163A (zh) * | 2014-10-27 | 2015-01-28 | 北京工业大学 | 一种第三方软件可信构建方法 |
CN104731580A (zh) * | 2015-01-12 | 2015-06-24 | 上海新炬网络信息技术有限公司 | 基于Karaf与ActiveMQ的自动化运维系统及其实现方法 |
KR20150136369A (ko) * | 2014-05-27 | 2015-12-07 | 주식회사 커머스톤컨설팅 | 로그 보안 및 빅 데이터를 이용한 통합 관리 시스템 |
CN105278996A (zh) * | 2015-11-03 | 2016-01-27 | 亚信科技(南京)有限公司 | 一种日志采集方法、装置及日志服务系统 |
CN105389507A (zh) * | 2015-11-13 | 2016-03-09 | 小米科技有限责任公司 | 监控系统分区文件的方法及装置 |
CN105426453A (zh) * | 2015-11-10 | 2016-03-23 | 国云科技股份有限公司 | 一种通过配置项控制日志输出等级的方法 |
CN107122426A (zh) * | 2017-04-11 | 2017-09-01 | 上海众开信息科技有限公司 | 基于数据库的操作日志信息的监听获取方法及装置 |
CN109672546A (zh) * | 2017-10-16 | 2019-04-23 | 比亚迪股份有限公司 | 日志生成方法、应用服务器、日志服务器及日志生成系统 |
CN111240643A (zh) * | 2019-12-27 | 2020-06-05 | 苏州铃空网络科技有限公司 | 一种跨平台的软件设计方法 |
CN114116429A (zh) * | 2021-12-02 | 2022-03-01 | 建信金融科技有限责任公司 | 异常日志采集方法、装置、设备、介质和产品 |
CN115129494A (zh) * | 2022-08-31 | 2022-09-30 | 浙江工业大学 | 一种基于Windows内核的事件日志采集方法及系统 |
CN115859274A (zh) * | 2022-12-12 | 2023-03-28 | 安芯网盾(北京)科技有限公司 | 一种监控Windows进程清空系统事件日志行为的方法及系统 |
CN116450885A (zh) * | 2023-02-14 | 2023-07-18 | 厦门市兴百邦科技有限公司 | 一种Windows事件日志文件的数据重构方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2003203001A (ja) * | 2001-12-28 | 2003-07-18 | Toshiba Corp | ログ解析方法、ログ解析プログラム |
-
2024
- 2024-02-19 CN CN202410185090.XA patent/CN117742783B/zh active Active
Patent Citations (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20150136369A (ko) * | 2014-05-27 | 2015-12-07 | 주식회사 커머스톤컨설팅 | 로그 보안 및 빅 데이터를 이용한 통합 관리 시스템 |
CN104318163A (zh) * | 2014-10-27 | 2015-01-28 | 北京工业大学 | 一种第三方软件可信构建方法 |
CN104731580A (zh) * | 2015-01-12 | 2015-06-24 | 上海新炬网络信息技术有限公司 | 基于Karaf与ActiveMQ的自动化运维系统及其实现方法 |
CN105278996A (zh) * | 2015-11-03 | 2016-01-27 | 亚信科技(南京)有限公司 | 一种日志采集方法、装置及日志服务系统 |
CN105426453A (zh) * | 2015-11-10 | 2016-03-23 | 国云科技股份有限公司 | 一种通过配置项控制日志输出等级的方法 |
CN105389507A (zh) * | 2015-11-13 | 2016-03-09 | 小米科技有限责任公司 | 监控系统分区文件的方法及装置 |
CN107122426A (zh) * | 2017-04-11 | 2017-09-01 | 上海众开信息科技有限公司 | 基于数据库的操作日志信息的监听获取方法及装置 |
CN109672546A (zh) * | 2017-10-16 | 2019-04-23 | 比亚迪股份有限公司 | 日志生成方法、应用服务器、日志服务器及日志生成系统 |
CN111240643A (zh) * | 2019-12-27 | 2020-06-05 | 苏州铃空网络科技有限公司 | 一种跨平台的软件设计方法 |
CN114116429A (zh) * | 2021-12-02 | 2022-03-01 | 建信金融科技有限责任公司 | 异常日志采集方法、装置、设备、介质和产品 |
CN115129494A (zh) * | 2022-08-31 | 2022-09-30 | 浙江工业大学 | 一种基于Windows内核的事件日志采集方法及系统 |
CN115859274A (zh) * | 2022-12-12 | 2023-03-28 | 安芯网盾(北京)科技有限公司 | 一种监控Windows进程清空系统事件日志行为的方法及系统 |
CN116450885A (zh) * | 2023-02-14 | 2023-07-18 | 厦门市兴百邦科技有限公司 | 一种Windows事件日志文件的数据重构方法 |
Non-Patent Citations (4)
Title |
---|
AUV机载日志管理系统设计;李纪伟;《 计算机产品与流通 》;20191015;1-5 * |
Listener 监听器&&Spring使用Log4jConfigListener配置Log4j日志;赛罗&奥特曼;《 https://www.cnblogs.com/lishuiqing/p/7889129.html》;20171124;1-5 * |
Real-Time Detection System Against Malicious Tools by Monitoring DLL on Client Computers;Wataru Matsuda;《2019 IEEE Conference on Application, Information and Network Security (AINS)》;20200127;1-8 * |
应用于无线网络的安全中间件设计与实现;陈烽;《万方》;20091218;1-56 * |
Also Published As
Publication number | Publication date |
---|---|
CN117742783A (zh) | 2024-03-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP2246783B1 (en) | Method and apparatus for automatically generating source code files in a file storage unit | |
US5724589A (en) | Development system with a property-method-event programming model for developing context-free reusable software components | |
EP2386953B1 (en) | Systems and methods for generating reusable test components out of remote application programming interface | |
US7127707B1 (en) | Intellisense in project upgrade | |
EP1179777B1 (en) | Generation of runtime execution traces of applications and error detection | |
US7743282B2 (en) | Capturing computer application diagnostics | |
US8635595B2 (en) | Method and system for managing non-compliant objects | |
US7203928B2 (en) | Method and system for generating and maintaining uniform test results | |
US20030149799A1 (en) | System supporting unified event handling in ECMAScript | |
US7900198B2 (en) | Method and system for parameter profile compiling | |
US20030200532A1 (en) | System and method for sharing reusable code base | |
US20020133807A1 (en) | Automation and isolation of software component testing | |
US20030233634A1 (en) | Open debugging environment | |
US20080235661A1 (en) | System and method for using annotations to automatically generate a framework for a custom javaserver faces (jsf) component | |
US10042658B1 (en) | Automatically adding bytecode to a software application to determine network communication information | |
US8479150B2 (en) | Compositional modeling of integrated systems using event-based legacy applications | |
JP5396979B2 (ja) | ソフトウェア開発支援装置、システム、ソフトウェア開発支援装置の機能拡張方法、及びプログラム | |
US8185876B2 (en) | Method and implementation for constructing of corrected java native code | |
US20180129494A1 (en) | Detect application defects by correlating contracts in application dependencies | |
CN117742783B (zh) | 用于软件系统的日志数据跨语言自动记录方法 | |
Zheng et al. | Comprehensive multiplatform dynamic program analysis for java and android | |
US6012149A (en) | Computer system with polymorphic fault processing | |
CN117742782B (zh) | 用于软件系统的日志数据跨语言自动记录方法及系统 | |
WO2008015110A2 (en) | Methods, apparatus and computer programs for modelling computer programs | |
CN111367796A (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 |