我正在尝试为 Go 的内置记录器编写一个包装器。这就是要有相容性。
package main
import (
"log"
"os"
)
var(
mylog *log.Logger
)
func main() {
mylog = log.New(os.Stdout, "", 0)
mylog.Printf("test")
}
我不想使用os.Stdout,而是想创建一个东西。与os.Stdout类似,但打印时带有如下前缀。
package main
import(
"log"
"mylibrary"
)
var(
mylog *log.Logger
)
func main() {
mylog = log.New(mylibrary.Prefix, "", 0)
mylog.Printf("test")
}
基本上,我仍然希望在拥有自定义日志的同时拥有*log.Logger。有人可以提示我如何使它起作用吗?
目前,我正在使用以下方法来做到这一点。但我敢打赌有更好的方法。
func NewIoWriter(f func(string)) *io.PipeWriter {
r, w := io.Pipe()
go func() {
scanner := bufio.NewScanner(r)
for scanner.Scan() {
f(scanner.Text())
}
if err := scanner.Err(); err != nil {
f(err.Error())
}
r.Close()
}()
runtime.SetFinalizer(w, (*io.PipeWriter).Close)
return w
}
让它工作的更好方法是什么?
繁星coding
相关分类