代码拉取完成,页面将自动刷新
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()
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。