feat: support change console log level (#1055)

Signed-off-by: Jim Ma <majinjing3@gmail.com>
This commit is contained in:
Jim Ma 2022-02-09 20:52:00 +08:00 committed by Gaius
parent 75ce151d3f
commit cc5a43c73f
No known key found for this signature in database
GPG Key ID: 8B4E5D1290FA2FFB
12 changed files with 59 additions and 77 deletions

View File

@ -13,7 +13,6 @@ linters:
enable: enable:
- gci - gci
- gofmt - gofmt
- goimports
- golint - golint
- misspell - misspell
- govet - govet

View File

@ -27,7 +27,6 @@ import (
"d7y.io/dragonfly/v2/cdn/config" "d7y.io/dragonfly/v2/cdn/config"
"d7y.io/dragonfly/v2/cmd/dependency" "d7y.io/dragonfly/v2/cmd/dependency"
logger "d7y.io/dragonfly/v2/internal/dflog" logger "d7y.io/dragonfly/v2/internal/dflog"
"d7y.io/dragonfly/v2/internal/dflog/logcore"
"d7y.io/dragonfly/v2/pkg/dfpath" "d7y.io/dragonfly/v2/pkg/dfpath"
"d7y.io/dragonfly/v2/pkg/source" "d7y.io/dragonfly/v2/pkg/source"
"d7y.io/dragonfly/v2/version" "d7y.io/dragonfly/v2/version"
@ -57,7 +56,7 @@ from remote source repeatedly.`,
} }
// Initialize logger // Initialize logger
if err := logcore.InitCdnSystem(cfg.Console, d.LogDir()); err != nil { if err := logger.InitCdnSystem(cfg.Console, d.LogDir()); err != nil {
return errors.Wrap(err, "init cdn system logger") return errors.Wrap(err, "init cdn system logger")
} }

View File

@ -47,7 +47,6 @@ import (
"d7y.io/dragonfly/v2/client/config" "d7y.io/dragonfly/v2/client/config"
"d7y.io/dragonfly/v2/cmd/dependency/base" "d7y.io/dragonfly/v2/cmd/dependency/base"
logger "d7y.io/dragonfly/v2/internal/dflog" logger "d7y.io/dragonfly/v2/internal/dflog"
"d7y.io/dragonfly/v2/internal/dflog/logcore"
"d7y.io/dragonfly/v2/internal/dfnet" "d7y.io/dragonfly/v2/internal/dfnet"
"d7y.io/dragonfly/v2/pkg/dfpath" "d7y.io/dragonfly/v2/pkg/dfpath"
"d7y.io/dragonfly/v2/pkg/unit" "d7y.io/dragonfly/v2/pkg/unit"
@ -94,8 +93,7 @@ func InitMonitor(verbose bool, pprofPort int, otelOption base.TelemetryOption) f
var fc = make(chan func(), 5) var fc = make(chan func(), 5)
if verbose { if verbose {
logcore.SetCoreLevel(zapcore.DebugLevel) logger.SetLevel(zapcore.DebugLevel)
logcore.SetGrpcLevel(zapcore.DebugLevel)
} }
if pprofPort >= 0 { if pprofPort >= 0 {

View File

@ -31,7 +31,6 @@ import (
server "d7y.io/dragonfly/v2/client/daemon" server "d7y.io/dragonfly/v2/client/daemon"
"d7y.io/dragonfly/v2/cmd/dependency" "d7y.io/dragonfly/v2/cmd/dependency"
logger "d7y.io/dragonfly/v2/internal/dflog" logger "d7y.io/dragonfly/v2/internal/dflog"
"d7y.io/dragonfly/v2/internal/dflog/logcore"
"d7y.io/dragonfly/v2/internal/dfnet" "d7y.io/dragonfly/v2/internal/dfnet"
"d7y.io/dragonfly/v2/pkg/dfpath" "d7y.io/dragonfly/v2/pkg/dfpath"
"d7y.io/dragonfly/v2/pkg/rpc/dfdaemon/client" "d7y.io/dragonfly/v2/pkg/rpc/dfdaemon/client"
@ -61,7 +60,7 @@ it supports container engine, wget and other downloading tools through proxy fun
} }
// Initialize logger // Initialize logger
if err := logcore.InitDaemon(cfg.Console, d.LogDir()); err != nil { if err := logger.InitDaemon(cfg.Console, d.LogDir()); err != nil {
return errors.Wrap(err, "init client daemon logger") return errors.Wrap(err, "init client daemon logger")
} }

View File

@ -36,7 +36,6 @@ import (
"d7y.io/dragonfly/v2/cmd/dependency" "d7y.io/dragonfly/v2/cmd/dependency"
"d7y.io/dragonfly/v2/internal/constants" "d7y.io/dragonfly/v2/internal/constants"
logger "d7y.io/dragonfly/v2/internal/dflog" logger "d7y.io/dragonfly/v2/internal/dflog"
"d7y.io/dragonfly/v2/internal/dflog/logcore"
"d7y.io/dragonfly/v2/internal/dfnet" "d7y.io/dragonfly/v2/internal/dfnet"
"d7y.io/dragonfly/v2/pkg/basic" "d7y.io/dragonfly/v2/pkg/basic"
"d7y.io/dragonfly/v2/pkg/dfpath" "d7y.io/dragonfly/v2/pkg/dfpath"
@ -77,7 +76,7 @@ var rootCmd = &cobra.Command{
} }
// Initialize logger // Initialize logger
if err := logcore.InitDfget(dfgetConfig.Console, d.LogDir()); err != nil { if err := logger.InitDfget(dfgetConfig.Console, d.LogDir()); err != nil {
return errors.Wrap(err, "init client dfget logger") return errors.Wrap(err, "init client dfget logger")
} }

View File

@ -25,7 +25,6 @@ import (
"d7y.io/dragonfly/v2/cmd/dependency" "d7y.io/dragonfly/v2/cmd/dependency"
logger "d7y.io/dragonfly/v2/internal/dflog" logger "d7y.io/dragonfly/v2/internal/dflog"
"d7y.io/dragonfly/v2/internal/dflog/logcore"
"d7y.io/dragonfly/v2/manager" "d7y.io/dragonfly/v2/manager"
"d7y.io/dragonfly/v2/manager/config" "d7y.io/dragonfly/v2/manager/config"
"d7y.io/dragonfly/v2/pkg/dfpath" "d7y.io/dragonfly/v2/pkg/dfpath"
@ -53,7 +52,7 @@ for managing schedulers and cdns, offering http apis and portal, etc.`,
} }
// Initialize logger // Initialize logger
if err := logcore.InitManager(cfg.Console, d.LogDir()); err != nil { if err := logger.InitManager(cfg.Console, d.LogDir()); err != nil {
return errors.Wrap(err, "init manager logger") return errors.Wrap(err, "init manager logger")
} }

