当前位置: 首页 > 网络应用技术

Golang:手支持六个级别的日志库

时间:2023-03-07 00:56:36 网络应用技术

  Golang标准日志库提供的日志输出方法包括打印,致命,恐慌等。没有常见日志,例如调试,信息,错误,这些日志不容易使用。这篇文章在这里保存日志库,可以记录不同级别的日志。

  实际上,对于简单的追求,Golang标准日志库的三种输出方法就足够了,并且易于理解:

  但是,对于那些习惯于调试,信息,错误的人,它仍然有点不习惯;对于想要区分日志级别的日志记录级别的需求,标准日志库还提供了通用输出方法。开发人员将要导出输出字符。它也可以加入字符串中的级别,但是它总是有点尴尬,而不是直接。

  目前,市场上还有许多出色的三方日志库,例如Uber的开源ZAP,而普通的ZAP是动物学和logrus。完全满足他们的需求。他们无法使用许多功能,这会增加系统的复杂性。当然,进入坑的可能性也很高。在查看了官方日志库的实现之后,我觉得我可以简单地封装自己想要的功能并可以保留它。

  我在这里的最初需求是:

  我命名为ylog这个日志库。预期如何使用它如下:

  您需要定义信息,例如结构,保留日志级别和要编写的文件。

  看看这些参数:

  LasThir用于创建日志文件时记录小时数。如果小时更改,则需要创建一个新的日志文件。

  文件当前使用的日志文件。

  级别当前使用日志级别。

  因为MU可能会在不同的GO例程中编写日志,因此相互排斥的身体可确保不会重复创建日志文件。

  ILOGGER标准日志库实例,因为此处已封装标准日志库。

  路径日志输出的上级目录(例如根目录中的日志目录)在此处保存一个字符串:logs。

  首先定义日志级别。这里的日志级别实际上是INT类型,从0到5,级别继续上升。

  如果您设置为toInfo,则可以输出信息级别,而日志高于信息级别。

  如上所述,可以将日志级别添加到输出方法的参数中。

  我在输出日志之前做了三件事:

  然后在标准库中调用输出功能输出日志。这里的第一个参数是获取当前正在编写日志的程序文件名。传递的是程序调用堆栈中搜索堆栈的深度值。

  标准库的日志支持输出到多个目标。只要实现io.write界面:

  因为文件对象也可以实现此界面,因此可以在此处使用一个OS.File实例,并且可以将其设置为嵌入式的标准日志库实例,也就是说,它设置为在FileLogger中创建的filelogger。操作是在确保方法中,并查看该文件的实现:

  这里有点复杂。基本逻辑是:如果不存在文件实例,请创建;如果您需要创建一个新文件,请首先关闭旧文件并创建一个新文件。

  更改文件实例时,您需要锁定,否则可能会多次操作,并且在预期的情况下还有其他情况。

  将输出设置为文件后,标准日志库的输出方法将将日志输出到此文件。

  经过一系列操作后,可以使用此Filelogger:

  但是,它与初始想象力的初始使用有所不同:ylog.info(“ xxxx”)

  这需要在YLOG软件包中定义一个称为信息的开放函数。您可以调用此公共功能中默认创建的FILELOGGER实例。代码是这样:

  请注意,这里没有STD的跟踪方法。这是因为输出中的第一个参数。如果设置了std.trace,则必须将参数层设置为3,但是此参数设置为3,但是当您创建一个实例以调用跟踪时,情况就是这样。参数必须为2,引起冲突。

  上述操作后,可以实现预期的日志操作:

  完整的程序已上传到GitHub,欢迎访问:https://github.com/bosima/ylog/tree/tree/v1.0.1

  下一篇文章将继续转换此日志库,以JSON格式支持日志,然后将输出日志转换为Kafka。

  要收获更多的建筑知识,请注意微信的公共帐户Firefly Architecture.firfly Architecture.firfly content,请指出来源。

  原始:https://juejin.cn/post/7098110948367400996