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
有疑问加站长微信联系(非本文作者)