参考了国外友人的方案:https://stackoverflow.com/questions/40396499/go-create-io-writer-inteface-for-logging-to-mongodb-database
1.输出日志到文件
func CreateDir(dir string) (bool, error) {
_, err := os.Stat(dir)
if err == nil {
//directory exists
return true, nil
}
err2 := os.MkdirAll(dir, 0755)
if err2 != nil {
return false, err2
}
return true, nil
}
func main() {
res2, err := fileManager.CreateDir("/LOG/PATH") //创建文件夹
if res2 == false {
panic(err)
}
file, _ := os.OpenFile("/LOG/PATH/error.log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666) //打开日志文件,不存在则创建
defer file.Close()
log.SetOutput(file) //设置输出流
log.SetPrefix("[Error]") //日志前缀
log.SetFlags(log.Llongfile | log.Ldate | log.Ltime) //日志输出样式
log.Println("Hi file")
}
2.日志输出到mongo
需要实例化一个Write方法
type MongoWriter struct {
session *mgo.Session
}
func (mw *MongoWriter) Write(p []byte) (n int, err error) {
c := mw.session.DB("db_seetacloud").C("t_system_errors_log")
err = c.Insert(bson.M{ //设计mongo日志表存储格式
"datetime": time.Now().Format("2006-01-02 15:04:05"),
"message": string(p),
"channel":"Golang",
})
if err != nil {
return
}
return len(p), nil
}
func main() {
session := <实例化你的mongodb连接>
mw := &MongoWriter{session}
log.SetOutput(mw)
log.SetPrefix("[Error]")
log.SetFlags(log.Llongfile | log.Ldate | log.Ltime)
log.Println("Hi mongo")
}