go-logging的使用

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

logging包实现了Go的日志记录基础设施。 其输出格式是可自定义的,并支持不同的日志后端,如syslog,文件和内存。 可以使用多个后端,每个后端和记录器具有不同的日志级别。

这是官方的例子:

package main

import (
    "os"

    "github.com/op/go-logging"
)

var log = logging.MustGetLogger("example")

// Example format string. Everything except the message has a custom color
// which is dependent on the log level. Many fields have a custom output
// formatting too, eg. the time returns the hour down to the milli second.
var format = logging.MustStringFormatter(
    `%{color}%{time:15:04:05.000} %{shortfunc} ▶ %{level:.4s} %{id:03x}%{color:reset} %{message}`,
)

// Password is just an example type implementing the Redactor interface. Any
// time this is logged, the Redacted() function will be called.
type Password string

func (p Password) Redacted() interface{} {
    return logging.Redact(string(p))
}

func main() {
    // For demo purposes, create two backend for os.Stderr.
    backend1 := logging.NewLogBackend(os.Stderr, "", 0)
    backend2 := logging.NewLogBackend(os.Stderr, "", 0)

    // For messages written to backend2 we want to add some additional
    // information to the output, including the used log level and the name of
    // the function.
    backend2Formatter := logging.NewBackendFormatter(backend2, format)

    // Only errors and more severe messages should be sent to backend1
    backend1Leveled := logging.AddModuleLevel(backend1)
    backend1Leveled.SetLevel(logging.ERROR, "")

    // Set the backends to be used.
    logging.SetBackend(backend1Leveled, backend2Formatter)

    log.Debugf("debug %s", Password("secret"))
    log.Info("info")
    log.Notice("notice")
    log.Warning("warning")
    log.Error("err")
    log.Critical("crit")
}

运行结果:
这里写图片描述

而fabric的日志系统主要使用了第三方包go-logging,很少一部分使用了go语言标准库中的log。在此基础上fabric自己封装出来了flogging。

在fabric v1.0中,代码集中在fabric/common/flogging目录下;在fabric v0.6中, 代码集中在fabric/flogging目录下;两个版本的flogging都供项目全局使用。

主要用到的函数:

1、MustGetLogger( )

  • 函数定义
func MustGetLogger(module string) *Logger
  • 使用, 创建一个aca的Logger对象。
var acaLogger = logging.MustGetLogger("aca")

MustGetLogger就像GetLogger(GetLogger根据模块名称创建并返回Logger对象)一样,但如果无法创建Logger,则会出现紧急情况(panics)。 它简化了全局记录器的安全初始化。

2、Panic( )

  • 函数定义
func (l *Logger) Panic(args ...interface{})
  • 使用
var caLogger = logging.MustGetLogger("ca")
...
caLogger.Panic(err) // err是调用某个函数的返回值

Panic( )相当于l.Critical( fmt.Sprint( ) ),后跟一个调用panic( )。 Critical( )使用CRITICAL作为日志级别来记录消息。

3、Error( )、Errorf( )

  • 函数定义
func (l *Logger) Error(args ...interface{})
func (l *Logger) Errorf(format string, args ...interface{})
  • 使用
var caLogger = logging.MustGetLogger("ca")
...
caLogger.Error(err)// err是调用某个函数的返回值

Error( )和Errorf( ) 都使用ERROR作为日志级别记录消息。

4、Debug( )、Debugf( )

  • 函数定义
func (l *Logger) Debug(args ...interface{})
func (l *Logger) Debugf(format string, args ...interface{})
  • 使用
var caLogger = logging.MustGetLogger("ca")
...
caLogger.Debug("Reading certificate for " + id + ".")
caLogger.Debugf("readCertificateByKeyUsage() Error: %v", err)

Debug( )和Debugf( ) 都使用DEBUG作为日志级别记录消息。

5、Info( )

  • 函数定义
func (l *Logger) Info(args ...interface{})
  • 使用
var caLogger = logging.MustGetLogger("ca")
...
caLogger.Info("Fresh start; creating databases, key pairs, and certificates.")

Info( )使用INFO作为日志级别记录消息。

更多相关文档,请参阅 godoc
参考文章:
http://blog.csdn.net/idsuf698987/article/details/75223986
https://github.com/op/go-logging


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

本文来自:CSDN博客

感谢作者:code_segment

查看原文:go-logging的使用

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

6933 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传