golang环境下的日志记录器-系列之三
2017-07-18 10:38
225 查看
本小结为基于loggor实现的golang通用日志记录器,用于记录开发过程中的各类非业务日志(业务日志可通过设置不同的日志类型,以一定的切分方式,输出至指定文件)
支持日志的输出方式:
1.输出至标准输出
2.输出至日志文件
3.网络输出(暂未支持)
下载页面
http://download.csdn.net/detail/hansewolf/9902137
点击打开链接
使用用例如:
支持日志的输出方式:
1.输出至标准输出
2.输出至日志文件
3.网络输出(暂未支持)
下载页面
http://download.csdn.net/detail/hansewolf/9902137
点击打开链接
//@description 调试日志输出(各级日志采用隔离方式) //@author chenbintao //@data 2017-04-10 09:31 初稿 // 2017-05-17 21:31 增加调试模式,大小分割调试OK // 2017-06-20 21:31 日志记录修改为线程方式asyncLoggor package log4go import ( "log" "runtime/debug" "xxxxx/loggor " ) const ( _TABLE_ = "\t" //日志文件行分隔符 ) const ( LEVER_UNKNOW = 0 LEVER_DEBUG = 1 LEVER_INFO = 2 LEVER_WARN = 3 LEVER_ERROR = 4 LEVER_FATAL = 5 ) const ( MODE_STDIO = 1 MODE_FILE = 2 MODE_NET = 3 ) const ( LOG_TYPE_UNKNOW = 1000 LOG_TYPE_DEBUG = 1001 LOG_TYPE_INFO = 1002 LOG_TYPE_WARN = 1003 LOG_TYPE_ERROR = 1004 LOG_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 //DEBUG var infoLoger *loggor.Logger //INFO var warnLoger *loggor.Logger //WARN var errorLoger *loggor.Logger //ERROR var fatalLoger *loggor.Logger //FATAL var ( 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) } //日志服务 func 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) break case MODE_NET: //网络方式 break case MODE_FILE: if nil == infoLoger { _init_() } switch lever { case LEVER_DEBUG: (*debugLoger).Println(message) break case LEVER_INFO: (*infoLoger).Println(message) break case LEVER_WARN: (*warnLoger).Println(message) break case LEVER_ERROR: (*errorLoger).Println(message) break case LEVER_FATAL: (*fatalLoger).Println(message) break default: break } break default: 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) break case MODE_NET: //网络方式 break case MODE_FILE: if nil == infoLoger { _init_() } switch lever { case LEVER_DEBUG: (*debugLoger).Println(format, message) break case LEVER_INFO: (*infoLoger).Println(format, message) break case LEVER_WARN: (*warnLoger).Println(format, message) break case LEVER_ERROR: (*errorLoger).Println(format, message) break case LEVER_FATAL: (*fatalLoger).Println(format, message) break default: break } break default: break } }
//@description 调试日志输出接口封装 //@author chenbintao //@data 2017-05-04 09:31 初稿 // 2017-05-08 21:31 调试 package log4go type Log4go struct { } func (this *Log4go) Println(enable bool, lever int, mode int, message ...interface{}) { Println(enable, lever, mode, message...) } func (this *Log4go) Printf(enable bool, lever int, mode int, format string, message ...interface{}) { Printf(enable, lever, mode, format, message...) }
使用用例如:
var DEBUG bool = true
var _LABEL_ string = "日志标签"
log4go.Println( DEBUG, log4go.LEVER_DEBUG, log4go.MODE_FILE, _LABEL_, "\t日志内容", )
相关文章推荐
- golang环境下的日志记录器-系列之一
- golang环境下的日志记录器-系列之二
- iBatisnet系列(二) 配置运行环境和日志处理
- Windows环境下Android Studio系列—日志调试
- 日志库EasyLogging++学习系列(6)—— 日志记录器
- iBatisnet系列(二) 配置运行环境和日志处理
- Golang 入门系列(一)Go环境搭建
- Windows环境下Android Studio系列5—日志调试
- 【PHP系列】PHP推荐标准之PSR-3,日志记录器接口
- 日志库EasyLogging++学习系列(6)—— 日志记录器
- iBatisnet系列(二) 配置运行环境和日志处理
- 【GoLang】GO语言系列--001.GO开发环境搭建
- iBatisnet系列(二) 配置运行环境和日志处理
- iBatisnet系列(二) 配置运行环境和日志处理
- 深入理解javascript原型和闭包系列 系深入理解javascript原型和闭包(17)——补充:上下文环境和作用域的关系
- golang开发android环境搭建_window
- 搜索引擎solr系列---日志打印位置
- VC.net 开发环境介绍系列一(秘技部分)
- 【OpenStack】OpenStack系列6之Sheepdog环境搭建
- Caffe系列(11):数据可视化环境(python接口)配置