我写了一个go程序来监控一些MySQL数据库。在下面的示例中,我只是显示“连接成功!” 连接成功时显示“连接错误:”,失败时显示错误消息。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}这按预期工作,但在某些情况下,执行 db.Ping() 时会出现一些错误消息并显示到 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最后一行是我预期的消息,但是调用 db.Ping() 时会显示上一行。我想捕获/隐藏此消息[mysql] 2019/07/22 18:01:59 auth.go:293: unknown auth plugin:dialog,因为我已经收到一条干净的错误消息,我可以按照我的意愿处理它(显示或不显示)。如何防止出现此类错误消息(我的意思是在代码中,而不是在调用时)?
1 回答
慕工程0101907
TA贡献1887条经验 获得超5个赞
您的自定义记录器可以执行对您的应用程序有意义的任何操作,包括“吞掉”这些日志记录语句,并且在没有错误的情况下不显示任何内容。
要回答问题的标题,您可以os.Stderr
使用以下内容进行捕获:
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 关注
- 121 浏览
添加回答
举报
0/150
提交
取消