這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
依賴之前文章的loggor模組(參見http://studygolang.com/articles/9791),可以將日誌分級記錄至檔案,debug、info、warn、error、fatal,結合以下代碼,可將項目中之前的log日誌輸出無縫列印至記錄檔
如:
//import "log"
import log "util/mlog"
.....
log.Println("...............")
//@description調試日誌輸出//@author chenbintao//@data 2017-04-1009:31初稿//2017-05-0421:31調試package mlogimport ("tool/log4go")func Println(message ...interface{}) {log4go.Println(true, log4go.LEVER_DEBUG, log4go.MODE_FILE, message)}
//@description調試日誌輸出(各級日誌採用隔離方式)//@author chenbintao//@data 2017-04-1009:31初稿//2017-05-0421:31調試package log4goimport ("log""runtime/debug" //此處依賴之前文章的loggor模組"util/loggor")const (_TABLE_ = "\t" //記錄檔行分隔字元)const (LEVER_UNKNOW = 0LEVER_DEBUG = 1LEVER_INFO = 2LEVER_WARN = 3LEVER_ERROR = 4LEVER_FATAL = 5)const (MODE_STDIO = 1MODE_FILE = 2MODE_NET = 3)const (LOG_TYPE_UNKNOW = 1000LOG_TYPE_DEBUG = 1001LOG_TYPE_INFO = 1002LOG_TYPE_WARN = 1003LOG_TYPE_ERROR = 1004LOG_TYPE_FATAL = 1005)const (LOG_TYPE_ROOT_NAME = "./logs/level/"//日誌路徑可自行配置LOG_TYPE_UNKNOW_NAME = "unknow"LOG_TYPE_DEBUG_NAME = "debug"LOG_TYPE_INFO_NAME = "info"LOG_TYPE_WARN_NAME = "warn"LOG_TYPE_ERROR_NAME = "error"LOG_TYPE_FATAL_NAME = "fatal")var debugLoger *loggor.Logger //DEBUGvar infoLoger *loggor.Logger //INFOvar warnLoger *loggor.Logger //WARNvar errorLoger *loggor.Logger //ERRORvar fatalLoger *loggor.Logger //FATAL//初始化日誌記錄器func _init_() {debugLoger = &loggor.Logger{}infoLoger = &loggor.Logger{}warnLoger = &loggor.Logger{}errorLoger = &loggor.Logger{}fatalLoger = &loggor.Logger{}debugLoger.SetType(LOG_TYPE_DEBUG)debugLoger.SetRollingFile(LOG_TYPE_ROOT_NAME, LOG_TYPE_DEBUG_NAME, 2, 500, loggor.MB)infoLoger.SetType(LOG_TYPE_INFO)infoLoger.SetRollingFile(LOG_TYPE_ROOT_NAME, LOG_TYPE_DEBUG_NAME, 2, 500, loggor.MB)warnLoger.SetType(LOG_TYPE_WARN)warnLoger.SetRollingFile(LOG_TYPE_ROOT_NAME, LOG_TYPE_DEBUG_NAME, 2, 500, loggor.MB)errorLoger.SetType(LOG_TYPE_ERROR)errorLoger.SetRollingFile(LOG_TYPE_ROOT_NAME, LOG_TYPE_DEBUG_NAME, 2, 500, loggor.MB)fatalLoger.SetType(LOG_TYPE_FATAL)fatalLoger.SetRollingFile(LOG_TYPE_ROOT_NAME, LOG_TYPE_DEBUG_NAME, 2, 500, loggor.MB)}//Log Servicefunc LogServer() {_init_() //日誌器初始化//(!!!後續增加服務狀態監測,守護進程等)}//帶輸出判斷的行記錄器func Println(enable bool, lever int, mode int, message ...interface{}) {if !enable {return}defer func() {if e, ok := recover().(error); ok {log.Println("ERR: panic in %s - %v", message, e)log.Println(string(debug.Stack()))}}()switch mode {case MODE_STDIO:log.Println(message)breakcase MODE_NET://網路方式breakcase MODE_FILE:if nil == infoLoger {_init_()}switch lever {case LEVER_DEBUG:(*debugLoger).Println(message)breakcase LEVER_INFO:(*infoLoger).Println(message)breakcase LEVER_WARN:(*warnLoger).Println(message)breakcase LEVER_ERROR:(*errorLoger).Println(message)breakcase LEVER_FATAL:(*fatalLoger).Println(message)breakdefault:break}breakdefault:break}}//帶輸出判斷的格式記錄器func Printf(enable bool, lever int, mode int, format string, message ...interface{}) {if !enable {return}defer func() {if e, ok := recover().(error); ok {log.Println("ERR: panic in %s - %v", message, e)log.Println(string(debug.Stack()))}}()switch mode {case MODE_STDIO:log.Println(format, message)breakcase MODE_NET://網路方式breakcase MODE_FILE:if nil == infoLoger {_init_()}switch lever {case LEVER_DEBUG:(*debugLoger).Println(format, message)breakcase LEVER_INFO:(*infoLoger).Println(format, message)breakcase LEVER_WARN:(*warnLoger).Println(format, message)breakcase LEVER_ERROR:(*errorLoger).Println(format, message)breakcase LEVER_FATAL:(*fatalLoger).Println(format, message)breakdefault:break}breakdefault:break}}
648 次點擊