這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
//@description調試日誌輸出(各級日誌採用隔離方式)依賴loggor//@author hanse//@data 2017-04-1009:31初稿//2017-05-0421:31調試//2017-05-1721:31增加偵錯模式,大小分割調試OK//2017-05-2521:31修複之前記錄檔名稱錯誤package log4goimport ("log""runtime/debug""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 //FATALvar (IS_DEBUG = false)func SetDebug(debug bool) {IS_DEBUG = debug}//初始化日誌記錄器func _init_() {debugLoger = &loggor.Logger{}infoLoger = &loggor.Logger{}warnLoger = &loggor.Logger{}errorLoger = &loggor.Logger{}fatalLoger = &loggor.Logger{}debugLoger.SetDebug(IS_DEBUG)debugLoger.SetType(LOG_TYPE_DEBUG)debugLoger.SetRollingFile(LOG_TYPE_ROOT_NAME, LOG_TYPE_DEBUG_NAME, 5, 100, loggor.MB)warnLoger.SetDebug(IS_DEBUG)infoLoger.SetType(LOG_TYPE_INFO)infoLoger.SetRollingFile(LOG_TYPE_ROOT_NAME, LOG_TYPE_INFO_NAME, 5, 100, loggor.MB)warnLoger.SetDebug(IS_DEBUG)warnLoger.SetType(LOG_TYPE_WARN)warnLoger.SetRollingFile(LOG_TYPE_ROOT_NAME, LOG_TYPE_WARN_NAME, 5, 100, loggor.MB)errorLoger.SetDebug(IS_DEBUG)errorLoger.SetType(LOG_TYPE_ERROR)errorLoger.SetRollingFile(LOG_TYPE_ROOT_NAME, LOG_TYPE_ERROR_NAME, 5, 100, loggor.MB)fatalLoger.SetDebug(IS_DEBUG)fatalLoger.SetType(LOG_TYPE_FATAL)fatalLoger.SetRollingFile(LOG_TYPE_ROOT_NAME, LOG_TYPE_FATAL_NAME, 5, 100, 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}}
390 次點擊