登录
首页 >  Golang >  Go问答

GoLang 将 STDOUT 和 STDERR 写入 log15 文件

来源:stackoverflow

时间:2024-04-11 11:18:33 330浏览 收藏

从现在开始,努力学习吧!本文《GoLang 将 STDOUT 和 STDERR 写入 log15 文件》主要讲解了等等相关知识点,我会在golang学习网中持续更新相关的系列文章,欢迎大家关注并积极留言建议。下面就先一起来看一下本篇正文内容吧,希望能帮到你!

问题内容

我有 GoLang 应用程序,我使用 log15 将日志写入文件。我用于 log15 的包是 gopkg.in/inconshreveable/log15.v2 我遇到了一种情况,我想将 STDERR 和 STDOUT 的信息写入我写入 log15 日志的同一文件中。有没有可能的方法来实现相同的目标


解决方案


您可以使用管道捕获 os.stdout 并使用 io.multiwriter 将输出重定向到实际的 stdout 和您的文件

f, _ := os.OpenFile("my.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0664)
multiWriter := io.MultiWriter(os.Stdout, f)
rd, wr, err := os.Pipe()
if err != nil {
    os.Exit(1)
}

// overwrite os.Stdout
os.Stdout = wr

go func() {
    scanner := bufio.NewScanner(rd)
    for scanner.Scan() {
        stdoutLine := scanner.Text()
        multiWriter.Write([]byte(stdoutLine + "\n"))
    }
}()


fmt.Println("foobar")

// hacky sleep to ensure the go routine can write before program exits
time.Sleep(time.Second)

当然,您也可以对 os.stderr 应用相同的方法

您必须找到如何获取 log15 文件的句柄,但这应该不会太难

这种方法可能存在的问题是,无法保证 goroutine 在程序结束时会完成其工作(请参阅睡眠黑客),不确定如何实现这一点

今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>