add logger component

This commit is contained in:
ginuerzh 2023-11-19 19:57:02 +08:00
parent b41aea03da
commit ed29b34c68
4 changed files with 21 additions and 51 deletions

View File

@ -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 != "" {

View File

@ -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,

4
go.mod
View File

@ -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

3
go.sum
View File

@ -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=