diff --git a/config/config.go b/config/config.go index 30d663c..e5f08cb 100644 --- a/config/config.go +++ b/config/config.go @@ -402,6 +402,7 @@ type ServiceConfig struct { CLimiter string `yaml:"climiter,omitempty" json:"climiter,omitempty"` RLimiter string `yaml:"rlimiter,omitempty" json:"rlimiter,omitempty"` Logger string `yaml:",omitempty" json:"logger,omitempty"` + Loggers []string `yaml:",omitempty" json:"loggers,omitempty"` Recorders []*RecorderObject `yaml:",omitempty" json:"recorders,omitempty"` Handler *HandlerConfig `yaml:",omitempty" json:"handler,omitempty"` Listener *ListenerConfig `yaml:",omitempty" json:"listener,omitempty"` diff --git a/config/parsing/logger/parse.go b/config/parsing/logger/parse.go index 4f207b8..4516b6e 100644 --- a/config/parsing/logger/parse.go +++ b/config/parsing/logger/parse.go @@ -8,6 +8,7 @@ import ( "github.com/go-gost/core/logger" "github.com/go-gost/x/config" xlogger "github.com/go-gost/x/logger" + "github.com/go-gost/x/registry" "gopkg.in/natefinch/lumberjack.v2" ) @@ -53,3 +54,17 @@ func ParseLogger(cfg *config.LoggerConfig) logger.Logger { return xlogger.NewLogger(opts...) } + +func List(name string, names ...string) []logger.Logger { + var loggers []logger.Logger + if adm := registry.LoggerRegistry().Get(name); adm != nil { + loggers = append(loggers, adm) + } + for _, s := range names { + if lg := registry.LoggerRegistry().Get(s); lg != nil { + loggers = append(loggers, lg) + } + } + + return loggers +} diff --git a/config/parsing/service/parse.go b/config/parsing/service/parse.go index c319169..24bf72b 100644 --- a/config/parsing/service/parse.go +++ b/config/parsing/service/parse.go @@ -22,6 +22,7 @@ import ( auth_parser "github.com/go-gost/x/config/parsing/auth" bypass_parser "github.com/go-gost/x/config/parsing/bypass" hop_parser "github.com/go-gost/x/config/parsing/hop" + logger_parser "github.com/go-gost/x/config/parsing/logger" selector_parser "github.com/go-gost/x/config/parsing/selector" xnet "github.com/go-gost/x/internal/net" tls_util "github.com/go-gost/x/internal/util/tls" @@ -42,10 +43,11 @@ func ParseService(cfg *config.ServiceConfig) (service.Service, error) { } } - log := registry.LoggerRegistry().Get(cfg.Logger) - if log == nil { - log = logger.Default() + log := logger.Default() + if loggers := logger_parser.List(cfg.Logger, cfg.Loggers...); len(loggers) > 0 { + log = logger.LoggerGroup(loggers...) } + serviceLogger := log.WithFields(map[string]any{ "kind": "service", "service": cfg.Name, diff --git a/go.mod b/go.mod index 893f5bd..52b3fb9 100644 --- a/go.mod +++ b/go.mod @@ -7,7 +7,7 @@ require ( github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d github.com/gin-contrib/cors v1.5.0 github.com/gin-gonic/gin v1.9.1 - github.com/go-gost/core v0.0.0-20231119081403-abc73f2ca2b7 + github.com/go-gost/core v0.0.0-20231219132306-6b5c04b5e446 github.com/go-gost/gosocks4 v0.0.1 github.com/go-gost/gosocks5 v0.4.0 github.com/go-gost/plugin v0.0.0-20231119084331-d49a1cb23b3b diff --git a/go.sum b/go.sum index 1302157..269540f 100644 --- a/go.sum +++ b/go.sum @@ -97,8 +97,8 @@ github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SU github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-gost/core v0.0.0-20231119081403-abc73f2ca2b7 h1:fxVUlZANqPApygO7lT8bYySyajiCFA62bDiNorral1w= -github.com/go-gost/core v0.0.0-20231119081403-abc73f2ca2b7/go.mod h1:ndkgWVYRLwupVaFFWv8ML1Nr8tD3xhHK245PLpUDg4E= +github.com/go-gost/core v0.0.0-20231219132306-6b5c04b5e446 h1:H7VyfQOOAH7smDQ41O/mMClFv8MyflVk5AO9uIp7qXg= +github.com/go-gost/core v0.0.0-20231219132306-6b5c04b5e446/go.mod h1:ndkgWVYRLwupVaFFWv8ML1Nr8tD3xhHK245PLpUDg4E= github.com/go-gost/gosocks4 v0.0.1 h1:+k1sec8HlELuQV7rWftIkmy8UijzUt2I6t+iMPlGB2s= github.com/go-gost/gosocks4 v0.0.1/go.mod h1:3B6L47HbU/qugDg4JnoFPHgJXE43Inz8Bah1QaN9qCc= github.com/go-gost/gosocks5 v0.4.0 h1:EIrOEkpJez4gwHrMa33frA+hHXJyevjp47thpMQsJzI=