nightingale/vendor/github.com/toolkits/pkg/logger/readme.md

82 lines
3.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

### log for golang
#### 常量
- severity
- DEBUG
- INFO
- WARNING
- ERROR
- FATAL
#### 格式
2015-06-16 12:00:35 ERROR test.go:12 ...
#### backend
- 实现Log(s Severity, msg []byte) 和 Close()
- 初始时调用`dlog.SetLogging(dlog.INFO, backend)`,也可传字符串`dlog.SetLogging("INFO", backend)`默认输出到stdout级别为DEBUG单独设置日志级别`dlog.SetSeverity("INFO")`
#### 输出到stderr而不是对应的后端方便调试用
if debug {
dlog.LogToStderr()
}
#### log to local file
b, err := dlog.NewFileBackend("./log") //log文件目录
if err != nil {
panic(err)
}
dlog.SetLogging("INFO", b) //只输出大于等于INFO的log
b.Rotate(10, 1024*1024*500) //自动切分日志保留10个文件INFO.log.000-INFO.log.009循环覆盖每个文件大小为500M, 因为dlog支持多个文件后端 所以需要为每个file backend指定具体切分数值
dlog.Info(1, 2, " test")
dlog.Close()
- log将输出到指定目录下面`INFO.log``WARNING.log``ERROR.log``FATAL.log`
- 为了配合op的日志切分工具有个goroutine定期检查log文件是否消失并且创建新的log文件
- 为了性能使用bufiobufferSize为256kB。log库会自己定期Flush到文件。在主程序退出之前需要调用`dlog.Close()`否则可能会丢失部分log。
#### syslog
b, err := dlog.NewSyslogBackend(syslog.LOG_LOCAL3, "passport")
//b, err := dlog.DialSyslogBackend("tcp", "127.0.0.1:123", LOG_USER, "passport")
if err != nil {
//...
}
dlog.SetLogging(dlog.INFO, b)
dlog.Warningf("%d %s", 123, "test")
- 会建立多个writerpriority分别是syslog对应的LOG\_INFO, LOG\_WARNING, LOG\_ERR, LOG\_EMERGtag对应修改为passport.INFO, passport.WARNING等等
#### 输出到多个后端
b, _ := dlog.NewMultiBackend(b1, b2)
dlog.SetLogging("INFO", b)
defer dlog.Close()
//...
#### logger
logger := NewLogger("DEBUG", backend)
logger.Info("asdfasd")
logger.Close()
#### 指定depth
* 这种需求通常用于满足外部包装一个dlog helper, 防止depth只能打到helper内部的行号
* 使用接口:
```
func LogDepth(s Severity, depth int, format string, args ...interface{}) {
logging.printfDepth(s, depth+1, format, args...)
}
```
* 调用方需要指定Severity/depth(从0开始, 每增加1层函数调用frame就+1)/format/args
* 考虑depth是较为高级的参数, 所以只提供一个low level接口, 不再单独封装INFO等public function
#### 按小时rotate
* 在配置文件中配置rotateByHour = true
* 如果是使用`b := dlog.NewFileBackend`得到的后端,请调用`b.SetRotateByHour(true)`来开启按小时滚动
* INFO.log.2016040113, 表示INFO log在2016/04/01, 下午1300到1400之间的log, 此log在1400时生成
* 如果需要定时删除N个小时之前的log请在配置文件中配置keepHours = N例如想保留24小时的log则keepHours = 24
* 如果是使用`b := dlog.NewFileBackend`得到的后端,请调用`b.SetKeepHours(N)`来指定保留多少小时的log