我可以将所有消息定向到log.txt个文件:

logFile, err := os.OpenFile("log.txt", os.O_CREATE | os.O_APPEND | os.O_RDWR, 0666)
if err != nil {
    panic(err)
}
log.SetOutput(logFile)

但是我怎样才能在控制台中也获得日志(log)消息呢?

推荐答案

使用io.MultiWriter

MultiWriter创建一个编写器,该编写器将其写入复制到所有提供的编写器,类似于Unix tee(1)命令

logFile, err := os.OpenFile("log.txt", os.O_CREATE | os.O_APPEND | os.O_RDWR, 0666)
if err != nil {
    panic(err)
}
mw := io.MultiWriter(os.Stdout, logFile)
log.SetOutput(mw)

唯一的变化是

mw := io.MultiWriter(os.Stdout, logFile)

Go相关问答推荐

Go汇编器命名为Constants

获取k8s群集作用域运算符的命名空间

+在具有html/模板Golang的Base64中

链自定义GRPC客户端拦截器/DialOptions

如何使用Gorilla WebSockets实现Http.Hijacker&;alexedwards/scs/v2

如何给杜松子wine 的路由加上一个名字,比如Laravel ?

戈姆:如何将一对一联系起来?

可以';t从主机连接到ScyllaDB容器

为什么 mux.Vars() 返回空的 map[]

使用goroutines在Golang中验证 struct

linter 警告:返回值被忽略

错误!在为 age-viewer-go 运行 wails dev 或 wails build 命令时

如何在 `hashicorp / terraform-exec` 中将 `ApplyConfig` 传递给 `tf.Apply()`?

没有任务角色的 AWS CDK ECS 任务定义

获取切片元素的地址是否意味着 Go 中元素的副本?

使用 go.work 文件在多个测试文件上运行 go test 命令

为什么当我忽略 template.New() 程序可以成功运行?

Grafana/Prometheus 将多个 ip 可视化为查询

Go 泛型是否与 LINQ to Objects 等效?

Go 1.18 泛型如何使用接口定义新的类型参数