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

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

在 GO 中滾動日志文件的最佳方法

在 GO 中滾動日志文件的最佳方法

Go
瀟瀟雨雨 2021-12-27 15:20:08
在生產中使用 go 語言的人是否面臨滾動日志文件的問題?有沒有可能安全地滾動日志文件線程?是否有任何框架可以做到這一點?謝謝你。
查看完整描述

3 回答

?
皈依舞

TA貢獻1851條經驗 獲得超3個贊

我在https://github.com/natefinch/lumberjack 上取得了很好的成功,它是輕量級的,搭載在 golang 的標準和內存高效的“日志”pkg 上。


使用非常簡單,只需添加一行代碼即可設置,并正常使用日志:


log.SetOutput(&lumberjack.Logger{

    Filename:   "/var/log/myapp/foo.log",

    MaxSize:    500, // megabytes

    MaxBackups: 3,

    MaxAge:     28, //days

})


查看完整回答
反對 回復 2021-12-27
?
回首憶惘然

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

我傾向于采用12 Factor方法記錄到 std 錯誤并讓其他東西處理輪換。

然后,你可以選擇系統旋轉你的日志,如被提及這里


查看完整回答
反對 回復 2021-12-27
?
慕婉清6462132

TA貢獻1804條經驗 獲得超2個贊

這是一個內部解決方案。您可以考慮讓一個 goroutine 負責日志記錄和日志輪換,并通過一個通道接收來自其他 goroutine 的日志。每當需要輪轉時,goroutine 都會輪轉日志,而來自其他 goroutine 的傳入日志則在通道上排隊。日志輪換完成后,它將使通道上的任何內容出列并繼續記錄。


類似的東西:


type Log struct {


    log string

    // other info you might want

}


// This will be your goroutine

func Logging(LogChannel chan Log) {


    // assume logger creates/opens a file and prepares it for writing  

    logger := New(logger) 


    for {


        // collect a log. Will also block until a log is available on the channel

        log <- LogChannel


        if timeToRotate() {


            RotateLogFile(logger)


        }


        // write log 

        logger.Log(log)

    }

}

編輯:在檢查日志文件是否旋轉后,先前的代碼具有阻塞調用。最好把它放在timeToRotate函數調用之前,以防止在日志文件輪換后寫日志的可能性


查看完整回答
反對 回復 2021-12-27
  • 3 回答
  • 0 關注
  • 730 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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