improve logger

This commit is contained in:
ginuerzh 2021-10-29 19:00:34 +08:00
parent 16ddfba1d1
commit 24c33e6194
3 changed files with 73 additions and 10 deletions

View File

@ -1,16 +1,45 @@
package main package main
import ( import (
"io"
"os"
"github.com/go-gost/gost/pkg/chain" "github.com/go-gost/gost/pkg/chain"
"github.com/go-gost/gost/pkg/components/connector" "github.com/go-gost/gost/pkg/components/connector"
"github.com/go-gost/gost/pkg/components/dialer" "github.com/go-gost/gost/pkg/components/dialer"
"github.com/go-gost/gost/pkg/components/handler" "github.com/go-gost/gost/pkg/components/handler"
"github.com/go-gost/gost/pkg/components/listener" "github.com/go-gost/gost/pkg/components/listener"
"github.com/go-gost/gost/pkg/config" "github.com/go-gost/gost/pkg/config"
"github.com/go-gost/gost/pkg/logger"
"github.com/go-gost/gost/pkg/registry" "github.com/go-gost/gost/pkg/registry"
"github.com/go-gost/gost/pkg/service" "github.com/go-gost/gost/pkg/service"
) )
func logFromConfig(cfg *config.LogConfig) logger.Logger {
opts := []logger.LoggerOption{
logger.FormatLoggerOption(logger.LogFormat(cfg.Format)),
logger.LevelLoggerOption(logger.LogLevel(cfg.Level)),
}
var out io.Writer = os.Stderr
switch cfg.Output {
case "stdout":
out = os.Stdout
case "stderr", "":
out = os.Stderr
default:
f, err := os.OpenFile(cfg.Output, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
if err != nil {
log.Warnf("log", err)
} else {
out = f
}
}
opts = append(opts, logger.OutputLoggerOption(out))
return logger.NewLogger(opts...)
}
func buildService(cfg *config.Config) (services []*service.Service) { func buildService(cfg *config.Config) (services []*service.Service) {
if cfg == nil || len(cfg.Services) == 0 { if cfg == nil || len(cfg.Services) == 0 {
return return
@ -21,7 +50,15 @@ func buildService(cfg *config.Config) (services []*service.Service) {
for _, svc := range cfg.Services { for _, svc := range cfg.Services {
s := &service.Service{} s := &service.Service{}
ln := registry.GetListener(svc.Listener.Type)(listener.AddrOption(svc.Addr)) ln := registry.GetListener(svc.Listener.Type)(
listener.AddrOption(svc.Addr),
listener.LoggerOption(
log.WithFields(map[string]interface{}{
"kind": "listener",
"type": svc.Listener.Type,
}),
),
)
ln.Init(listener.Metadata(svc.Listener.Metadata)) ln.Init(listener.Metadata(svc.Listener.Metadata))
s.WithListener(ln) s.WithListener(ln)
@ -32,7 +69,15 @@ func buildService(cfg *config.Config) (services []*service.Service) {
break break
} }
} }
h := registry.GetHandler(svc.Handler.Type)(handler.ChainOption(chain)) h := registry.GetHandler(svc.Handler.Type)(
handler.ChainOption(chain),
handler.LoggerOption(
log.WithFields(map[string]interface{}{
"kind": "handler",
"type": svc.Handler.Type,
}),
),
)
h.Init(handler.Metadata(svc.Handler.Metadata)) h.Init(handler.Metadata(svc.Handler.Metadata))
s.WithHandler(h) s.WithHandler(h)
@ -58,11 +103,25 @@ func buildChain(cfg *config.Config) (chains []*chain.Chain) {
tr := &chain.Transport{} tr := &chain.Transport{}
cr := registry.GetConnector(v.Connector.Type)() cr := registry.GetConnector(v.Connector.Type)(
connector.LoggerOption(
log.WithFields(map[string]interface{}{
"kind": "connector",
"type": v.Connector.Type,
}),
),
)
cr.Init(connector.Metadata(v.Connector.Metadata)) cr.Init(connector.Metadata(v.Connector.Metadata))
tr.WithConnector(cr) tr.WithConnector(cr)
d := registry.GetDialer(v.Dialer.Type)() d := registry.GetDialer(v.Dialer.Type)(
dialer.LoggerOption(
log.WithFields(map[string]interface{}{
"kind": "dialer",
"type": v.Dialer.Type,
}),
),
)
d.Init(dialer.Metadata(v.Dialer.Metadata)) d.Init(dialer.Metadata(v.Dialer.Metadata))
tr.WithDialer(d) tr.WithDialer(d)

View File

@ -1,6 +1,7 @@
log: log:
level: info # debug, info, warn, error, fatal output: stderr # stderr, stdout, /path/to/file
format: text # text, json level: debug # debug, info, warn, error, fatal
format: json # text, json
services: services:
- url: "http://gost:gost@:8000" - url: "http://gost:gost@:8000"
@ -15,7 +16,7 @@ services:
keepAlive: 15s keepAlive: 15s
username: gost username: gost
password: gost password: gost
chain: chain01 # chain: chain01
chains: chains:
- name: chain01 - name: chain01

View File

@ -5,14 +5,17 @@ import (
"github.com/go-gost/gost/pkg/logger" "github.com/go-gost/gost/pkg/logger"
) )
func main() { var (
log := logger.NewLogger("main") log = logger.NewLogger()
log.EnableJSONOutput(true) )
func main() {
cfg := &config.Config{} cfg := &config.Config{}
if err := cfg.Load(); err != nil { if err := cfg.Load(); err != nil {
log.Fatal(err) log.Fatal(err)
} }
log = logFromConfig(cfg.Log)
services := buildService(cfg) services := buildService(cfg)
for _, svc := range services { for _, svc := range services {
go svc.Run() go svc.Run()