如何将日志写入文件

我正在尝试使用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

回到顶部