Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions cmd/mo-service/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,14 @@ func waitSignalToStop(stopper *stopper.Stopper, shutdownC chan struct{}) {
sigchan := make(chan os.Signal, 1)
signal.Notify(sigchan, syscall.SIGTERM, syscall.SIGINT)

rotateSig := make(chan os.Signal, 1)
signal.Notify(rotateSig, syscall.SIGUSR1)
go func() {
for range rotateSig {
logutil.Rotate()
}
}()

go saveProfilesLoop(sigchan)

detail := "Starting shutdown..."
Expand Down
34 changes: 32 additions & 2 deletions pkg/logutil/internal.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ package logutil
import (
"context"
"os"
"sync"
"sync/atomic"
"time"

Expand Down Expand Up @@ -52,12 +53,15 @@ func initMOLogger(cfg *LogConfig) (*zap.Logger, error) {
var _globalLogger atomic.Value
var _skip1Logger atomic.Value
var _errorLogger atomic.Value
var _fileLogger atomic.Value
var _fileLoggerMu sync.Mutex

// init initializes a default zap logger before set up logger.
func init() {
SetLogReporter(&TraceReporter{noopReportZap, noopContextField})
conf := GetDefaultConfig()
setGlobalLogConfig(&conf)
_fileLogger.Store((*lumberjack.Logger)(nil))
logger, _ := initMOLogger(&conf)
replaceGlobalLogger(logger)
}
Expand Down Expand Up @@ -103,6 +107,7 @@ type LogConfig struct {

func (cfg *LogConfig) getSyncer() zapcore.WriteSyncer {
if cfg.Filename == "" || cfg.Filename == "console" {
setFileLogger(nil)
return getConsoleSyncer()
}

Expand All @@ -116,14 +121,16 @@ func (cfg *LogConfig) getSyncer() zapcore.WriteSyncer {
cfg.MaxSize = 512
}
// add lumberjack logger
return zapcore.AddSync(&lumberjack.Logger{
logger := &lumberjack.Logger{
Filename: cfg.Filename,
MaxSize: cfg.MaxSize,
MaxAge: cfg.MaxDays,
MaxBackups: cfg.MaxBackups,
LocalTime: true,
Compress: false,
})
}
setFileLogger(logger)
return zapcore.AddSync(logger)
}

func (cfg *LogConfig) getEncoder() zapcore.Encoder {
Expand Down Expand Up @@ -203,3 +210,26 @@ func getConsoleSyncer() zapcore.WriteSyncer {
}
return syncer
}

func setFileLogger(logger *lumberjack.Logger) {
_fileLoggerMu.Lock()
defer _fileLoggerMu.Unlock()
_fileLogger.Store(logger)
}

func Rotate() {
if !EnableLog() {
Info("log.rotate.skip", zap.String("reason", "log disabled"))
return
}
logger := _fileLogger.Load().(*lumberjack.Logger)
if logger == nil {
Info("log.rotate.skip", zap.String("reason", "no file logger configured"))
return
}
if err := logger.Rotate(); err != nil {
Warn("log.rotate.failed", zap.Error(err))
return
}
Info("log.rotate.done")
}
Loading