一种前端日志多通道输出的方法、装置、服务器及存储介质与流程

文档序号:17130465发布日期:2019-03-16 01:08阅读:164来源:国知局
一种前端日志多通道输出的方法、装置、服务器及存储介质与流程

本发明涉及计算机前端开发技术领域,具体涉及一种前端日志多通道输出的方法、装置、服务器及存储介质。



背景技术:

目前大部分前端开发人员在开发过程中都会将程序中的日志直接打印到控制台,这样的日志打印缺乏统一出口,且没有通过统一出口设置日志开关。在没有日志开关的前提下,程序计算比较频繁,日志打印较多的场景中会产生前端性能大幅度下降的问题,即又要进行程序运算且要进行io输出。



技术实现要素:

鉴于现有技术存在的问题,本发明的目的是提供一种前端日志多通道输出的方法、装置、服务器及存储介质,将所有日志信息提供统一出口,提供日志开关、日志级别控制及日志输出方法,采用驱动器定义日志驱动,提供一套标准供日志驱动接口及标准实现。

为了实现上述目的,本发明采用的技术方案为一种前端日志多通道输出的方法,所述方法包括以下步骤:

s1、定义前端浏览器的日志驱动抽象类,提供不同级别的日志驱动的统一标准,根据所述统一标准运用日志驱动器实现日志输出;

s2、定义不同级别日志输出统一出口类,用于将不同级别日志输出口统一,在统一日志出口处进行日志级别输出控制;s3、调取日志驱动,将日志信息统一输出。

在上述技术方案中,所述步骤s1中运用日志驱动器扩展新日志,所述日志驱动器需继承日志驱动抽象类统一标准,实现新日志驱动输出。

在上述技术方案中,所述日志级别设置函数为setlevel,用于设置日志打印级别,所述日志级别按优先级设置,当打印日志时,打印的日志为所设置当前级别日志及所述当前级别以下的日志。在上述技术方案中,所述步骤s2中,所述日志驱动设置函数为setdriver,当运用所述日志驱动函数设置日志加载驱动时,将根据日志驱动实现对应日志的输出。在上述技术方案中,所述步骤s2中,所述日志级别输出控制时,每个日志在输出过程中进行级别判断,若大于当前设置的日志级别的日志不进行输出。。

在上述技术方案中,所述步骤s3中调取的驱动包括实例化日志驱动和日志统一输出出口驱动。

在上述技术方案中,所述方法还包括在外部设置日志开关,用于控制日志对外打印,通过浏览器地址栏所加载的url后加上日志参数,浏览器识别后进行日志级别设置,日志级别设置完成后会输出对应级别的日志。

本发明公开一种前端日志多通道输出的装置,所述装置包括第一定义模块、第二定义模块和调取输出模块;

第一定义模块,定义前端浏览器的日志驱动抽象类,提供不同级别的日志驱动的统一标准,根据所述统一标准运用日志驱动器实现日志输出;第二定义模块,用于定义不同级别日志输出统一出口类,用于将不同级别日志输出口统一,在统一日志出口处进行日志级别输出控制;调取输出模块,用于调取日志驱动,将日志信息统一输出。

本发明公开一种前端日志多通道输出的装置的服务器,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述任一项所述一种前端日志多通道输出的方法的步骤。

本发明公开一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述任一项所述一种前端日志多通道输出的方法的步骤。

本发明一种前端日志多通道输出方法、装置、服务器及存储介质,具有以下有益效果:本发明提供多种日志驱动实现日志多出口策略,能有效增加js日志的多样性,提供多个日志驱动以供实际开发需要的选择,并能集成包括控制台日志、页面日志、远程日志等调试方式。能大幅度提升日志装置的扩展性,为更多的日志场景提供可能性。

附图说明

图1为本发明实施例一提供的一种前端日志多通道输出方法的流程图;

图2本发明实施例二提供一种前端日志多通道输出装置模块图;

图3为本发明实施例三提供的服务器的结构示意图。

具体实施方式

本发明提供一种前端日志多通道输出方法、装置、服务器及存储介质,本发明提供日志开关,设置需要打印的日志级别,提供多种日志驱动实现日志多出口策略。

为使得本发明的发明目的、特征、优点能够更加的明显和易懂,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,下面所描述的实施例仅仅是本发明一部分实施例,而非全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。

本发明如图1所示实施例一提供一种前端日志多通道输出方法,所述方法包括以下步骤,如图1所示:

