加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Go/Golang将日志写入文件

发布时间:2020-12-16 09:41:56 所属栏目:大数据 来源:网络整理
导读:我试图写一个日志文件与Golang。 我试过几种方法,所有的都失败了。这是我试过的: func TestLogging(t *testing.T) { if !FileExists("logfile") { CreateFile("logfile") } f,err := os.Open("logfile") if err != nil { t.Fatalf("error: %v",err) } // a
我试图写一个日志文件与Golang。

我试过几种方法,所有的都失败了。这是我试过的:

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 {
    t.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 opens the named
file for reading. If successful,methods on the returned file can be
used for reading; the associated file descriptor has mode O_RDONLY. If
there is an error,it will be of type *PathError.

编辑

移动defer f.Close()到后如果err!= nil检查

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读