我现在已经花了很多时间搜索和阅读关于这个主题的帖子,但还没有注意到我的问题得到了完全的回答-或者我只是需要更多关于现有答案的澄清.

我已经读了this篇和我的标题相同的帖子,但它是关于跨围棋程序而不是包的登录.

我想要解决的是跨主应用程序和它使用的任何包进行日志(log)记录.我需要一个可以记录到多个位置的记录器(这可以用io.MultiWriter来完成),并且可以做像log.Error()和log.Debug()这样的事情.

我知道有一些包可以做到这一点,我自己也知道如何实现这些东西.

我想不通的是如何正确使用它来处理我的Package.

当然,一种方法是在Main中创建记录器,然后将其传递给所有需要记录的函数.但这看起来很尴尬.

我的理想解决方案是拥有一个类似于日志(log)包中内置的全局记录器的记录器,但具有如上所述的附加功能.

我主要希望在包中进行可选的调试日志(log)记录,这样如果需要,我可以在生产版本中打开它.

正确的方法是什么?

推荐答案

正确的方式就是你认为最理想的方式.只需创建一个包(最好遵循Go的约定https://golang.org/doc/code.html),并使您的日志(log)成为全局的:

package mylog

// Define your custom logger type.
type logger struct { /* Whatever you want */ }

// Optionally make it a interface.
type Logger interface { /* Your functions */ }

// And just go global.
var defaultLogger *Logger

func init(){
   defaultLogger = new(logger)
}

func Debug(params ...string){
   // Have some fun.
}

// ...

我还建议在文档中描述您的项目使用该日志(log)功能.

Go相关问答推荐

Golang Cososdb-gremlin连接

在Mac中使用uname获取处理器体系 struct 时,在为AMD64构建Go二进制时出现错误结果

如何在S汇编器中更高效地将全局数据加载到霓虹灯寄存器?

重新赋值变量时未清除动态类型-这是错误吗?

从MySQL/GO表获取行数据

golang regex基于关键字拆分字符串

go中跨域自定义验证的问题

如何使用 go 读取 RDF xml 文件中的 XML 命名空间属性

转到 bufio.Writer、gzip.Writer 并上传到内存中的 AWS S3

Kperf 构建失败

使用golang sqlc中的引用参数

Go 中的 YAML 自定义标签

同一文件上的多个 Arrow CSV 阅读器返回 null

具有两个或多个模型的 GORM 查询

Go 并发、goroutine 同步和关闭通道

vs 代码调试 go 测试不通过标志

为什么我不能使用来自 gocloak 中 Login() 的访问令牌在 KeyCloak 中创建新客户端?

如何使用带有Electron 表格 ID、Electron 表格名称、表格 ID 和值的 golang 在 googlesheet 中插入数据

golangci-lint 的 GitHub 操作失败,无法加载 fmt

try 创建新的 etcdv3 客户端时出现pc error: code = Unavailable desc = error reading from server: EOF