This is a creation in Article, where the information may have evolved or changed.
@description Debug Log output (isolation of all levels of logging) relies on loggor//@author hanse//@data 2017-04-1009:31 First draft//2017-05-0421:31 DEBUG// 2017-05-1721:31 add debug mode, size split debug ok//2017-05-2521:31 repair before log file name error package Log4goimport ("Log" "Runtime/debug" "util/ Loggor ") const (_table_ =" \ T "//log file line delimiter) const (Lever_unknow = 0lever_debug = 1lever_info = 2lever_warn = 3lever_erro R = 4lever_fatal = 5) const (Mode_stdio = 1mode_file = 2mode_net = 3) const (Log_type_unknow = 1000log_type_debug = 10 01log_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}//init logger 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, Loggor. MB) Warnloger.setdebug (is_debug) infologer.settype (log_type_info) infologer.setrollingfile (LOG_TYPE_ROOT_NAME, LOG _type_info_name, 5, Loggor. MB) Warnloger.setdebug (is_debug) warnloger.settype (Log_type_warn) warnloger.setrollingfile (LOG_TYPE_ROOT_NAME, LOG _type_warn_name, 5, Loggor. MB) Errorloger.setdebug (is_debug) errorloger.settype (log_type_error) errorloger.setrollingfile (LOG_TYPE_ROOT_NAME , Log_type_error_name, 5, Loggor. MB) Fatalloger.setdebug (is_debug) fatalloger.settype (log_type_fatal) fatalloger.setrollingfile (LOG_TYPE_ROOT_NAME , Log_type_fatal_name, 5, Loggor. MB)}//Log service func logserver () {_init_ ()//Logger initialization//(!!! Subsequent increase in service status monitoring, daemon, etc.)}//row Recorder with output determination 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://network mode 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}}//with output-judged format recorder 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://NetworkWay 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 Reads