这很容易
log.Logger做到,因为该类型可以保证每个日志消息都可以通过
io.Writer一次
Writer.Write()调用传递到目标:
每个日志记录操作都会调用Writer的Write方法。一个Logger可以同时从多个goroutine中使用;它保证序列化对Writer的访问。
因此,基本上,您只需要创建一个实现的类型
io.Writer,并且该类型的
Write()方法只需调用记录器即可。
这是执行此操作的简单实现:
type fwdToZapWriter struct { logger *zap.SugaredLogger}func (fw *fwdToZapWriter) Write(p []byte) (n int, err error) { fw.logger.Errorw(string(p)) return len(p), nil}就这样。您可以
http.Server像这样“安装”该编写器:
server := &http.Server{ Addr: addr, Handler: handler, ErrorLog: logger.New(&fwdToZapWriter{logger}, "", 0),}logger上面的示例来自您的示例:
logger, err := cfg.Build()
如果你愿意,你可以很容易地转发给你的
AppLogger,而不是
logger。



