golang环境下的日志记录器-系列之三

前端之家收集整理的这篇文章主要介绍了golang环境下的日志记录器-系列之三前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

本小结为基于loggor实现的golang通用日志记录器,用于记录开发过程中的各类非业务日志(业务日志可通过设置不同的日志类型,以一定的切分方式,输出至指定文件


支持日志的输出方式:

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,loggor.MB)

	warnLoger.SetDebug(IS_DEBUG)
	warnLoger.SetType(LOG_TYPE_WARN)
	warnLoger.SetRollingFile(LOG_TYPE_ROOT_NAME,LOG_TYPE_WARN_NAME,loggor.MB)

	errorLoger.SetDebug(IS_DEBUG)
	errorLoger.SetType(LOG_TYPE_ERROR)
	errorLoger.SetRollingFile(LOG_TYPE_ROOT_NAME,LOG_TYPE_ERROR_NAME,loggor.MB)

	fatalLoger.SetDebug(IS_DEBUG)
	fatalLoger.SetType(LOG_TYPE_FATAL)
	fatalLoger.SetRollingFile(LOG_TYPE_ROOT_NAME,LOG_TYPE_FATAL_NAME,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,format string,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,message ...interface{}) {
	Println(enable,lever,mode,message...)
}

func (this *Log4go) Printf(enable bool,message ...interface{}) {
	Printf(enable,format,message...)
}


使用用例如:

var DEBUG bool = true
var _LABEL_ string = "日志标签"
log4go.Println(
		DEBUG,log4go.LEVER_DEBUG,log4go.MODE_FILE,_LABEL_,"\t日志内容",)

猜你在找的Go相关文章