如何将日志写入文件
我正在尝试使用Go写入日志文件。
我尝试了几种方法,但都失败了。这是我尝试过的:
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
}
日志文件被创建,但是没有任何打印或附加到该文件。为什么?
回答:
os.Open()
过去的工作方式一定不同,但这对我有用:
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")
基于Go文档,os.Open()
不能用于log.SetOutput
,因为它会打开文件“供阅读:”
func Open
func Open(name string) (file *File, err error)
Open
打开命名文件以供读取。如果成功,则可以使用返回文件上的方法进行读取;关联的文件描述符具有mode
O_RDONLY
。如果有错误,它将是类型*PathError
。
检查defer f.Close()
后移至if err != nil
以上是 如何将日志写入文件 的全部内容, 来源链接: utcz.com/qa/399123.html