记录器.作家.(*操作系统.文件) (非接口类型 func() io.左边的作家)



初始化记录器后:

var Logger *log.Logger
f, err := os.OpenFile("somefile", os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0666)
Logger = log.New(f, "prefix: ", log.LstdFlags)

我想关闭记录器的目标文件:

func main() {
// Close log writer on exit
defer func(){
if file, ok := Logger.Writer.(*os.File); ok {
file.Sync()
file.Close()
} else if handler, ok := Logger.Writer.(io.Closer); ok {
handler.Close()
}
}()
// ...
}

但是Logger.Writer.(*os.File)语法给出错误:

invalid type assertion: Logger.Writer.(*os.File) (non-interface type func() io.Writer on left)

如何关闭记录器的目标文件?

该错误几乎为您详细说明:Logger.WriterLogger上的方法,而不是字段:

func (l *Logger) Writer() io.Writer

它返回提供给log.New的原始io.Writer

您正在尝试将函数Logger.Writer转换为*os.File(然后转换为io.Closer(。相反,您需要转换返回值:

...
if file, ok := Logger.Writer().(*os.File); ok {
...
} else if handler, ok := Logger.Writer().(io.Closer); ok {
...

最新更新