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:
- gci
- gofmt
- goimports
- golint
- misspell
- govet

View File

@ -27,7 +27,6 @@ import (
"d7y.io/dragonfly/v2/cdn/config"
"d7y.io/dragonfly/v2/cmd/dependency"
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/source"
"d7y.io/dragonfly/v2/version"
@ -57,7 +56,7 @@ from remote source repeatedly.`,
}
// 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")
}

View File

@ -47,7 +47,6 @@ import (
"d7y.io/dragonfly/v2/client/config"
"d7y.io/dragonfly/v2/cmd/dependency/base"
logger "d7y.io/dragonfly/v2/internal/dflog"
"d7y.io/dragonfly/v2/internal/dflog/logcore"
"d7y.io/dragonfly/v2/internal/dfnet"
"d7y.io/dragonfly/v2/pkg/dfpath"
"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)
if verbose {
logcore.SetCoreLevel(zapcore.DebugLevel)
logcore.SetGrpcLevel(zapcore.DebugLevel)
logger.SetLevel(zapcore.DebugLevel)
}
if pprofPort >= 0 {

View File

@ -31,7 +31,6 @@ import (
server "d7y.io/dragonfly/v2/client/daemon"
"d7y.io/dragonfly/v2/cmd/dependency"
logger "d7y.io/dragonfly/v2/internal/dflog"
"d7y.io/dragonfly/v2/internal/dflog/logcore"
"d7y.io/dragonfly/v2/internal/dfnet"
"d7y.io/dragonfly/v2/pkg/dfpath"
"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
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")
}

View File

@ -36,7 +36,6 @@ import (
"d7y.io/dragonfly/v2/cmd/dependency"
"d7y.io/dragonfly/v2/internal/constants"
logger "d7y.io/dragonfly/v2/internal/dflog"
"d7y.io/dragonfly/v2/internal/dflog/logcore"
"d7y.io/dragonfly/v2/internal/dfnet"
"d7y.io/dragonfly/v2/pkg/basic"
"d7y.io/dragonfly/v2/pkg/dfpath"
@ -77,7 +76,7 @@ var rootCmd = &cobra.Command{
}
// 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")
}

View File

@ -25,7 +25,6 @@ import (
"d7y.io/dragonfly/v2/cmd/dependency"
logger "d7y.io/dragonfly/v2/internal/dflog"
"d7y.io/dragonfly/v2/internal/dflog/logcore"
"d7y.io/dragonfly/v2/manager"
"d7y.io/dragonfly/v2/manager/config"
"d7y.io/dragonfly/v2/pkg/dfpath"
@ -53,7 +52,7 @@ for managing schedulers and cdns, offering http apis and portal, etc.`,
}
// 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")
}

View File

@ -26,7 +26,6 @@ import (
"d7y.io/dragonfly/v2/cmd/dependency"
logger "d7y.io/dragonfly/v2/internal/dflog"
"d7y.io/dragonfly/v2/internal/dflog/logcore"
"d7y.io/dragonfly/v2/pkg/dfpath"
"d7y.io/dragonfly/v2/scheduler"
"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
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")
}

View File

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

View File

@ -20,6 +20,7 @@ import (
"fmt"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
"google.golang.org/grpc/grpclog"
)
@ -36,7 +37,7 @@ var (
func init() {
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))
if err == nil {
sugar := log.Sugar()
@ -49,6 +50,15 @@ func init() {
SetDownloadLogger(log)
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) {

View File

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

View File

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