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中。它就像一个魅力。
但是,我想拦截数据并在将数据写入文件之前对其进行格式化。
怎么可能这样做?
答案 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)
}