1
0
Fork 0

Add log file close and reopen on receipt of SIGUSR1

This commit is contained in:
Richard Shepherd 2017-08-11 11:04:58 +01:00 committed by Ludovic Fernandez
parent 64b8fc52c3
commit 4e5fcac9cb
12 changed files with 343 additions and 25 deletions

View file

@ -31,8 +31,9 @@ const (
// LogHandler will write each request and its response to the access log.
type LogHandler struct {
logger *logrus.Logger
file *os.File
logger *logrus.Logger
file *os.File
filePath string
}
// NewLogHandler creates a new LogHandler
@ -63,7 +64,7 @@ func NewLogHandler(config *types.AccessLog) (*LogHandler, error) {
Hooks: make(logrus.LevelHooks),
Level: logrus.InfoLevel,
}
return &LogHandler{logger: logger, file: file}, nil
return &LogHandler{logger: logger, file: file, filePath: config.FilePath}, nil
}
func openAccessLogFile(filePath string) (*os.File, error) {
@ -139,6 +140,22 @@ func (l *LogHandler) Close() error {
return l.file.Close()
}
// Rotate closes and reopens the log file to allow for rotation
// by an external source.
func (l *LogHandler) Rotate() error {
var err error
if err = l.Close(); err != nil {
return err
}
l.file, err = os.OpenFile(l.filePath, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0664)
if err != nil {
return err
}
l.logger.Out = l.file
return nil
}
func silentSplitHostPort(value string) (host string, port string) {
host, port, err := net.SplitHostPort(value)
if err != nil {