golang等待io.Writer被写入

时间:2015-11-12 08:09:35

标签: go io buffer

golang标准http.Server包中的net/http类型有一个名为ErrorLog的字段,其类型为log.Logger

这是我ErrorLog中设置http.Server的方式:

// set up HTTP server
server = &http.Server{
    Addr:      getPortFromConfig(),
    Handler:   handler,
    ErrorLog:  log.New(io.MultiWriter(stdout, fileout), "", 1),
}

所以在这里,io.MultiWriter()函数创建一个新的io.Writer,它将我http.Server的所有写入复制到文件和stdout中。它就像一个魅力。

但是,我想拦截数据并在将数据写入文件之前对其进行格式化。

怎么可能这样做?

1 个答案:

答案 0 :(得分:1)

您可以创建自己的编写器,实现“Write([] byte)错误”。 创建此编写器时,您将文件writer作为参数。 每次您的作者收到某些内容时,它会对其进行格式化,然后在文件编写器上调用“Write”方法。 类似的东西:

type MyFormatter struct {
       fileWriter io.Writer
 }

 func (m *MyFormatter) Write(buf []byte) error {
       formattedBytes := FormatBytes(buf)
       m.fileWriter.Write(formattedBytes)
 }

没有测试过那段代码,它只是伪代码!

编辑:您甚至可以使用嵌入式编写器

type MyFormatter struct {
       io.Writer
 }

 func (m *MyFormatter) Write(buf []byte) error {
       formattedBytes := FormatBytes(buf)
       m.Writer.Write(formattedBytes)
 }