本发明主要涉及日志记录,尤其涉及一种日志输出方法、装置和电子设备。
背景技术:
1、日志(log)是指系统所指定对象的某些操作和其操作结果按时间有序的集合。每个日志文件(log file)由日志记录组成,每条日志记录描述了一次单独的系统事件。通常情况下,系统日志是用户可以直接阅读的文本文件,其中包含了一个时间戳和一个信息或者子系统所特有的其他信息。
2、无论是对于测试环境还是生产环境上运行的程序,项目的日志打印功能都是不可或缺的一环,开发人员可以通过日志打印的信息快速定位到错误发生的地方,从而进行排查。例如,在使用go语言的项目中往往日志打印的地点在请求的最上层,而错误通常发生在请求调用的底层,在错误从底层逐渐向上层传递的途中往往会丢失中间的堆栈和调用信息,导致最上层日志记录的是一个残缺的底层错误信息,增大开发人员具体定位错误地点的难度。go语言的常用库中errors错误库中提供了底层错误记录堆栈的方法,zap日志库提供了终端和文件两种格式记录的方法,但是两种库在底层实现相互不兼容,并且zap日志库自带的错误堆栈记录方法只能记录调用那一层的错误堆栈信息,即在最上层打印日志就无法记录底层错误的堆栈信息。
3、可见,在当前技术中,错误从底层逐渐向上层传递的途中往往会丢失堆栈信息和调用信息,最终的日志记录或日志打印并不详细,不能记录底层错误根因,不能在最上层日志打印点记录底层错误信息。此外,当前也没有能够分别记录不同格式不同内容的日志输出方式。
技术实现思路
1、本发明要解决的技术问题是提供一种日志输出方法、装置和电子设备,能够在日志输出时输出底层的错误信息,且能以不同形式输出,方便开发人员进行错误排查,提高排查速率。
2、为解决上述技术问题,第一方面,本发明提供了一种日志输出方法,包括:在程序运行的底层发生错误时,记录所述底层的错误信息并将所述底层的错误信息上抛至上一层,其中所述底层为错误发生的开始层;在所述底层之上的每个中间层,记录当前中间层的错误信息以及接收来自下层的错误信息,并将两种错误信息上抛至上一层;最上层接收来自下一层的错误信息,并将所述错误信息作为日志进行输出。
3、可选地,还包括:每个中间层在接收到下一层的错误信息之后,将接收到的错误信息和所述中间层的错误信息进行封装,形成封装后的错误信息;将两种错误信息上抛至上一层包括:将封装后的错误信息上抛至上一层。
4、可选地,所述将所述错误信息作为日志进行输出包括:将所述错误信息作为日志进行终端日志输出和/或文件日志输出,其中所述终端日志使用终端编码器,所述文件日志采用文件编码器。
5、可选地,所述将所述错误信息作为日志进行输出包括:判断所述文件日志输出功能是否处于开启状态,若所述文件日志输出功能处于关闭状态,则采用所述终端日志输出。
6、可选地,还包括:判断所述文件日志输出功能是否处于开启状态,若所述文件日志输出功能处于开启状态,则同时采用所述终端日志输出和所述文件日志输出。
7、可选地,所述将所述错误信息作为日志进行输出包括:将所述日志写入所述终端编码器,通过所述终端编码器输出终端格式的日志,或将所述日志写入所述文件编码器,通过所述文件编码输出文件格式的日志。
8、可选地,所述错误信息包括错误的堆栈信息;所述将所述错误信息作为日志进行输出包括:判断堆栈信息记录功能是否处于开启状态,若所述堆栈信息记录功能处于关闭状态,则将所有所述错误信息输出在文件,除所述堆栈信息以外的其他错误信息输出在终端。
9、可选地,还包括:判断堆栈信息记录功能是否处于开启状态,若所述堆栈信息记录功能处于开启状态,则将获取到的错误信息同时输出到所述文件和所述终端。
10、可选地,所述方法应用于go语言。
11、第二方面,本发明提供了一种日志输出装置,包括:第一记录模块,用于在程序运行的底层发生错误时,记录所述底层的错误信息并将所述底层的错误信息上抛至上一层,其中所述底层为错误发生的开始层;第二记录模块,用于在所述底层之上的每个中间层,记录当前中间层的错误信息以及接收来自下层的错误信息,并将两种错误信息上抛至上一层;输出模块,用于最上层接收来自下一层的错误信息,并将所述错误信息作为日志进行输出。
12、第三方面,本发明提供了一种电子设备,包括:处理器和存储器,所述存储器存储可在所述处理器上运行的程序或指令,所述程序或指令被所述处理器执行时实现如第一方面所述的日志输出方法的步骤。
13、第四方面,本发明提供了一种可读存储介质,所述可读存储介质上存储程序或指令,所述程序或指令被处理器执行时实现如第一方面所述的日志输出方法的步骤。
14、与现有技术相比,本发明具有以下优点:通过在程序运行的底层发生错误时,记录底层的错误信息并将底层的错误信息上抛至上一层,其中底层为错误发生的开始层;再在底层之上的每个中间层,记录当前中间层的错误信息以及接收来自下层的错误信息,并将两种错误信息上抛至上一层;最终最上层接收来自下一层的错误信息,并将错误信息作为日志进行输出,进而能够在日志输出时输出底层的错误信息,能以不同形式输出,方便开发人员进行错误排查,提高排查速率。
1.一种日志输出方法,其特征在于,包括:
2.如权利要求1所述的日志输出方法,其特征在于,还包括:
3.如权利要求1所述的日志输出方法,其特征在于,所述将所述错误信息作为日志进行输出包括:
4.如权利要求3所述的日志输出方法,其特征在于,所述将所述错误信息作为日志进行输出包括:
5.如权利要求4所述的日志输出方法,其特征在于,还包括:
6.如权利要求5所述的日志输出方法,其特征在于,所述将所述错误信息作为日志进行输出包括:
7.如权利要求5所述的日志输出方法,其特征在于,所述错误信息包括错误的堆栈信息;
8.如权利要求7所述的日志输出方法,其特征在于,还包括:
9.如权利要求1所述的日志输出方法,其特征在于,所述方法应用于go语言。
10.一种日志输出装置,其特征在于,包括:
11.一种电子设备,其特征在于,包括:处理器和存储器,所述存储器存储可在所述处理器上运行的程序或指令,所述程序或指令被所述处理器执行时实现如权利要求1-9任一项所述的日志输出方法的步骤。
12.一种可读存储介质,其特征在于,所述可读存储介质上存储程序或指令,所述程序或指令被处理器执行时实现如权利要求1-9任一项所述的日志输出方法的步骤。