Golang包中日志的正确实现
我有一个做一些工作的小咕噜。这项工作假设可能会产生大量错误,这是正常的。目前所有错误都被忽略。是的,它可能看起来很奇怪,但请访问链接并检查包的主要用途。 我希望扩展包的功能,并提供查看运行时发生的错误的能力。但是由于缺乏软件设计技能,我有一些问题没有答案 首先,我想使用现有的日志记录(zerolog、zap或其他任何东西)在包内实现日志记录。但是,对软件包的用户来说可以吗?因为他们可能希望使用其他日志记录包,并希望修改输出格式。 也许可以为用户提供一种注入自己日志的方法Golang包中日志的正确实现,go,logging,packaging,software-design,Go,Logging,Packaging,Software Design,我有一个做一些工作的小咕噜。这项工作假设可能会产生大量错误,这是正常的。目前所有错误都被忽略。是的,它可能看起来很奇怪,但请访问链接并检查包的主要用途。 我希望扩展包的功能,并提供查看运行时发生的错误的能力。但是由于缺乏软件设计技能,我有一些问题没有答案 首先,我想使用现有的日志记录(zerolog、zap或其他任何东西)在包内实现日志记录。但是,对软件包的用户来说可以吗?因为他们可能希望使用其他日志记录包,并希望修改输出格式。 也许可以为用户提供一种注入自己日志的方法 我希望能够为日志记录提供
我希望能够为日志记录提供简单的可配置方式,用户可以根据需要打开或关闭日志记录。一些go-lib使用这样的日志记录 在您的包中,有一个记录器接口
type Yourlogging interface{
Errorf(...)
Warningf(...)
Infof(...)
Debugf(...)
}
var mylogger Yourlogging
func SetLogger(l yourlogging)error{
mylogger = l
}
for example:
SetLogger(os.Stdout) //logging output to stdout
SetLogger(logrus.New()) // logging output to logrus (github.com/sirupsen/logrus)
并为此接口定义一个变量
type Yourlogging interface{
Errorf(...)
Warningf(...)
Infof(...)
Debugf(...)
}
var mylogger Yourlogging
func SetLogger(l yourlogging)error{
mylogger = l
}
for example:
SetLogger(os.Stdout) //logging output to stdout
SetLogger(logrus.New()) // logging output to logrus (github.com/sirupsen/logrus)
在func中,可以调用它们进行日志记录
mylogger.Infof(..)
mylogger.Errorf(...)
您不需要实现接口,但可以使用实现此接口的人员
type Yourlogging interface{
Errorf(...)
Warningf(...)
Infof(...)
Debugf(...)
}
var mylogger Yourlogging
func SetLogger(l yourlogging)error{
mylogger = l
}
for example:
SetLogger(os.Stdout) //logging output to stdout
SetLogger(logrus.New()) // logging output to logrus (github.com/sirupsen/logrus)
在Go中,您将看到一些库像其他答案所建议的那样实现日志接口。但是,例如,如果以不同的方式构建应用程序,则可以完全避免包需要登录 例如,在链接的示例应用程序中,主应用程序运行时调用
idleexacts.Run()
,启动此函数
//StartOOP使用传递的设置和数据库连接启动工作负载。
func STARTOOP(ctx context.context、log log.Logger、pool db.db、tables[]字符串、作业uint16、minTime、maxTime time.Duration)错误{
rand.Seed(time.Now().UnixNano())
//由于rand.Int63n()从不返回最大值,因此将maxTime增量最多为1。
maxTime++
//运行时,保持所需数量的工人使用通道。
//只在有空闲时间之前运行新工人。
guard:=make(chan结构{},作业)
为了{
挑选{
//仅在可以写入通道时运行辅助进程(通道受作业数限制)。
护箱