关闭具有延迟关闭的文件

在我的主函数中,我打开一个日志文本文件进行写入,并使用延迟关闭方法在应用程序退出后将其关闭。但是,在每个新的一天开始时,我希望开始写入第二天的日志文件,并且我不知道如何关闭前一天的文件并开始写入当前的文件。


在我的主要功能中:


func main() {


f, err := os.OpenFile("2019-07-24.txt", os.O_RDWR | os.O_CREATE | os.O_APPEND, 0644)

    if err != nil {

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

    }

    defer f.Close()


    log.SetOutput(f)


}

现在,当我在新的一天收到另一个包裹中的消息时:


func gateway() {


f, err := os.OpenFile("2019-07-25.txt", os.O_RDWR | os.O_CREATE | os.O_APPEND, 0644)

    if err != nil {

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

    }

    defer f.Close()


    log.SetOutput(f)


}

如何从另一个包获取指向前一天日志文件的指针,然后将其关闭(除非应用程序完全关闭,否则不会调用延迟调用?


慕沐林林
浏览 121回答 1
1回答

翻过高山走不出你

创建一个管理日志输出的包。package logoutputpackage mainimport (    "io"    "log"    "sync")var (    mu            sync.Mutex    curr io.WriteCloser)func Set(w io.WriteCloser) {    mu.Lock()    defer mu.Unlock()    prev := curr    curr = w    log.SetOutput(curr)    if prev != nil {       prev.Close()    }}func Close() {    mu.Lock()    defer mu.Unlock()    log.SetOutput(os.Stderr) // revert to default    if curr != nil {       curr.Close()    }    curr = nil}从 main 和 gateway 包中调用该包。f, err := os.OpenFile("2019-07-24.txt", os.O_RDWR | os.O_CREATE | os.O_APPEND, 0644)if err != nil {    log.Fatalf("Error opening log file: %v", err)}logoutput.Set(f)defer logoutput.Close() // call from main only
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go