Go   发布时间:2022-04-09  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Golang中使用log(三):log模块的设计大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

Golang的log模块可谓是语言层面上非常基础的一层库,反应的是语言本身的特征而不是一个服务应该怎样怎样。为了方便自己写 应用,我按照自己的需求提出一些log的API并重新实现。和Golang的log模块形成互补。

自己的log模块设计

对于我自己的log模块,暂时不需要log4j里面复杂的配置系统,也就不需要父子继承的命名约定。我需要这样一套系统。在主模块中或者基础模块中进行日志的初始化,在需要使用日志的其他模块中通过GetLogger(log String)获得我初始化过的日志,然后通过分等级的 API记录不同等级的Log。日志的抬头可以通过设置为几种最常用的模式,无需从配置文件中进行复制控制。不同等级的日志可以定位到 不同的输出目的地从而便于分析。可以控制的DEBUG日志。log本身不做exit、panic处理,保持透明,留给用户自己选择。

@H_616_6@1。日志分级

对日志进行分级,有: DEBUG INFO WARNING TRACE ERROR FATAL 几个等级。其中DEBUG可以通过开关控制其 关闭输出到标准输出或者输出文件。INFO、WARNING则输出到xxx.log的文件中。TRACE输出到xxx.trac文件中,ERROR、FATAL输出 到xxx.err文件中。不同等级的日志分别有对应的接口进行输出

2.统一设置

在基础模块或者初始化模块中通过 NewLogger(path,basename,logName String,level Level)(Error) 接口初始化日志对象,在需要使用该日志对象的时候通过LogGet(logName String )(* Logger)获得该对象。最后通过 LogClear(logName String) 销毁对象并做清理。

3.一致的打log接口

提供一个包级接口。使用一个认的Logger对象作为载体。输出到标准输出,其中ERROR和FATAL等级的输出到标准错误

@H_197_26@log.DEBUG(format,v ... interface{}) log.INFO(format,v... interface{}) log.WARNNING(format,v... interface{}) log.TRACE(format,v... interface{}) log.ERROR(format,v... interface{}) log.FATAL(format,v... interface{})

认的日志格式为 "[NAME][LEVEL][file full path & line number]: log content。

以上接口类似与Printf并可以自动换行,若将format置为""-空字符串,则表现的类似Println可以自动识别出自定义复杂类型,无需人工进行格式定义,行尾自动换行。

通过GetLogger得到的对象类型为

@H_197_26@type Logger struct{ // something here }

该对象也实现了上述接口: Logger.DEBUG(format,v ... interface{}) Logger.INFO(format,v... interface{}) Logger.WARNNING(format,v... interface{}) Logger.TRACE(format,v... interface{}) Logger.ERROR(format,v... interface{}) Logger.FATAL(format,v... interface{})

同样format为空字符串时表现类似Println。对Logger对象的操作需要首先调用LogInit进行初始化。接口会根据level选择是否进行输出。level 分为:

@H_197_26@DEBUG INFO WARNING TRACE ERROR FATAL

等级依次增高。level之前的等级不做输出

4.看一个实际的例子

@H_197_26@package main import ( "github.com/cz-it/log4golang/log" "fmt" ) func main(){ fmt.Println("TesTing:") err := log.Init() if err != nil{ panic("log init error") } logger := log.NewLogger("./a/b","test","nimei",log.DEBUG) logger.Debug("logger's debug") logger.Info("logger's info") logger.Warning("logger's Waring") logger.Trace("logger's Trace") logger.Error("logger's error") logger.Fatal("logger's fatal") log.Debug("Debug") log.Info("Info") log.Warning("Warning") log.Trace("Trace") log.Error("Error") log.Fatal("fatal end") log.Debug("","logger is",logger) }

这里首import 我们的log。然后调用 log.Init 初始化包对象。之后既可以通过包级接口将日志 打印到认的位置,也可以自己调用 log.NewLogger 创建一个logger对象,把路径,日志文件 名以及日志名传给构造函数

在其他模块可以通过 log.GetLogger 获得之前new出来的log,从而可以在多个文件或者模块中对 同一个日志进行操作。

代码文件可以clone这里

大佬总结

以上是大佬教程为你收集整理的Golang中使用log(三):log模块的设计全部内容,希望文章能够帮你解决Golang中使用log(三):log模块的设计所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。