为了账号安全,请及时绑定邮箱和手机立即绑定

如何将日志写入文件

如何将日志写入文件

Go
子衿沉夜 2021-07-09 14:43:52
我正在尝试使用 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}日志文件被创建,但没有任何东西被打印或附加到它。为什么?
查看完整描述

3 回答

?
慕容3067478

TA贡献1773条经验 获得超3个赞

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


查看完整回答
反对 回复 2021-07-12
?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

我通常在屏幕上打印日志并写入文件。希望这可以帮助某人。


f, err := os.OpenFile("/tmp/orders.log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)

if err != nil {

    log.Fatalf("error opening file: %v", err)

}

defer f.Close()

wrt := io.MultiWriter(os.Stdout, f)

log.SetOutput(wrt)

log.Println(" Orders API Called")


查看完整回答
反对 回复 2021-07-12
  • 3 回答
  • 0 关注
  • 191 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信