分享
  1. 首页
  2. 文章

log4go日志分级输出

hansegod · · 2388 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

//@description	调试日志输出(各级日志采用隔离方式)依赖loggor
//@author hanse
//@data 2017年04月10日	09:31	初稿
//		2017年05月04日	21:31	调试
//		2017年05月17日	21:31	增加调试模式,大小分割调试OK
//		2017年05月25日	21:31	修复之前日志文件名称错误
package log4go
import (
	"log"
	"runtime/debug"
	"util/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
	}
}

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
2388 次点击
1 回复 | 直到 1999年12月31日 16:00:00
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