Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ibbd-dev/go-log
golang logger,支持按时间周期写入,按概率写入,异步批量写入,错误日志等。
https://github.com/ibbd-dev/go-log
Last synced: 6 days ago
JSON representation
golang logger,支持按时间周期写入,按概率写入,异步批量写入,错误日志等。
- Host: GitHub
- URL: https://github.com/ibbd-dev/go-log
- Owner: ibbd-dev
- License: mit
- Created: 2016-11-16T08:33:52.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2016-11-25T01:27:33.000Z (almost 8 years ago)
- Last Synced: 2024-06-19T11:37:05.247Z (5 months ago)
- Language: Go
- Homepage:
- Size: 27.3 KB
- Stars: 1
- Watchers: 3
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# golang logger
实现log的基本操作,实现按照时间周期写入
## Install
```sh
# log基本操作,并实现按时间周期写入log
# 按时间周期写入,保证一个周期内,只会写入一次。
# 对于很多写log的情况,我们都需要控制一定的输出频率,避免log文件被写爆掉。
# 接口类似官方的log包
go get -u github.com/ibbd-dev/go-log# 异步写log, 支持写入概率,例如以30%的概率写日志
# 注意:该项目的接口是以ibbd-dev/go-log为基础的
go get -u github.com/ibbd-dev/go-log/async-log# 错误日志,支持错误等级
# 该项目可以自由和上面两个项目的log.Logger,asyncLog.AsyncLogger进行组合
# 也可以和官方的log包进行组合
go get -u github.com/ibbd-dev/go-log/error-log
```注:可以和`github.com/ibbd-dev/go-rotate-file`组合使用,该项目可以支持按时间切割文件,例如每小时一个文件
## Example
### 随机的周期性写入log
例如每秒写入一条log,能有效过于频繁的写log。
```go
package mainimport (
"os"
"time""github.com/ibbd-dev/go-log"
"github.com/ibbd-dev/go-rotate-file"
)func main() {
// 文件Flag
fileFlag := os.O_WRONLY | os.O_CREATE | os.O_APPEND
file, err := os.OpenFile("/tmp/test-rate.log", fileFlag, 0666)
if err != nil {
// TODO
}
defer file.Close()logger := log.NewDurationLogger(file, "", time.RFC3339)
logger.SetDuration(time.Millisecond * 100)
logger.SetPrefix("=====")
logger.Println("hello world")
logger.Println("hello world2")
time.Sleep(time.Millisecond * 105)
logger.Println("hello world3")
logger.Println("hello world3")
time.Sleep(time.Millisecond * 10)
logger.Println("hello world4")
}func main2() {
file := rotateFile.Open("/tmp/test-rotate-log.log")
defer file.Close()logger := NewDurationLogger(file, "", time.RFC3339)
logger.SetDuration(time.Millisecond * 100)
logger.Println("hello world")
logger.Println("hello world2")
time.Sleep(time.Millisecond * 105)
logger.Println("hello world3")
logger.Println("hello world3")
time.Sleep(time.Millisecond * 10)
logger.Println("hello world4")
}
```### 异步写入日志
一些不太重要的日志,可以采取异步写入的形式,大大减轻io压力。
注意:批量写入log的过程中,如果程序被异常中断,可能会丢失部分数据,而丢失的多少,而设置的写入周期和日志的频率有关。
```go
package mainimport (
"time""github.com/ibbd-dev/go-rotate-file"
"github.com/ibbd-dev/go-log/async-log"
)func main() {
file := rotateFile.Open("/tmp/test-async.log")
defer file.Close()logger := asyncLog.New(file, "", time.RFC3339, "test-async")
logger.SetDuration(time.Millisecond * 100)
logger.Println("hello world")
logger.Println("hello world2")
time.Sleep(time.Millisecond * 105)
logger.Println("hello world3")
logger.Println("hello world3")
time.Sleep(time.Millisecond * 10)
logger.Println("hello world4")
}
```### 按概率写入日志
在`github.com/ibbd-dev/go-log/async-log`项目中有接口`SetProbability`,该接口可以用来设置写入概率,例如
```go
// 设置按10%的概率写日志
logger.SetProbability(0.1)
```### 错误日志
对于提供`Debug`, `Info`, `Warn`, `Error`, `Fatal`等接口(对应的格式化接口有`Debugf`, `Infof`, `Warnf`, `Errorf`, `Fatalf`等,提供格式化的功能),方便错误日志的写入。
该项目可以方便的和其他日志对象的项目进行组合使用,例如和`asyncLog`组合使用可以实现按概率写入,或者批量异步写入,也可以和`ibbd-dev/go-log` 结合使用,或者和官方的`log`结合使用等。
```go
package mainimport (
"time""github.com/ibbd-dev/go-rotate-file"
"github.com/ibbd-dev/go-log/async-log"
"github.com/ibbd-dev/go-log/error-log"
)func main() {
file := rotateFile.Open("/tmp/test-error.log")
defer file.Close()logger := asyncLog.New(file, "", time.RFC3339, "test-error")
logger.SetDuration(time.Millisecond * 100)// logger 写日志的对象,该对象只要有接口Output(string)error即可。
// LevelWarn 写入级别,只有大于或者等于该级别的日志才会被写入
errorLog := errorLog.New(logger, errorLog.LevelWarn)
errorLog.Debug(12, "Debug", 1.023)
errorLog.Info(13, "Info", 1.023)
errorLog.Warn(14, "Warn", 1.023)
errorLog.Error(15, "Error", 1.023)
errorLog.Fatalf("id=%d, type=%s, price=%f", 16, "Fatal", 1.023)time.Sleep(time.Second)
}