https://github.com/ibbd-dev/go-rate-log
实现频率控制的log服务 Write log by rate
https://github.com/ibbd-dev/go-rate-log
Last synced: about 1 year ago
JSON representation
实现频率控制的log服务 Write log by rate
- Host: GitHub
- URL: https://github.com/ibbd-dev/go-rate-log
- Owner: ibbd-dev
- License: mit
- Created: 2016-11-09T03:56:54.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2016-11-15T03:37:32.000Z (over 9 years ago)
- Last Synced: 2025-01-05T22:24:42.503Z (about 1 year ago)
- Language: Go
- Homepage:
- Size: 7.81 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# 控制写入频率的log
按时间周期写入,保证一个周期内,只会写入一次。
对于很多写log的情况,我们都需要控制一定的输出频率,避免log文件被写爆掉。
## Install
```sh
go get -u github.com/ibbd-dev/go-rate-log
```
## Example
```go
package main
import (
"os"
"time"
"github.com/ibbd-dev/go-rate-log"
)
func main() {
// 文件Flag
fileFlag := os.O_WRONLY | os.O_CREATE | os.O_APPEND
file, err := os.OpenFile("/tmp/test-rate.log", fileFlag, 0666)
defer file.Close()
if err != nil {
panic(err)
}
logger := rateLog.New(file, "", time.RFC3339)
logger.SetDuration(time.Millisecond * 100) // 每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-rotate-file`,即可实现自动切割文件。
```go
package main
import (
"os"
"time"
"github.com/ibbd-dev/go-rotate-file"
"github.com/ibbd-dev/go-rate-log"
)
func main() {
// 最终保存时,文件名如:/tmp/test-rotate.log.161109
// 其中后缀161109表示2016-11-09,默认是按照日期对文件进行切割
file := rotateFile.Open("/tmp/test-rotate.log")
defer file.Close()
logger := rateLog.New(file, "", time.RFC3339)
logger.SetDuration(time.Millisecond * 100) // 每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")
}
```
## 根据错误类型写日志
```go
package main
import (
"time"
"github.com/ibbd-dev/go-rotate-file"
"github.com/ibbd-dev/go-rate-log"
)
func main() {
file := rotateFile.Open("/tmp/test-level-log.log")
defer file.Close()
logger := rateLog.New(file, "", time.RFC3339)
logger.SetDuration(time.Millisecond * 100)
ll := rateLog.NewLevelLog(logger, rateLog.LevelWarn)
ll.Debug("Debug")
ll.Info("Info")
ll.Warn("Warn")
ll.Error("Error")
time.Sleep(time.Second)
ll.Fatal("Fatal")
}
```