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

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

有什么方法可以使用 golang std 庫來格式化日志(如下所述)?

有什么方法可以使用 golang std 庫來格式化日志(如下所述)?

Go
慕斯709654 2023-04-04 17:02:07
2018 年 2 月 1 日下午 3:04:05(UTC)| 這是日志消息2018-02-01T15:04:05Z | 這是日志消息我在 go src 中找到了下一個格式: https: //github.com/golang/go/blob/master/src/log/log.go#L37 但似乎我無法僅使用那些格式來做到這一點..
查看完整描述

2 回答

?
繁花不似錦

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

https://play.golang.org/p/hPCn3MflkgQ 這是一個答案。您應該處理 Writer 接口并使用它創建新的 Log



查看完整回答
反對 回復 2023-04-04
?
Smart貓小萌

TA貢獻1911條經驗 獲得超7個贊

這里有兩個選項:


使用 log.SetOutput 設置自定義編寫器。


或者使用 fmt 包而不是只打印到 stdout 或其他地方 - stdlib 日志包沒有做太多,它很容易創建你自己的日志包,它以自定義時間格式輸出到 stdout(或日志文件) . 例如,這里有幾行這樣的包:


package log


import (

? ? "fmt"

? ? "time"

)


var TimeFormat = "2006-02-01T15:04:05Z"


func Printf(format string, args ...interface{}) {

? ? format = fmt.Sprintf("%s %s", time.Now().Format(TimeFormat), format)

? ? fmt.Printf(format, args...)

}

如果您有特定需求,我建議您自己執行此操作,并使用 fmt.Printf 輸出到標準輸出。你真的不需要第三方日志包。


查看完整回答
反對 回復 2023-04-04
?
當年話下

TA貢獻1890條經驗 獲得超9個贊

您可以log.SetOutput(...)與使用所需格式(例如內置 RFC3999 或您選擇的格式之一)打印條目的參數編寫器一起使用,例如:

const timeFormat = time.RFC3339


type logWriter struct{}


func (lw *logWriter) Write(bs []byte) (int, error) {

? return fmt.Print(time.Now().UTC().Format(timeFormat), " | ", string(bs))

}


func main() {

? log.SetFlags(0)? ? ? ? ? ? ? ?// Omit default prefixes.

? log.SetOutput(new(logWriter)) // Use our custom writer.


? log.Printf("Hello, %s!", "World")

? // 2018-09-18T14:50:40Z | Hello, World!

}

您可以使用不同的格式更改時間戳,例如:


const timeFormat = "Jan 2, 2006 at 3:04:05pm (UTC)"


// ...

? log.Printf("Hello, %s!", "World")

? // Sep 18, 2018 at 2:52:26pm (UTC) | Hello, World!


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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