diff --git a/cmd/gost/config.go b/cmd/gost/config.go index 0e2ce44..c44aea7 100644 --- a/cmd/gost/config.go +++ b/cmd/gost/config.go @@ -1,10 +1,6 @@ package main import ( - "io" - "os" - "path/filepath" - "github.com/go-gost/core/logger" "github.com/go-gost/core/service" "github.com/go-gost/x/api" @@ -17,15 +13,14 @@ import ( hosts_parser "github.com/go-gost/x/config/parsing/hosts" ingress_parser "github.com/go-gost/x/config/parsing/ingress" limiter_parser "github.com/go-gost/x/config/parsing/limiter" + logger_parser "github.com/go-gost/x/config/parsing/logger" recorder_parser "github.com/go-gost/x/config/parsing/recorder" resolver_parser "github.com/go-gost/x/config/parsing/resolver" router_parser "github.com/go-gost/x/config/parsing/router" sd_parser "github.com/go-gost/x/config/parsing/sd" service_parser "github.com/go-gost/x/config/parsing/service" - xlogger "github.com/go-gost/x/logger" metrics "github.com/go-gost/x/metrics/service" "github.com/go-gost/x/registry" - "gopkg.in/natefinch/lumberjack.v2" ) func buildService(cfg *config.Config) (services []service.Service) { @@ -35,6 +30,14 @@ func buildService(cfg *config.Config) (services []service.Service) { log := logger.Default() + for _, loggerCfg := range cfg.Loggers { + if lg := logger_parser.ParseLogger(loggerCfg); lg != nil { + if err := registry.LoggerRegistry().Register(loggerCfg.Name, lg); err != nil { + log.Fatal(err) + } + } + } + for _, autherCfg := range cfg.Authers { if auther := auth_parser.ParseAuther(autherCfg); auther != nil { if err := registry.AutherRegistry().Register(autherCfg.Name, auther); err != nil { @@ -171,48 +174,6 @@ func buildService(cfg *config.Config) (services []service.Service) { return } -func logFromConfig(cfg *config.LogConfig) logger.Logger { - if cfg == nil { - cfg = &config.LogConfig{} - } - opts := []xlogger.LoggerOption{ - xlogger.FormatLoggerOption(logger.LogFormat(cfg.Format)), - xlogger.LevelLoggerOption(logger.LogLevel(cfg.Level)), - } - - var out io.Writer = os.Stderr - switch cfg.Output { - case "none", "null": - return xlogger.Nop() - case "stdout": - out = os.Stdout - case "stderr", "": - out = os.Stderr - default: - if cfg.Rotation != nil { - out = &lumberjack.Logger{ - Filename: cfg.Output, - MaxSize: cfg.Rotation.MaxSize, - MaxAge: cfg.Rotation.MaxAge, - MaxBackups: cfg.Rotation.MaxBackups, - LocalTime: cfg.Rotation.LocalTime, - Compress: cfg.Rotation.Compress, - } - } else { - os.MkdirAll(filepath.Dir(cfg.Output), 0755) - f, err := os.OpenFile(cfg.Output, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666) - if err != nil { - logger.Default().Warn(err) - } else { - out = f - } - } - } - opts = append(opts, xlogger.OutputLoggerOption(out)) - - return xlogger.NewLogger(opts...) -} - func buildAPIService(cfg *config.APIConfig) (service.Service, error) { auther := auth_parser.ParseAutherFromAuth(cfg.Auth) if cfg.Auther != "" { diff --git a/cmd/gost/program.go b/cmd/gost/program.go index 7563397..3b94b1e 100644 --- a/cmd/gost/program.go +++ b/cmd/gost/program.go @@ -7,6 +7,7 @@ import ( "github.com/go-gost/core/logger" "github.com/go-gost/x/config" "github.com/go-gost/x/config/parsing" + logger_parser "github.com/go-gost/x/config/parsing/logger" xmetrics "github.com/go-gost/x/metrics" "github.com/go-gost/x/registry" "github.com/judwhite/go-svc" @@ -73,7 +74,11 @@ func (p *program) Init(env svc.Environment) error { } } - logger.SetDefault(logFromConfig(cfg.Log)) + logCfg := cfg.Log + if logCfg == nil { + logCfg = &config.LogConfig{} + } + logger.SetDefault(logger_parser.ParseLogger(&config.LoggerConfig{Log: logCfg})) if outputFormat != "" { if err := cfg.Write(os.Stdout, outputFormat); err != nil { @@ -171,6 +176,7 @@ func (p *program) mergeConfig(cfg1, cfg2 *config.Config) *config.Config { Limiters: append(cfg1.Limiters, cfg2.Limiters...), CLimiters: append(cfg1.CLimiters, cfg2.CLimiters...), RLimiters: append(cfg1.RLimiters, cfg2.RLimiters...), + Loggers: append(cfg1.Loggers, cfg2.Loggers...), TLS: cfg1.TLS, Log: cfg1.Log, API: cfg1.API, diff --git a/go.mod b/go.mod index f89249d..0e4939e 100644 --- a/go.mod +++ b/go.mod @@ -6,7 +6,7 @@ replace github.com/templexxx/cpu v0.0.7 => github.com/templexxx/cpu v0.0.10-0.20 require ( github.com/go-gost/core v0.0.0-20231119081403-abc73f2ca2b7 - github.com/go-gost/x v0.0.0-20231119081612-44064e4dd142 + github.com/go-gost/x v0.0.0-20231119115548-c87faa20174d github.com/judwhite/go-svc v1.2.1 gopkg.in/natefinch/lumberjack.v2 v2.0.0 ) @@ -28,7 +28,7 @@ require ( github.com/gin-gonic/gin v1.9.1 // indirect github.com/go-gost/gosocks4 v0.0.1 // indirect github.com/go-gost/gosocks5 v0.4.0 // indirect - github.com/go-gost/plugin v0.0.0-20231119081435-96a9cabbf6b6 // indirect + github.com/go-gost/plugin v0.0.0-20231119084331-d49a1cb23b3b // indirect github.com/go-gost/relay v0.4.1-0.20230916134211-828f314ddfe7 // indirect github.com/go-gost/tls-dissector v0.0.2-0.20220408131628-aac992c27451 // indirect github.com/go-playground/locales v0.14.1 // indirect diff --git a/go.sum b/go.sum index 2b54390..cbfa1d1 100644 --- a/go.sum +++ b/go.sum @@ -102,12 +102,15 @@ github.com/go-gost/gosocks5 v0.4.0 h1:EIrOEkpJez4gwHrMa33frA+hHXJyevjp47thpMQsJz github.com/go-gost/gosocks5 v0.4.0/go.mod h1:1G6I7HP7VFVxveGkoK8mnprnJqSqJjdcASKsdUn4Pp4= github.com/go-gost/plugin v0.0.0-20231119081435-96a9cabbf6b6 h1:nkeo0TCEZVz74eZlVBDM6xiqDjS3DGWFRBOJ6kiDudU= github.com/go-gost/plugin v0.0.0-20231119081435-96a9cabbf6b6/go.mod h1:qXr2Zm9Ex2ATqnWuNUzVZqySPMnuIihvblYZt4MlZLw= +github.com/go-gost/plugin v0.0.0-20231119084331-d49a1cb23b3b/go.mod h1:qXr2Zm9Ex2ATqnWuNUzVZqySPMnuIihvblYZt4MlZLw= github.com/go-gost/relay v0.4.1-0.20230916134211-828f314ddfe7 h1:qAG1OyjvdA5h221CfFSS3J359V3d2E7dJWyP29QoDSI= github.com/go-gost/relay v0.4.1-0.20230916134211-828f314ddfe7/go.mod h1:lcX+23LCQ3khIeASBo+tJ/WbwXFO32/N5YN6ucuYTG8= github.com/go-gost/tls-dissector v0.0.2-0.20220408131628-aac992c27451 h1:xj8gUZGYO3nb5+6Bjw9+tsFkA9sYynrOvDvvC4uDV2I= github.com/go-gost/tls-dissector v0.0.2-0.20220408131628-aac992c27451/go.mod h1:/9QfdewqmHdaE362Hv5nDaSWLx3pCmtD870d6GaquXs= github.com/go-gost/x v0.0.0-20231119081612-44064e4dd142 h1:AcfPO32QUPkBXG53tWmY96pc1I0eMVs/2A0Z3BhG/2s= github.com/go-gost/x v0.0.0-20231119081612-44064e4dd142/go.mod h1:nKHCiUUdeB4dBKwqsPWtKVTUkicbjVh56/L47ieJrxg= +github.com/go-gost/x v0.0.0-20231119115548-c87faa20174d h1:dkYojb+aCEy48Of0BGOHhlSME8I4+bPsjp2CgNcZBvQ= +github.com/go-gost/x v0.0.0-20231119115548-c87faa20174d/go.mod h1:TBJYF2Hs0B4qwdtR1hu+oXXJOln/XpSx/JhFyLYCB3M= github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s=