日志模塊是使用的 github.com/op/go-logging 這里只是對這個(gè)模塊再次重鑄一下
獲取依賴包
go get github.com/op/go-logging
直接附上代碼
package log
import (
"io"
"os"
"path"
logging "github.com/op/go-logging"
)
/**
*日志級別
*/
const (
critical int = iota
err_or
warning
notice
info
debug
)
var (
// 日志管理器
mlog *Logger
/**
* 日志輸出格式
*/
logFormat = []string{
`%{shortfunc} ? %{level:.4s} %{message}`,
`%{time:15:04:05.00} %{shortfunc} ? %{level:.4s} %{id:03x} %{message}`,
`%{color}%{time:15:04:05.00} %{shortfunc} %{shortfile} ? %{level:.4s} %{id:03x}%{color:reset} %{message}`,
}
/**
* 日志級別與 string類型映射
*/
LogLevelMap = map[string]int{
"CRITICAL": critical,
"ERROR": err_or,
"WARNING": warning,
"NOTICE": notice,
"INFO": info,
"DEBUG": debug,
}
)
type Logger struct {
log *logging.Logger
level string
filePath string
ModeName string
format int
}
/**
* 初始化日志
* @param logLevel The arguments could be INFO, DEGUE, ERROR
*/
func Init(logLevel string) {
mlog = newLog(logLevel)
return
}
func newLog(level string) *Logger {
log := new(Logger)
log.level = level
log.filePath = "./log"
log.ModeName = "ville"
log.format = 2
log.log = logging.MustGetLogger(log.ModeName)
log.AddLogBackend()
return log
}
/**
*添加日志輸出終端拾氓,可以是文件,控制臺涧尿,還有網(wǎng)絡(luò)輸出等润文。
*/
func (l *Logger) AddLogBackend() {
l.log.ExtraCalldepth = 2
// 打開文件輸出終端
// backend1 := l.getFileBackend()
backend2 := l.getStdOutBackend()
logging.SetBackend(backend2)
return
}
func (l *Logger) getFileBackend() logging.LeveledBackend {
//判斷是否存在該文件夾
if err := os.MkdirAll(l.filePath, 0777); err != nil {
panic(err)
}
// 打開一個(gè)文件
file, err := os.OpenFile(path.Join(l.filePath, l.ModeName+"_info.log"), os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
if err != nil {
panic(err)
}
backend := l.getLogBackend(file, LogLevelMap[l.level])
logging.SetBackend(backend)
return backend
}
func (l *Logger) getStdOutBackend() logging.LeveledBackend {
bked := l.getLogBackend(os.Stderr, LogLevelMap[l.level])
return bked
}
/**
* 獲取終端
*/
func (l *Logger) getLogBackend(out io.Writer, level int) logging.LeveledBackend {
backend := logging.NewLogBackend(out, "", 1)
format := logging.MustStringFormatter(logFormat[2])
backendFormatter := logging.NewBackendFormatter(backend, format)
backendLeveled := logging.AddModuleLevel(backendFormatter)
backendLeveled.SetLevel(logging.Level(level), "")
return backendLeveled
}
func (l *Logger) logI(infmt string, args ...interface{}) {
l.log.Infof(infmt, args...)
return
}
func (l *Logger) logE(infmt string, args ...interface{}) {
l.log.Errorf(infmt, args...)
return
}
func (l *Logger) logW(infmt string, args ...interface{}) {
l.log.Warningf(infmt, args...)
return
}
func (l *Logger) logD(infmt string, args ...interface{}) {
l.log.Debugf(infmt, args...)
return
}
func LogI(fmtstr string, args ...interface{}) {
mlog.logI(fmtstr, args...)
return
}
func LogW(fmtstr string, args ...interface{}) {
mlog.logW(fmtstr, args...)
return
}
func LogE(fmtstr string, args ...interface{}) {
mlog.logE(fmtstr, args...)
return
}
func LogD(fmtstr string, args ...interface{}) {
mlog.logD(fmtstr, args...)
return
}