第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

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

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

Go
慕后森 2023-06-12 17:30:06
我有這個(gè)功能,我用它來記錄: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))}我想將我的日志輸出保存在某個(gè)文件中: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但是當(dāng)我調(diào)用我的函數(shù)時(shí),它使用 fmt.Printf 它不會(huì)登錄文件go-logs.txt:formattedErr("ERR", msg, err.Error(), int(Red))無論如何也為 fmt.Printf 設(shè)置輸出
查看完整描述

1 回答

?
達(dá)令說

TA貢獻(xiàn)1821條經(jīng)驗(yàn) 獲得超6個(gè)贊

fmt.Printf()它寫入標(biāo)準(zhǔn)輸出的文件:

Printf 根據(jù)格式說明符格式化并寫入標(biāo)準(zhǔn)輸出。

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

但請(qǐng)注意,標(biāo)準(zhǔn)輸出是包中的一個(gè)變量os

Stdin、Stdout 和 Stderr 是指向標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤文件描述符的打開文件。

請(qǐng)注意,Go 運(yùn)行時(shí)會(huì)針對(duì)恐慌和崩潰寫入標(biāo)準(zhǔn)錯(cuò)誤;關(guān)閉 Stderr 可能會(huì)導(dǎo)致這些消息轉(zhuǎn)到其他地方,可能會(huì)轉(zhuǎn)到稍后打開的文件。

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

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

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


查看完整回答
反對(duì) 回復(fù) 2023-06-12
  • 1 回答
  • 0 關(guān)注
  • 145 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)