s1、定义前端浏览器的日志驱动抽象类,提供不同级别的日志驱动的统一标准,根据所述统一标准运用日志驱动器实现日志输出;其中,所述抽象类在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类,抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。父类包含了子类集合的常见的方法,但是由于父类本身是抽象的,所以不能使用这些方法。

其中,前端浏览器开发过程中调试是一个不可避免的过程,有众多的浏览器可供选择,但是如果需要调试的平台浏览器出现问题,给程序调试带来的很大的问题,所以日志即时输出是很必要的,可以知道程序覆盖到了哪里。在复杂的网络环境和浏览器环境下,自测、qa测试以及codereview都是不够的,如果对页面稳定性和准确性要求较高,就必须有一套完善的代码异常监控体系,需要从前端代码异常监控的方法和问题着手,尽量全面地阐述错误日志收集各个阶段中可能遇到的阻碍和处理方案。

其中,由于javascriptecmascript6中并无接口的概念,所以使用抽象类代替,命名为abslogdriver,所述抽象类提供5个不同级别的日志输出方法,并完成5个不同级别的日志输出,所述5个级别日志分别为info指定能够突出在粗粒度级别的应用程序运行情况的信息的消息,log,debug指定细粒度信息事件是最有用的应用程序调试,warn指定具有潜在危害的情况,error错误事件可能仍然允许应用程序继续运行,对于标准级别它们关系如下:debug<info<warn<error。debug级别最低,可以随意的使用任何有利在调试时更详细的了解系统运行状态的东西,info重要输出信息,用来反馈系统的当前状态给最重用户,warn可修复,系统可继续运行,error可修复性,但无法确定系统会正常的工作。