View File

@ -26,7 +26,6 @@ import (
"d7y.io/dragonfly/v2/cmd/dependency" "d7y.io/dragonfly/v2/cmd/dependency"
logger "d7y.io/dragonfly/v2/internal/dflog" logger "d7y.io/dragonfly/v2/internal/dflog"
"d7y.io/dragonfly/v2/internal/dflog/logcore"
"d7y.io/dragonfly/v2/pkg/dfpath" "d7y.io/dragonfly/v2/pkg/dfpath"
"d7y.io/dragonfly/v2/scheduler" "d7y.io/dragonfly/v2/scheduler"
"d7y.io/dragonfly/v2/scheduler/config" "d7y.io/dragonfly/v2/scheduler/config"
@ -57,7 +56,7 @@ generate and maintain a P2P network during the download process, and push suitab
} }
// Initialize logger // Initialize logger
if err := logcore.InitScheduler(cfg.Console, d.LogDir()); err != nil { if err := logger.InitScheduler(cfg.Console, d.LogDir()); err != nil {
return errors.Wrap(err, "init scheduler logger") return errors.Wrap(err, "init scheduler logger")
} }

View File

@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package logcore package logger
import ( import (
"strings" "strings"

View File

@ -20,6 +20,7 @@ import (
"fmt" "fmt"
"go.uber.org/zap" "go.uber.org/zap"
"go.uber.org/zap/zapcore"
"google.golang.org/grpc/grpclog" "google.golang.org/grpc/grpclog"
) )
@ -36,7 +37,7 @@ var (
func init() { func init() {
config := zap.NewDevelopmentConfig() config := zap.NewDevelopmentConfig()
config.Level = zap.NewAtomicLevelAt(zap.DebugLevel) config.Level = zap.NewAtomicLevelAt(zap.InfoLevel)
log, err := config.Build(zap.AddCaller(), zap.AddStacktrace(zap.WarnLevel), zap.AddCallerSkip(1)) log, err := config.Build(zap.AddCaller(), zap.AddStacktrace(zap.WarnLevel), zap.AddCallerSkip(1))
if err == nil { if err == nil {
sugar := log.Sugar() sugar := log.Sugar()
@ -49,6 +50,15 @@ func init() {
SetDownloadLogger(log) SetDownloadLogger(log)
SetJobLogger(sugar) SetJobLogger(sugar)
} }
levels = append(levels, config.Level)
}
// SetLevel updates all log level
func SetLevel(level zapcore.Level) {
Infof("change log level to %s", level.String())
for _, l := range levels {
l.SetLevel(level)
}
} }
func SetCoreLogger(log *zap.SugaredLogger) { func SetCoreLogger(log *zap.SugaredLogger) {

View File

@ -14,15 +14,13 @@
* limitations under the License. * limitations under the License.
*/ */
package logcore package logger
import ( import (
"path" "path"
"path/filepath" "path/filepath"
"go.uber.org/zap" "go.uber.org/zap"
logger "d7y.io/dragonfly/v2/internal/dflog"
) )
type logInitMeta struct { type logInitMeta struct {
@ -31,7 +29,14 @@ type logInitMeta struct {
setLoggerFunc func(log *zap.Logger) setLoggerFunc func(log *zap.Logger)
} }
func createLogger(meta []logInitMeta, logDir string) error { func createLogger(console bool, meta []logInitMeta, logDir string) error {
if console {
startLoggerSignalHandler()
return nil
}
// drop console level
levels = nil
for _, m := range meta { for _, m := range meta {
log, level, err := CreateLogger(path.Join(logDir, m.fileName), false, false) log, level, err := CreateLogger(path.Join(logDir, m.fileName), false, false)
if err != nil { if err != nil {
@ -50,149 +55,129 @@ func createLogger(meta []logInitMeta, logDir string) error {
} }
func InitManager(console bool, dir string) error { func InitManager(console bool, dir string) error {
if console {
return nil
}
logDir := filepath.Join(dir, "manager") logDir := filepath.Join(dir, "manager")
var meta = []logInitMeta{ var meta = []logInitMeta{
{ {
fileName: CoreLogFileName, fileName: CoreLogFileName,
setSugaredLoggerFunc: logger.SetCoreLogger, setSugaredLoggerFunc: SetCoreLogger,
}, },
{ {
fileName: GrpcLogFileName, fileName: GrpcLogFileName,
setSugaredLoggerFunc: logger.SetGrpcLogger, setSugaredLoggerFunc: SetGrpcLogger,
}, },
{ {
fileName: GCLogFileName, fileName: GCLogFileName,
setSugaredLoggerFunc: logger.SetGCLogger, setSugaredLoggerFunc: SetGCLogger,
}, },
{ {
fileName: JobLogFileName, fileName: JobLogFileName,
setSugaredLoggerFunc: logger.SetJobLogger, setSugaredLoggerFunc: SetJobLogger,
}, },
} }
return createLogger(meta, logDir) return createLogger(console, meta, logDir)
} }
func InitScheduler(console bool, dir string) error { func InitScheduler(console bool, dir string) error {
if console {
return nil
}
logDir := filepath.Join(dir, "scheduler") logDir := filepath.Join(dir, "scheduler")
var meta = []logInitMeta{ var meta = []logInitMeta{
{ {
fileName: CoreLogFileName, fileName: CoreLogFileName,
setSugaredLoggerFunc: logger.SetCoreLogger, setSugaredLoggerFunc: SetCoreLogger,
}, },
{ {
fileName: GrpcLogFileName, fileName: GrpcLogFileName,
setSugaredLoggerFunc: logger.SetGrpcLogger, setSugaredLoggerFunc: SetGrpcLogger,
}, },
{ {
fileName: GCLogFileName, fileName: GCLogFileName,
setSugaredLoggerFunc: logger.SetGCLogger, setSugaredLoggerFunc: SetGCLogger,
}, },
{ {
fileName: JobLogFileName, fileName: JobLogFileName,
setSugaredLoggerFunc: logger.SetJobLogger, setSugaredLoggerFunc: SetJobLogger,
}, },
} }
return createLogger(meta, logDir) return createLogger(console, meta, logDir)
} }
func InitCdnSystem(console bool, dir string) error { func InitCdnSystem(console bool, dir string) error {
if console {
return nil
}
logDir := filepath.Join(dir, "cdn") logDir := filepath.Join(dir, "cdn")
var meta = []logInitMeta{ var meta = []logInitMeta{
{ {
fileName: CoreLogFileName, fileName: CoreLogFileName,
setSugaredLoggerFunc: logger.SetCoreLogger, setSugaredLoggerFunc: SetCoreLogger,
}, },
{ {
fileName: GrpcLogFileName, fileName: GrpcLogFileName,
setSugaredLoggerFunc: logger.SetGrpcLogger, setSugaredLoggerFunc: SetGrpcLogger,
}, },
{ {
fileName: GCLogFileName, fileName: GCLogFileName,
setSugaredLoggerFunc: logger.SetGCLogger, setSugaredLoggerFunc: SetGCLogger,
}, },
{ {
fileName: StorageGCLogFileName, fileName: StorageGCLogFileName,
setSugaredLoggerFunc: logger.SetStorageGCLogger, setSugaredLoggerFunc: SetStorageGCLogger,
}, },
{ {
fileName: JobLogFileName, fileName: JobLogFileName,
setSugaredLoggerFunc: logger.SetJobLogger, setSugaredLoggerFunc: SetJobLogger,
}, },
{ {
fileName: StatSeedLogFileName, fileName: StatSeedLogFileName,
setLoggerFunc: logger.SetStatSeedLogger, setLoggerFunc: SetStatSeedLogger,
}, },
{ {
fileName: DownloaderLogFileName, fileName: DownloaderLogFileName,
setLoggerFunc: logger.SetDownloadLogger, setLoggerFunc: SetDownloadLogger,
}, },
{ {
fileName: KeepAliveLogFileName, fileName: KeepAliveLogFileName,
setSugaredLoggerFunc: logger.SetKeepAliveLogger, setSugaredLoggerFunc: SetKeepAliveLogger,
}, },
} }
return createLogger(meta, logDir) return createLogger(console, meta, logDir)
} }
func InitDaemon(console bool, dir string) error { func InitDaemon(console bool, dir string) error {
if console {
return nil
}
logDir := filepath.Join(dir, "daemon") logDir := filepath.Join(dir, "daemon")
var meta = []logInitMeta{ var meta = []logInitMeta{
{ {
fileName: CoreLogFileName, fileName: CoreLogFileName,
setSugaredLoggerFunc: logger.SetCoreLogger, setSugaredLoggerFunc: SetCoreLogger,
}, },
{ {
fileName: GrpcLogFileName, fileName: GrpcLogFileName,
setSugaredLoggerFunc: logger.SetGrpcLogger, setSugaredLoggerFunc: SetGrpcLogger,
}, },
{ {
fileName: GCLogFileName, fileName: GCLogFileName,
setSugaredLoggerFunc: logger.SetGCLogger, setSugaredLoggerFunc: SetGCLogger,
}, },
} }
return createLogger(meta, logDir) return createLogger(console, meta, logDir)
} }
func InitDfget(console bool, dir string) error { func InitDfget(console bool, dir string) error {
if console {
return nil
}
logDir := filepath.Join(dir, "dfget") logDir := filepath.Join(dir, "dfget")
var meta = []logInitMeta{ var meta = []logInitMeta{
{ {
fileName: CoreLogFileName, fileName: CoreLogFileName,
setSugaredLoggerFunc: logger.SetCoreLogger, setSugaredLoggerFunc: SetCoreLogger,
}, },
{ {
fileName: GrpcLogFileName, fileName: GrpcLogFileName,
setSugaredLoggerFunc: logger.SetGrpcLogger, setSugaredLoggerFunc: SetGrpcLogger,
}, },
} }
return createLogger(meta, logDir) return createLogger(console, meta, logDir)
} }

View File

@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package logcore package logger
import ( import (
"fmt" "fmt"
@ -24,8 +24,6 @@ import (
"go.uber.org/zap" "go.uber.org/zap"
"go.uber.org/zap/zapcore" "go.uber.org/zap/zapcore"
logger "d7y.io/dragonfly/v2/internal/dflog"
) )
var ( var (
@ -48,10 +46,7 @@ func startLoggerSignalHandler() {
// use fmt.Printf print change log level event when log level is greater than info level // use fmt.Printf print change log level event when log level is greater than info level
fmt.Printf("change log level to %s\n", level.String()) fmt.Printf("change log level to %s\n", level.String())
logger.Infof("change log level to %s", level.String()) SetLevel(level)
for _, l := range levels {
l.SetLevel(level)
}
} }
} }
}() }()

View File

@ -19,18 +19,18 @@ package log
import ( import (
"go.uber.org/zap/zapcore" "go.uber.org/zap/zapcore"
"d7y.io/dragonfly/v2/internal/dflog/logcore" "d7y.io/dragonfly/v2/internal/dflog"
"d7y.io/dragonfly/v2/pkg/dfpath" "d7y.io/dragonfly/v2/pkg/dfpath"
) )
// SetCoreLevel sets core log level, export internal SetCoreLevel for using dragonfly as library // SetCoreLevel sets core log level, export internal SetCoreLevel for using dragonfly as library
func SetCoreLevel(level zapcore.Level) { func SetCoreLevel(level zapcore.Level) {
logcore.SetCoreLevel(level) logger.SetCoreLevel(level)
} }
// SetGrpcLevel sets grpc log level, export internal SetGrpcLevel for using dragonfly as library // SetGrpcLevel sets grpc log level, export internal SetGrpcLevel for using dragonfly as library
func SetGrpcLevel(level zapcore.Level) { func SetGrpcLevel(level zapcore.Level) {
logcore.SetGrpcLevel(level) logger.SetGrpcLevel(level)
} }
// SetupDaemon sets daemon log config: path, console // SetupDaemon sets daemon log config: path, console
@ -49,5 +49,5 @@ func SetupDaemon(logDir string, console bool) error {
return err return err
} }
return logcore.InitDaemon(false, d.LogDir()) return logger.InitDaemon(false, d.LogDir())
} }