最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【已解决】go语言中如何使用io的MultiWriter

GO crifan 6520浏览 0评论

【背景】

折腾:

【已解决】go语言中实现log信息同时输出到文件和控制台(命令行)

期间,需要去搞懂:

如果新建和设置MultiWriter。

 

【折腾过程】

1.参考:

https://github.com/polaris1119/The-Golang-Standard-Library-by-Example/blob/master/chapter01/01.1.md

去看看:

MultiReader 和 MultiWriter 函数

2.然后去试试代码:

    var filenameOnly string
    filenameOnly = GetCurFilename()
    fmt.Println("filenameOnly=", filenameOnly)
    
    var logFilename string =  filenameOnly + ".log";
    fmt.Println("logFilename=", logFilename)
    logFile, err := os.OpenFile(logFilename, os.O_RDWR | os.O_CREATE, 0777)
    if err != nil {
        fmt.Printf("open file error=%s\r\n", err.Error())
        os.Exit(-1)
    }
    defer logFile.Close()
    
    writers := []io.Writer{
        logFile,
        os.Stdout,
    }
    
    fileAndStdoutWriter := io.MultiWriter(writers...)
    fileAndStdoutWriter.Write([]byte("show in both log file and console via multiwriter"))

结果是:

是可以实现对应的效果的:

show info both in log file and console

 

至此,至少基本实现了:

如何新建和使用MultiWriter了。

 

【总结】

新建和使用MultiWriter的示例代码如下:

var logFilename string =  "multiWriterTest.log";
fmt.Println("logFilename=", logFilename)
logFile, err := os.OpenFile(logFilename, os.O_RDWR | os.O_CREATE, 0777)
if err != nil {
    fmt.Printf("open file error=%s\r\n", err.Error())
    os.Exit(-1)
}
defer logFile.Close()

writers := []io.Writer{
    logFile,
    os.Stdout,
}

fileAndStdoutWriter := io.MultiWriter(writers...)
fileAndStdoutWriter.Write([]byte("show in both log file and console via multiwriter\r\n"))

虽然效果不是那么爽,但是基本能用。

转载请注明:在路上 » 【已解决】go语言中如何使用io的MultiWriter

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
89 queries in 0.435 seconds, using 22.14MB memory