Comments (3)
Log rotate does not need to be supported. Use the lumberjsack logger to create a rotating log output stream
from log15.
//log rotate: 1.change file handler by date. 2.remove expired log file
func logRotate(expiredDays int, prefixFile string, f log.Format, lvl log.Lvl, logger log.Logger) {
for {
lastFileHandler := setLogFileHandler(prefixFile, f, lvl, logger)
now := time.Now()
next := time.Date(now.Year(), now.Month(), now.Day() + 1, 0, 0, 0, 0, now.Location())
t := time.NewTimer(next.Sub(now))
<-t.C
// 1.change log file to date
temp := setLogFileHandler(prefixFile, f, lvl, L)
//lastFileHandler.Close() //Close file. the struct of closingHandler not exported!
reflect.ValueOf(lastFileHandler).MethodByName("Close").Call([]reflect.Value{})
lastFileHandler = temp
// TODO 2.remove expired log file
//
}
}
//get log file name
func getLogFileName(prefixFile string, t time.Time) string {
return fmt.Sprintf("%v-%04d-%02d-%02d.log", prefixFile, t.Year(), t.Month(), t.Day())
}
//set log handler, and return file handler.
func setLogFileHandler(prefixFile string, f log.Format, lvl log.Lvl, logger log.Logger) log.Handler {
curFilename := getLogFileName(prefixFile, time.Now())
fileHandler := log.Must.FileHandler(curFilename, f)
logger.SetHandler(log.MultiHandler(
log.LvlFilterHandler(
lvl,
log.CallerFileHandler(log.StdoutHandler)),
log.LvlFilterHandler(
lvl,
fileHandler)))
return fileHandler
}
I run go logRotate()
in my proj.
from log15.
lumberjsack logger is based on the file size.
I have implemented a log rotating based on time, TimedRotatingFile in the sub-package github.com/xgfone/go-tools/log/handler
.
You just need to implement an adapter for log15
, for example:
type closingHandler struct {
io.WriteCloser
log15.Handler
}
func (h *closingHandler) Close() error {
return h.WriteCloser.Close()
}
// The handler adapter for log15.
func TimedRotatingFileHandler(fmtr log15.Format, filename string, backupCount, interval int) (h log15.Handler, err error) {
defer func() {
if _err := recover(); _err != nil {
err = _err.(error)
return
}
}()
_h := handler.NewTimedRotatingFile(filename)
_h.SetBackupCount(backupCount).SetInterval(interval)
return closingHandler{_h, log15.StreamHandler(_h, fmtr)}, nil
}
from log15.
Related Issues (20)
- Add Illumos support HOT 1
- Expose the runtime.Callers skip HOT 1
- tag a new release HOT 1
- v2.12 Build Issues HOT 3
- Support for a kv-generating interface on log arguments
- Normal log15.Root() not colorized on Cygwin
- logfmt/json keys for msg/lvl/t are hard-coded HOT 3
- Allow logging in UTC HOT 2
- Use Semantic Version Tags compatible with the new Go modules HOT 1
- Please add a go.mod file HOT 1
- make NetHandler able to log to an URL?
- No way to close files opened when a new FileHandler is created.
- Default Lvl is LvlCrit HOT 1
- proposal: add Fatal() HOT 1
- Test failure while building v2.15
- Use semantic versioning to satisfy `go mod`
- Is this library maintained? HOT 3
- CallerFileHandler should include package name
- Different outputs for different functions
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from log15.