go - Logger.Writer.(*os.File) (左侧的非接口(interface)类型 func() io.Writer)

标签 go logging

初始化记录器后:

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.Writer Logger 上的一种方法,而不是字段:

func (l *Logger) Writer() io.Writer
它返回原始 io.Writer log.New .
您正在尝试转换 功能 Logger.Writer*os.File (然后到 io.Closer )。相反,您需要转换返回值:
...
if file, ok := Logger.Writer().(*os.File); ok {
  ...
} else if handler, ok := Logger.Writer().(io.Closer); ok {
...

关于go - Logger.Writer.(*os.File) (左侧的非接口(interface)类型 func() io.Writer),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62640978/

相关文章:

go - 基于异步回调的 API 的同步 API 包装器

typescript - Deno 记录器 FileHandler 不写入文件

java - 登录 Java 和一般 : Best Practices?

默认情况下将命令输出到标准输出?

pointers - 如何在Go中使用Win32的GetRawInputDeviceList?

postgresql - Docker:golang webapp 和 postgres 服务器之间的连接被拒绝

.net - 配置NLog以英文写入异常消息

python - 在 Python 3 中记录到多个文件

java - 使用 SLF4J,是否可以对错误/警告采取行动?

go - net.IPNet 在其他 net.IPNet 里面?