golang 的一个日志模块

日志模块是使用的 github.com/op/go-logging 这里只是对这个模块再次重铸一下
获取依赖包

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
}
/**
 *添加日志输出终端,可以是文件,控制台,还有网络输出等。
 */
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)
    }
    // 打开一个文件
    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
}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,761评论 25 709
  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 13,044评论 2 59
  • From:Python之日志处理(logging模块) - 云游道士 - 博客园 https://www.cnbl...
    vigny的先生阅读 2,706评论 3 5
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,026评论 19 139
  • 集合 体系结构collection:list,queue,set map list有序并且可以重复的集合 ;arr...
    7183阅读 143评论 0 3