亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

golang中如何將日志寫入多個日志文件?

golang中如何將日志寫入多個日志文件?

Go
慕尼黑的夜晚無繁華 2023-06-12 10:00:15
我正在編寫一個應用程序,我需要在其中記錄兩個不同文件中的日志。例如weblogs .go 和debuglogs.go。我嘗試使用log4go,但我的要求是我需要在主文件中創建記錄器,并且可以在子目錄中訪問,因為主要的解碼和記錄是在子文件中完成的。有人可以幫忙嗎?
查看完整描述

2 回答

?
繁星淼淼

TA貢獻1775條經驗 獲得超11個贊

這是使用標準log包的一種方法:


package main


import (

    "io"

    "log"

    "os"

)


func main() {

    f1, err := os.Create("/tmp/file1")

    if err != nil {

        panic(err)

    }

    defer f1.Close()


    f2, err := os.Create("/tmp/file2")

    if err != nil {

        panic(err)

    }

    defer f2.Close()


    w := io.MultiWriter(os.Stdout, f1, f2)

    logger := log.New(w, "logger", log.LstdFlags)


    myfunc(logger)

}


func myfunc(logger *log.Logger) {

    logger.Print("Hello, log file!!")

}

筆記:

  1. io.MultiWriter用于將多個編寫器組合在一起。在這里,它創建了一個寫入器w- 寫入w將轉到os.Stdout兩個文件

  2. log.New讓我們log.Logger用自定義編寫器創建一個新對象

  3. log.Logger對象可以傳遞給函數并由它們用來記錄事物


查看完整回答
反對 回復 2023-06-12
?
Helenr

TA貢獻1780條經驗 獲得超4個贊

這就是您如何使用多日志文件管理用于調試和生產環境的日志:


首先,創建一個用于管理多個記錄器的類型,您可以為此創建一個單獨的文件,例如logging.go


type LOGGER struct {

        debug *log.Logger

        prod  *log.Logger

        .

        .

        .

    }

要在項目中的任何位置獲取指針,最好的方法是通過單例模式LOGGER獲取它,例如


    var lock = &sync.Mutex{}

    var loggers *LOGGER


    func GetLoggerInstance() *LOGGER {

      lock.Lock()

      defer lock.Unlock()


    if loggers == nil {

      fmt.Println("Creating LOGGER instance now.")

      loggers = &LOGGER{} 

    } else {

        fmt.Println("LOGGER instance already created.")

    }


    return loggers

}

    

現在在任何 pkg 或目錄級別為調試環境設置記錄器更好的方法是在根級別設置它


    logger := GetLoggerInstance()

    f, err := os.OpenFile("path/to/debug/log/file", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)

    if err != nil {

        fmt.Println("debug log file not created", err.Error())

    }

    loggers.debug = log.New(f, "[DEBUG]", log.Ldate|log.Ltime|log.Lmicroseconds|log.LUTC)


    loggers.debug.Println("This is debug log message")


使用相同的方法,您還可以創建 prod 或任意數量。


    logger := GetLoggerInstance()

    f, err = os.OpenFile("path/to/prod/log/file", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)

    if err != nil {

        fmt.Println("prod log file not created", err.Error())

    }

    loggers.prod = log.New(f, "[PROD]", log.Ldate|log.Ltime|log.Lmicroseconds|log.LUTC)


    loggers.prod.Println("This is prod log message")


查看完整回答
反對 回復 2023-06-12
  • 2 回答
  • 0 關注
  • 422 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號