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