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

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

如何在自定義文件中記錄 fmt.Printf

如何在自定義文件中記錄 fmt.Printf

Go
慕后森 2023-06-12 17:30:06
我有這個功能,我用它來記錄:func formattedLog(prefix, m string, color int) {    fmt.Printf("\033[%dm%s", color, DateTimeFormat)    fmt.Printf("? %s: %s\033[%dm\n", prefix, m, int(Black))}我想將我的日志輸出保存在某個文件中:f, err := os.OpenFile("../../../go-logs.txt", os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0666)if err != nil {    log.Fatal("error opening logs file", err)}defer f.Close()//set output of logs to flog.SetOutput(f)log.Println("This is a test log entry") // <====This logs in file但是當我調用我的函數時,它使用 fmt.Printf 它不會登錄文件go-logs.txt:formattedErr("ERR", msg, err.Error(), int(Red))無論如何也為 fmt.Printf 設置輸出
查看完整描述

1 回答

?
達令說

TA貢獻1821條經驗 獲得超6個贊

fmt.Printf()它寫入標準輸出的文件:

Printf 根據格式說明符格式化并寫入標準輸出。

所以沒有fmt.SetOutput()將其重定向到您的文件。

但請注意,標準輸出是包中的一個變量os

Stdin、Stdout 和 Stderr 是指向標準輸入、標準輸出和標準錯誤文件描述符的打開文件。

請注意,Go 運行時會針對恐慌和崩潰寫入標準錯誤;關閉 Stderr 可能會導致這些消息轉到其他地方,可能會轉到稍后打開的文件。

var?(
????????Stdin??=?NewFile(uintptr(syscall.Stdin),?"/dev/stdin")
????????Stdout?=?NewFile(uintptr(syscall.Stdout),?"/dev/stdout")
????????Stderr?=?NewFile(uintptr(syscall.Stderr),?"/dev/stderr")
)

并且您可以將自己的設置os.Fileos.Stdout.?盡管對記錄器使用相同的方法os.File并將其設置為不是一個好主意os.Stdout,但對其File.Write()方法的訪問不會在fmt包和記錄器之間同步。

最好是使用log.Loggereverywhere (你正確設置了它的輸出,所以日志消息會被正確地序列化)。


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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