其中,javascript是一种面向对象的动态语言,它包含类型、运算符、标准内置(built-in)对象和方法。它的语法来源于java和c,所以这两种语言的许多语法特性同样适用于javascript。需要注意的一个主要区别是javascript不支持类,类这一概念在javascript通过对象原型(objectprototype)得到延续。另一个主要区别是javascript中的函数也是对象,javascript允许函数在包含可执行代码的同时,能像其他对象一样被传递。javascript的核心是支持面向对象的,同时它也提供了强大灵活的oop语言能力。面向对象编程是用抽象方式创建基于现实世界模型的一种编程模式。它使用先前建立的范例,包括模块化,多态和封装几种技术。如今,许多流行的编程语言(如java,javascript,c#,c++,python,php,ruby和objective-c)都支持面向对象编程(oop)。相对于“一个程序只是一些函数的集合,或简单的计算机指令列表。”的传统软件设计观念而言,面向对象编程可以看作是使用一系列对象相互协作的软件设计。在oop中,每个对象能够接收消息,处理数据和发送消息给其他对象。每个对象都可以被看作是一个拥有清晰角色或责任的独立小机器。面向对象程序设计的目的是在编程中促进更好的灵活性和可维护性,在大型软件工程中广为流行。凭借其对模块化的重视,面向对象的代码开发更简单,更容易理解,相比非模块化编程方法,它能更直接地分析,编码和理解复杂的情况和过程。

其中,所述接口,英文称作interface,在软件工程中,接口泛指供别人调用的方法或者函数。它是对行为的抽象,接口中可以含有变量和方法。接口是一种极度抽象的类型,它比抽象类更加“抽象”,并且一般情况下不在接口中定义变量。

其中,抽象类可以提供成员方法的实现细节,而接口中只能存在publicabstract方法;抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是publicstaticfinal类型的;接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法;一个类只能继承一个抽象类,而一个类却可以实现多个接口。抽象类是对一种事物的抽象,即对类抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。设计层面不同,抽象类作为很多子类的父类,它是一种模板式设计。而接口是一种行为规范,它是一种辐射式设计,对于抽象类,如果需要添加新的方法,可以直接在抽象类中添加具体的实现,子类可以不进行变更;而对于接口则不行,如果接口进行了变更,则所有实现这个接口的类都必须进行相应的改动。

其中,info用于打印程序应该出现的正常状态信息,便于追踪定位;warn表明系统出现轻微的不合理但不影响运行和使用;error表明出现了系统错误和异常,无法正常完成目标操作。

错误日志格式可以为:

log.error(“[接口名或操作名][someerrormsg]happens.[params][probablybecause].[probablyneedtodo].”);

log.error(string.format(“[接口名或操作名][someerrormsg]happens.[%s].[probablybecause].[probablyneedtodo].”,params));或

log.error(“[someerrormsg]happensto错误参数或内容when[insomecondition].[probablybecause].[probablyneedtodo].”);

log.error(string.format(“[someerrormsg]happensto%swhen[insomecondition].[probablybecause].[probablyneedtodo].”,parameters));

[probablyreason].[probablyneedtodo].在某些情况下可以省略;

每一条错误日志都是独立的,尽可能完整、具体、直接说明何种场景下发生了什么错误,由什么原因导致,要采用什么措施或步骤。

错误日志是排查问题的重要手段之一。当编程实现一项功能时,通常会考虑可能发生的各种错误及相应原因:

要排查出相应的原因,就需要一些关键描述来定位原因。这就会形成三元组:错误现象->错误关键描述->最终的错误原因。

需要针对每一种错误尽可能提供相应的错误关键描述,从而定位到相应的错误原因。

可选的,所述步骤s1中运用日志驱动器扩展新日志,所述日志驱动器需继承日志驱动抽象类统一标准,实现新日志驱动输出。具体的,扩展新的日志,通过继承日志驱动抽象类,并覆盖日志驱动抽象类中定义的不同级别的日志输出方法。所述继承按现有类创建一个对象,不改变现有类,采用现有类的形式向其中添加新代码;继承的优点是子类可以重写父类的方法来方便地实现对父类的扩展。

其中,若实现一个基于控制台输出日志的驱动器,命名为consolelogdriver,运行时继承日志抽象类,覆盖上述实施例中info、log、debug、warn、error,5个不同级别的日志,若所述日志驱动需要在控制台打印,需要在在控制台下日志输出即可,通过驱动器模式能快速有效的对日志驱动进行扩展。

s2、定义不同级别日志输出统一出口类,用于将不同级别日志输出口统一,在统一日志出口处进行日志级别输出控制;可选的,定义驱动器logdriver、当前日志级别loglevel,所述日志级别设置函数为setlevel,用于设置日志打印级别,所述日志级别按优先级设置,当打印日志时,打印的日志为所设置当前级别日志及所述当前级别以下的日志。其中,日志信息的优先级,日志信息的输出目的地,日志信息的输出格式。日志信息的优先级从高到低有error、warn、info、debug,分别用来指定这条日志信息的重要程度;日志信息的输出目的地指定了日志将打印到控制台还是文件中;而输出格式则控制了日志信息的显示内容。使用setlevel(level)方法的配置文件,通过所述配置的文件设置日志级别。

具体的,日志级别配置可分为3类,一类如上配置是配置父类日志记录器的日志级别,第二类是配置子类日志记录器的日志级别,第三类是配置输出源(控制台、文件等)的日志级别。他们的日志级别解析优先级由低到高排列。例如:

1.如果配置(也必须要配置)了父类日志记录器(rootlogger)的日志级别(假设是info级别),没有配置子类日志记录器的日志级别,也没有配置输出源的日志级别,则输出源只能输出info级别以上的;

2.如果配置(也必须要配置)了父类日志记录器(rootlogger)的日志级别(假设是info级别),配置了子类日志记录器的日志级别(假设是debug级别),没有配置输出源的日志级别,则输出源输出debug级别以上的;

3.如果配置(也必须要配置)了父类日志记录器(rootlogger)的日志级别(假设是info级别),配置了子类日志记录器的日志级别(假设是debug级别),配置了输出源的日志级别(假设是info级别),则输出源输出info级别以上的;

4.如果配置(也必须要配置)了父类日志记录器(rootlogger)的日志级别(假设是info级别),没有配置子类日志记录器的日志级别,配置了输出源的日志级别(假设是debug级别),则输出源输出info级别以上的;

因此,从上述的例子中可以知道日志记录器和输出源输出日志级别存在2个逻辑关系:

1.输出源如果没有定义日志级别,它会继承最接近它的子类日志记录器的日志级别;子类日志记录器没有定义日志级别,它会继承最接近它的父类日志记录器。

2.打印日志时输出源会根据自身定义的日志级别与最接近它的子类日志记录器定义的日志级别比较,如果输出源定义的级别高于子类日志记录器,则按输出源定义的日志级别输出日志,反之则按子类日志记录器的日志级别输出。

可选的,所述日志驱动设置函数为setdriver,当运用所述日志驱动函数设置日志加载驱动时,将根据日志驱动实现对应日志的输出。

可选的,所述日志级别输出控制时,每个日志在输出过程中进行级别判断,若大于当前设置的日志级别的日志不进行输出。

其中,例如在info方法中做级别判断为:if(levels.info>currlevel)return。

s3、调取日志驱动,将日志信息统一输出。

可选的,所述步骤s3中调取的驱动包括实例化日志驱动和日志统一输出出口驱动。具体,实例化日志驱动constconsolelogdriver=newconsolelogdriver(),日志统一出口加载具体驱动log.setdriver(consolelogdriver)。

具体的console.log用于输出普通信息,console.info用于输出提示性信息,console.error用于输出错误信息,console.warn用于输出警示信息,console.debug用于输出调试信息。

具体,所述console为操纵、控制台是windows的控制台窗口增强。控制台功能包括:多个标签,文本编辑器(比如文本选择),不同类型的背景,字母和颜色的透明度,可配置的字体,不同的窗口样式,对于前端开发者来说,在开发过程中需要监控某些表达式或变量的值的时候,用debugger会显得过于笨重,取而代之则是会将值输出到控制台上方便调试。最常用的语句就是console.log(expression)了,console对象除了console.log()这一最常被开发者使用的方法之外,还有很多其他的方法。

console对象上的五个直接输出方法,console.log(),console.warn(),console.error(),console.exception()(等同于console.error())和console.info(),都可以使用占位符。支持的占位符有四种,分别是字符(%s)、整数(%d或%i)、浮点数(%f)和对象(%o)。

可选的,所述方法还包括在外部设置日志开关,用于控制日志对外打印,通过浏览器地址栏所加载的url后加上日志参数,浏览器识别后进行日志级别设置,日志级别设置完成后会输出对应级别的日志。

其中,所述url为统一资源定位符,就是一个表示资源位置的字符串,将url输入到浏览器地址栏上就可以访问到对应资源。

根据querystring设置日志级别

querystring是查询字符串,一般是对http请求所带的数据进行解析。querystring模块提供4个方法,这4个方法是相对应的。

这4个方法分别是querystring.parse这个方法是将一个字符串反序列化为一个对象,querystring.stringify这个方法是将一个对象序列化成一个字符串,与querystring.parse相对,querystring.escapeescape可使传入的字符串进行编码和querystring.unescapeunescape方法可将含有%的字符串进行解码。

const命令,const声明一个只读的常量。常量的值不能改变。const声明的变量不得改变值。

本发明实施例二如图2所示提供一种前端日志多通道输出的装置,所述装置包括第一定义模块、第二定义模块和调取输出模块;

第一定义模块,用于定义前端浏览器的日志驱动抽象类,提供不同级别的日志驱动的统一标准,根据所述统一标准运用日志驱动器实现日志输出;

第二定义模块,用于定义不同级别日志输出统一出口类,用于将不同级别日志输出口统一,在统一日志出口处进行日志级别输出控制;调取输出模块,用于调取日志驱动,将日志信息统一输出。

本发明实施例三如图3所示提供一种前端日志多通道输出的装置的服务器结构示意图,所述实施例的服务器包括:处理器30、存储器31以及存储在所述存储器31中并可在所述处理器30上运行的计算机程序32。所述处理器30执行所述计算机程序32时实现上述各方法实施例中的步骤,所述处理器30执行所述计算机程序32时实现上述装置实施例中各模块的功能。

所述一种前端日志多通道输出的装置的服务器可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备,所述一种前端日志多通道输出的装置的服务器可包括,但不限于,处理器30、存储器31。图3仅仅是对此服务器的示例,并不构成对此服务器的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,所述一种前端日志多通道输出的装置的服务器还可以包括输入输出设备33、显示设备34等。

所述处理器30可以是中央处理单元,还可以是其他通用处理器、数字信号处理器、专用集成电路、现成可编程门阵列或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。

所述存储器31可以是所述一种前端日志多通道输出的装置的服务器的内部存储单元、硬盘或内存。所述存储器31也可以是所述服务器的外部存储设备,或配备的插接式硬盘,智能存储卡,安全数字卡,闪存卡等。

进一步地,所述存储器31还可以既包括所述服务器的内部存储单元也包括外部存储设备。所述存储器31用于存储所述计算机程序以及所述电子设备所需的其他程序和数据。所述存储器31还可以用于暂时地存储已经输出或者将要输出的数据。

所述的输入输出设备33可用于接收输入的数字或字符信息,具体的,输入输出设备33还可以包括但不限于键盘、鼠标、操作杆等中的一种和多种。

所述的显示设备34可用于显示由用户输入的信息或提供给用户信息以及终端的各种菜单,显示设备34可包括显示面板,可选的,可采用液晶显示器。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各实施例的模块、方法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。

以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1