我寫了一個go程序來監(jiān)控一些MySQL數(shù)據(jù)庫。在下面的示例中,我只是顯示“連接成功!” 連接成功時顯示“連接錯誤:”,失敗時顯示錯誤消息。package mainimport ( "database/sql" "fmt" _ "github.com/go-sql-driver/mysql")func main() { err := mysqlConnect() if err != nil { fmt.Println("Connection Error:", err) } else { fmt.Println("Connection Success!") }}func mysqlConnect() error { db, err := sql.Open("mysql", "myuser:mypwd@tcp(10.2.0.3:3306)/mysql") if err != nil { return err } defer db.Close() err = db.Ping() if err != nil { return err } return nil}這按預(yù)期工作,但在某些情況下,執(zhí)行 db.Ping() 時會出現(xiàn)一些錯誤消息并顯示到 stdErr:例如:$ go run main.go[mysql] 2019/07/22 18:01:59 auth.go:293: unknown auth plugin:dialogConnection Error: this authentication plugin is not supported最后一行是我預(yù)期的消息,但是調(diào)用 db.Ping() 時會顯示上一行。我想捕獲/隱藏此消息[mysql] 2019/07/22 18:01:59 auth.go:293: unknown auth plugin:dialog,因為我已經(jīng)收到一條干凈的錯誤消息,我可以按照我的意愿處理它(顯示或不顯示)。如何防止出現(xiàn)此類錯誤消息(我的意思是在代碼中,而不是在調(diào)用時)?
1 回答

慕工程0101907
TA貢獻1887條經(jīng)驗 獲得超5個贊
您的自定義記錄器可以執(zhí)行對您的應(yīng)用程序有意義的任何操作,包括“吞掉”這些日志記錄語句,并且在沒有錯誤的情況下不顯示任何內(nèi)容。
要回答問題的標題,您可以os.Stderr
使用以下內(nèi)容進行捕獲:
func doPrint() {
? ? fmt.Fprintf(os.Stderr, "output")
}
func main() {
? ? old := os.Stderr
? ? r, w, _ := os.Pipe()
? ? os.Stderr = w
? ? doPrint()
? ? w.Close()
? ? var buf bytes.Buffer
? ? io.Copy(&buf, r)
? ? os.Stderr = old
? ? fmt.Println("Captured:", buf.String())
}
- 1 回答
- 0 關(guān)注
- 142 瀏覽
添加回答
舉報
0/150
提交
取消