1 Star 1 Fork 0

妙音/oils

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
rolling.go 1.22 KB
一键复制 编辑 原始数据 按行查看 历史
妙音 提交于 2021-04-30 18:30 . 压力测试
package logs
import (
"fmt"
"os"
"path"
"strings"
"time"
)
type rolling struct {
name string
ext string
maxSize int64
size int64
bs chan []byte
file *os.File
}
func newRolling(file string, maxSize int64) *rolling {
ext := path.Ext(file)
if ext == "" {
ext = ".log"
}
size := 100
i := strings.LastIndex(file, ext)
r := &rolling{
name: file[0:i],
ext: ext,
maxSize: maxSize,
bs: make(chan []byte, size),
}
r.updateFile(0)
go r.rolling()
return r
}
func (p *rolling) updateFile(num int) {
logFile, err := os.OpenFile(
fmt.Sprintf("%s_%03d%s", time.Now().Format(p.name), num, p.ext),
os.O_RDWR|os.O_CREATE|os.O_APPEND,
0766,
)
if err != nil {
panic(err)
}
s, err := logFile.Stat()
if err != nil {
panic(err)
}
if s.Size() > p.maxSize {
logFile.Close()
p.updateFile(num + 1)
return
}
p.size = s.Size()
p.file = logFile
}
func (p *rolling) rolling() {
for {
bs := <-p.bs
p.size += int64(len(bs))
if p.size > p.maxSize {
p.updateFile(0)
}
_, _ = p.file.Write(bs)
}
}
// Write 写入.
func (p *rolling) Write(bs []byte) (n int, err error) {
p.bs <- bs
return len(bs), nil
}
func (p *rolling) Close() error {
return p.file.Close()
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/xuender/oils.git
git@gitee.com:xuender/oils.git
xuender
oils
oils
v1.0.25

搜索帮助