go - Golang 包中的正确日志记录实现

标签 go logging packaging software-design

我有小Golang package这做了一些工作。这项工作假设可能会产生大量错误,这是可以的。当前所有错误都被忽略。是的,它可能看起来很奇怪,但请访问链接并检查包的主要用途。 我想扩展包的功能并提供查看运行时发生的错误的能力。但由于缺乏软件设计技能,我有一些问题没有答案。

起初,我想使用现有的日志记录(zerolog、zap 或其他)在包内实现日志记录。但是,包的用户可以吗?因为他们可能想使用其他日志记录包并想修改输出格式。 也许可以为用户提供一种方法来注入(inject)它自己的日志记录?

我希望能够提供易于配置的日志记录方式,可以根据用户需求打开或关闭。

最佳答案

一些 go lib 像这样使用日志记录

在你的包中定义一个记录器接口(interface)

type Yourlogging interface{
      Errorf(...)
      Warningf(...)
      Infof(...)
      Debugf(...)
}

并为这个接口(interface)定义一个变量

  var mylogger Yourlogging
  func SetLogger(l yourlogging)error{
       mylogger = l
  }

在你的函数中,你可以调用它们进行日志记录

  mylogger.Infof(..)

  mylogger.Errorf(...)

你不需要实现这个接口(interface),但是你可以使用实现了这个接口(interface)的人

 for example:
     SetLogger(os.Stdout)    //logging output to stdout
     SetLogger(logrus.New()) // logging output to logrus  (github.com/sirupsen/logrus)
  

关于go - Golang 包中的正确日志记录实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62807327/

相关文章:

python - 类型错误 : only length-1 arrays can be converted to Python scalars while trying to exponentially fit data

java - 如何制作包含 DLL 文件的 JAR 文件?

python - setuptools 为所有脚本增加了 150 毫秒的启动延迟

java - 将图片发送到另一台计算机时如何查找图片的路径

pointers - Golang中Structure变量中Field的访问地址

戈朗 : How to convert string to []int?

java - 当整个 Maven 项目在 junit 测试下运行时,logger.info 抛出空指针异常

无序字符串集的良好哈希函数?

json - 无文件的 Golang gads 包身份验证

python - 避免 `logger=logging.getLogger(__name__)`