回答

收藏

如何将日志写入文件

技术问答 技术问答 269 人阅读 | 0 人回复 | 2023-09-12

我试着用 Go 写日志文件。3 s$ r4 d$ G# j6 H3 ~. }
我尝试了几种方法,但都失败了。这是我试过的:/ t0 x! F8 j( [. e5 s
    func TestLogging(t *testing.T)    if !FileExists("logfile")        CreateFile("logfile")   }    f,err := os.Open("logfile")    if err != nil        t.Fatalf("error: %v",err)   }    // attempt #1    log.SetOutput(io.MultiWriter(os.Stderr,f))    log.Println("hello,logfile")    // attempt #2    log.SetOutput(io.Writer(f))    log.Println("hello,logfile")    // attempt #3    log.SetOutput(f)    log.Println("hello,logfile")}func FileExists(name string) bool    if _,err := os.Stat(name); err != nil       if os.IsNotExist(err)            return false         return true}func CreateFile(name string) error    fo,err := os.Create(name)    if err != nil        return err   }    defer func()        fo.Close()   ()return nil}
    2 y4 Z# Z* u8 r- ?; U2 m
创建了日志文件,但没有打印或附加任何内容。为什么?& K' z8 Z' I% k7 _! H8 C$ o
                                                                + _# m  ~" W0 ~0 |, T3 B& f
    解决方案:                                                                + c8 Z8 `7 |" C) r
                                                                os.Open() 过去一定有不同的工作方式,但对我有用:1 B7 t- i" R1 ~
    f,err := os.OpenFile("testlogfile",os.O_RDWR | os.O_CREATE | os.O_APPEND,0666)if err != nil    log.Fatalf("error opening file: %v",err)}defer f.Close()log.SetOutput(f)log.Println("This is a test log entry")" q* o, q. D. p
基于 Go 文档,os.Open()不能为log.SetOutput,打开文件阅读:
# m! s4 q7 v; N5 F9 E" nfunc Open
  x' n% {& X& Vfunc Open(name string) (file *File,err error) Open打开命名文件进行读取。如果成功,可以通过返回文件来读取;相关文件描述具有 mode O_RDONLY。如果有错误,类型是*PathError。
0 R1 i! l+ N4 i0 ]& P编辑' m* q6 H) `7 f8 ~2 y
检查defer f.Close()后移至if err != nil
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则