diff --git a/cmd/pipe/main.go b/cmd/pipe/main.go index c44949a..754e313 100644 --- a/cmd/pipe/main.go +++ b/cmd/pipe/main.go @@ -8,12 +8,13 @@ import ( "path/filepath" _ "github.com/pipeproxy/pipe/init" + _ "github.com/pipeproxy/pipe/internal/log" "github.com/pipeproxy/pipe" - "github.com/pipeproxy/pipe/internal/logger" "github.com/pipeproxy/pipe/internal/notify" "github.com/spf13/pflag" "github.com/wzshiming/lockfile" + "github.com/wzshiming/logger" ) var signal string @@ -39,65 +40,68 @@ func init() { func main() { + log := logger.Log lf, err := lockfile.NewLockfile(pidfile) if err != nil { - logger.Fatalf("lockfile error: %s", err) + log.Error(err, "lockfile") return } if signal == "" { - logger.Infof("Start pipe") + log.Info("Start pipe") } else { - logger.Infof("Send signal %s to pipe", signal) + log = log.WithName(signal).WithValues("signal", signal) + log.Info("send signal to pipe") } switch signal { case "": err := lf.Lock() if err != nil { - logger.Fatalln("start error:", err) + log.Error(err, "lock pidfile") return } - start(conf) + ctx := logger.WithContext(context.Background(), log) + start(ctx, log, conf) err = lf.Unlock() if err != nil { - logger.Fatalln("end error:", err) + log.Error(err, "unlock pidfile") return } case "reload": pid, err := lf.Get() if err != nil { - logger.Fatalln("reload error:", err) + log.Error(err, "reload") return } err = notify.Kill(pid, notify.Reload) if err != nil { - logger.Fatalln("send error:", err) + log.Error(err, "send signal reload") return } case "stop": pid, err := lf.Get() if err != nil { - logger.Fatalln("stop error:", err) + log.Error(err, "stop") return } err = notify.Kill(pid, notify.Stop) if err != nil { - logger.Fatalln("send error:", err) + log.Error(err, "send signal stop") return } case "reopen": pid, err := lf.Get() if err != nil { - logger.Fatalln("reopen error:", err) + log.Error(err, "reopen") return } err = notify.Kill(pid, notify.Reopen) if err != nil { - logger.Fatalln("send error:", err) + log.Error(err, "send signal reopen") return } default: - logger.Fatalf("not defined signal %s", signal) + log.V(-2).Info("not defined signal") return } } @@ -116,50 +120,54 @@ func getConfig(conf string) ([]byte, error) { return c, nil } -func start(conf string) { +func start(ctx context.Context, log logger.Logger, conf string) { c, err := getConfig(conf) if err != nil { - logger.Errorf("read config file %q error: %s", conf, err) + log.Error(err, "read config file", + "config", conf, + ) return } - svc, err := pipe.NewPipeWithConfig(context.Background(), c) + svc, err := pipe.NewPipeWithConfig(ctx, c) if err != nil { - logger.Errorf("configure config error: %s", err) + log.Error(err, "configure config") return } notify.On(notify.Stop, func() { - logger.Info("Closing") + log.Info("Closing") err := svc.Close() - if svc == nil { - logger.Errorf("service close error: %s", err) + if err != nil { + log.Error(err, "service close") return } }) notify.On(notify.Reload, func() { - logger.Info("Reloading") + log.Info("Reloading") c, err := getConfig(conf) if err != nil { - logger.Errorf("read config file %q error: %s", conf, err) + log.Error(err, "read config file", + "config", conf, + ) return } err = svc.Reload(c) if err != nil { - logger.Errorf("reload error: %s", err) + log.Error(err, "reload") return } }) err = svc.Run() if err != nil { - logger.Errorf("start error: %s", err) + log.Error(err, "start") return } - logger.Info("exit pipe") + log.Info("Exit pipe") } diff --git a/components/common/gen/github.com/pipeproxy/pipe/components/once/once/init.go b/components/common/gen/github.com/pipeproxy/pipe/components/once/once/init.go index acef064..52ab13a 100644 --- a/components/common/gen/github.com/pipeproxy/pipe/components/once/once/init.go +++ b/components/common/gen/github.com/pipeproxy/pipe/components/once/once/init.go @@ -8,7 +8,7 @@ import ( "github.com/pipeproxy/pipe/components/common/register" "github.com/pipeproxy/pipe/components/once" "github.com/pipeproxy/pipe/internal/ctxcache" - "github.com/pipeproxy/pipe/internal/logger" + "github.com/wzshiming/logger" ) func init() { @@ -64,7 +64,7 @@ func OnceGet(ctx context.Context, name string, defaults once.Once) once.Once { if defaults != nil { return defaults } - logger.Warnf("once.Once %q is not defined", name) + logger.FromContext(ctx).V(-1).Info("once.Once is not defined", "name", name) return OnceNone } @@ -77,7 +77,7 @@ func newOnceNone() once.Once { } func (_OnceNone) Do(_ context.Context) (error error) { - logger.Warn("this is none of once.Once") + logger.Log.V(-1).Info("this is none of once.Once") error = fmt.Errorf("error once.Once is none") diff --git a/components/common/gen/github.com/pipeproxy/pipe/components/packet/handler/init.go b/components/common/gen/github.com/pipeproxy/pipe/components/packet/handler/init.go index 73626f3..a4704f4 100644 --- a/components/common/gen/github.com/pipeproxy/pipe/components/packet/handler/init.go +++ b/components/common/gen/github.com/pipeproxy/pipe/components/packet/handler/init.go @@ -8,7 +8,7 @@ import ( "github.com/pipeproxy/pipe/components/common/register" "github.com/pipeproxy/pipe/components/packet" "github.com/pipeproxy/pipe/internal/ctxcache" - "github.com/pipeproxy/pipe/internal/logger" + "github.com/wzshiming/logger" ) func init() { @@ -64,7 +64,7 @@ func HandlerGet(ctx context.Context, name string, defaults packet.Handler) packe if defaults != nil { return defaults } - logger.Warnf("packet.Handler %q is not defined", name) + logger.FromContext(ctx).V(-1).Info("packet.Handler is not defined", "name", name) return HandlerNone } @@ -77,7 +77,7 @@ func newHandlerNone() packet.Handler { } func (_HandlerNone) ServePacket(_ context.Context, _ net.PacketConn) { - logger.Warn("this is none of packet.Handler") + logger.Log.V(-1).Info("this is none of packet.Handler") return } diff --git a/components/common/gen/github.com/pipeproxy/pipe/components/packet/listenconfig/init.go b/components/common/gen/github.com/pipeproxy/pipe/components/packet/listenconfig/init.go index 2474059..a841d57 100644 --- a/components/common/gen/github.com/pipeproxy/pipe/components/packet/listenconfig/init.go +++ b/components/common/gen/github.com/pipeproxy/pipe/components/packet/listenconfig/init.go @@ -9,7 +9,7 @@ import ( "github.com/pipeproxy/pipe/components/common/register" "github.com/pipeproxy/pipe/components/packet" "github.com/pipeproxy/pipe/internal/ctxcache" - "github.com/pipeproxy/pipe/internal/logger" + "github.com/wzshiming/logger" ) func init() { @@ -65,7 +65,7 @@ func ListenConfigGet(ctx context.Context, name string, defaults packet.ListenCon if defaults != nil { return defaults } - logger.Warnf("packet.ListenConfig %q is not defined", name) + logger.FromContext(ctx).V(-1).Info("packet.ListenConfig is not defined", "name", name) return ListenConfigNone } @@ -78,7 +78,7 @@ func newListenConfigNone() packet.ListenConfig { } func (_ListenConfigNone) ListenPacket(_ context.Context) (_ net.PacketConn, error error) { - logger.Warn("this is none of packet.ListenConfig") + logger.Log.V(-1).Info("this is none of packet.ListenConfig") error = fmt.Errorf("error packet.ListenConfig is none") diff --git a/components/common/gen/github.com/pipeproxy/pipe/components/protocol/handler/init.go b/components/common/gen/github.com/pipeproxy/pipe/components/protocol/handler/init.go index a9a83fc..94366b3 100644 --- a/components/common/gen/github.com/pipeproxy/pipe/components/protocol/handler/init.go +++ b/components/common/gen/github.com/pipeproxy/pipe/components/protocol/handler/init.go @@ -7,7 +7,7 @@ import ( "github.com/pipeproxy/pipe/components/common/register" "github.com/pipeproxy/pipe/components/protocol" "github.com/pipeproxy/pipe/internal/ctxcache" - "github.com/pipeproxy/pipe/internal/logger" + "github.com/wzshiming/logger" ) func init() { @@ -63,7 +63,7 @@ func HandlerGet(ctx context.Context, name string, defaults protocol.Handler) pro if defaults != nil { return defaults } - logger.Warnf("protocol.Handler %q is not defined", name) + logger.FromContext(ctx).V(-1).Info("protocol.Handler is not defined", "name", name) return HandlerNone } @@ -76,7 +76,7 @@ func newHandlerNone() protocol.Handler { } func (_HandlerNone) ServeProtocol(_ context.Context, _ protocol.Protocol) { - logger.Warn("this is none of protocol.Handler") + logger.Log.V(-1).Info("this is none of protocol.Handler") return } diff --git a/components/common/gen/github.com/pipeproxy/pipe/components/service/service/init.go b/components/common/gen/github.com/pipeproxy/pipe/components/service/service/init.go index fe6d4d7..7afc7b8 100644 --- a/components/common/gen/github.com/pipeproxy/pipe/components/service/service/init.go +++ b/components/common/gen/github.com/pipeproxy/pipe/components/service/service/init.go @@ -8,7 +8,7 @@ import ( "github.com/pipeproxy/pipe/components/common/register" "github.com/pipeproxy/pipe/components/service" "github.com/pipeproxy/pipe/internal/ctxcache" - "github.com/pipeproxy/pipe/internal/logger" + "github.com/wzshiming/logger" ) func init() { @@ -64,7 +64,7 @@ func ServiceGet(ctx context.Context, name string, defaults service.Service) serv if defaults != nil { return defaults } - logger.Warnf("service.Service %q is not defined", name) + logger.FromContext(ctx).V(-1).Info("service.Service is not defined", "name", name) return ServiceNone } @@ -77,7 +77,7 @@ func newServiceNone() service.Service { } func (_ServiceNone) Close() (error error) { - logger.Warn("this is none of service.Service") + logger.Log.V(-1).Info("this is none of service.Service") error = fmt.Errorf("error service.Service is none") @@ -85,7 +85,7 @@ func (_ServiceNone) Close() (error error) { } func (_ServiceNone) Run(_ context.Context) (error error) { - logger.Warn("this is none of service.Service") + logger.Log.V(-1).Info("this is none of service.Service") error = fmt.Errorf("error service.Service is none") diff --git a/components/common/gen/github.com/pipeproxy/pipe/components/stream/dialer/init.go b/components/common/gen/github.com/pipeproxy/pipe/components/stream/dialer/init.go index cac22ce..7d2655a 100644 --- a/components/common/gen/github.com/pipeproxy/pipe/components/stream/dialer/init.go +++ b/components/common/gen/github.com/pipeproxy/pipe/components/stream/dialer/init.go @@ -9,7 +9,7 @@ import ( "github.com/pipeproxy/pipe/components/common/register" "github.com/pipeproxy/pipe/components/stream" "github.com/pipeproxy/pipe/internal/ctxcache" - "github.com/pipeproxy/pipe/internal/logger" + "github.com/wzshiming/logger" ) func init() { @@ -65,7 +65,7 @@ func DialerGet(ctx context.Context, name string, defaults stream.Dialer) stream. if defaults != nil { return defaults } - logger.Warnf("stream.Dialer %q is not defined", name) + logger.FromContext(ctx).V(-1).Info("stream.Dialer is not defined", "name", name) return DialerNone } @@ -78,7 +78,7 @@ func newDialerNone() stream.Dialer { } func (_DialerNone) DialStream(_ context.Context) (_ net.Conn, error error) { - logger.Warn("this is none of stream.Dialer") + logger.Log.V(-1).Info("this is none of stream.Dialer") error = fmt.Errorf("error stream.Dialer is none") diff --git a/components/common/gen/github.com/pipeproxy/pipe/components/stream/handler/init.go b/components/common/gen/github.com/pipeproxy/pipe/components/stream/handler/init.go index f909a5f..5e823e0 100644 --- a/components/common/gen/github.com/pipeproxy/pipe/components/stream/handler/init.go +++ b/components/common/gen/github.com/pipeproxy/pipe/components/stream/handler/init.go @@ -8,7 +8,7 @@ import ( "github.com/pipeproxy/pipe/components/common/register" "github.com/pipeproxy/pipe/components/stream" "github.com/pipeproxy/pipe/internal/ctxcache" - "github.com/pipeproxy/pipe/internal/logger" + "github.com/wzshiming/logger" ) func init() { @@ -64,7 +64,7 @@ func HandlerGet(ctx context.Context, name string, defaults stream.Handler) strea if defaults != nil { return defaults } - logger.Warnf("stream.Handler %q is not defined", name) + logger.FromContext(ctx).V(-1).Info("stream.Handler is not defined", "name", name) return HandlerNone } @@ -77,7 +77,7 @@ func newHandlerNone() stream.Handler { } func (_HandlerNone) ServeStream(_ context.Context, _ net.Conn) { - logger.Warn("this is none of stream.Handler") + logger.Log.V(-1).Info("this is none of stream.Handler") return } diff --git a/components/common/gen/github.com/pipeproxy/pipe/components/stream/listenconfig/init.go b/components/common/gen/github.com/pipeproxy/pipe/components/stream/listenconfig/init.go index fbeb6c6..6a6413e 100644 --- a/components/common/gen/github.com/pipeproxy/pipe/components/stream/listenconfig/init.go +++ b/components/common/gen/github.com/pipeproxy/pipe/components/stream/listenconfig/init.go @@ -9,7 +9,7 @@ import ( "github.com/pipeproxy/pipe/components/common/register" "github.com/pipeproxy/pipe/components/stream" "github.com/pipeproxy/pipe/internal/ctxcache" - "github.com/pipeproxy/pipe/internal/logger" + "github.com/wzshiming/logger" ) func init() { @@ -65,7 +65,7 @@ func ListenConfigGet(ctx context.Context, name string, defaults stream.ListenCon if defaults != nil { return defaults } - logger.Warnf("stream.ListenConfig %q is not defined", name) + logger.FromContext(ctx).V(-1).Info("stream.ListenConfig is not defined", "name", name) return ListenConfigNone } @@ -78,7 +78,7 @@ func newListenConfigNone() stream.ListenConfig { } func (_ListenConfigNone) ListenStream(_ context.Context) (_ net.Listener, error error) { - logger.Warn("this is none of stream.ListenConfig") + logger.Log.V(-1).Info("this is none of stream.ListenConfig") error = fmt.Errorf("error stream.ListenConfig is none") diff --git a/components/common/gen/github.com/pipeproxy/pipe/components/tls/tls/init.go b/components/common/gen/github.com/pipeproxy/pipe/components/tls/tls/init.go index 9d7203c..41e1b6c 100644 --- a/components/common/gen/github.com/pipeproxy/pipe/components/tls/tls/init.go +++ b/components/common/gen/github.com/pipeproxy/pipe/components/tls/tls/init.go @@ -7,7 +7,7 @@ import ( "github.com/pipeproxy/pipe/components/common/register" "github.com/pipeproxy/pipe/components/tls" "github.com/pipeproxy/pipe/internal/ctxcache" - "github.com/pipeproxy/pipe/internal/logger" + "github.com/wzshiming/logger" ) func init() { @@ -63,7 +63,7 @@ func TLSGet(ctx context.Context, name string, defaults tls.TLS) tls.TLS { if defaults != nil { return defaults } - logger.Warnf("tls.TLS %q is not defined", name) + logger.FromContext(ctx).V(-1).Info("tls.TLS is not defined", "name", name) return TLSNone } @@ -76,7 +76,7 @@ func newTLSNone() tls.TLS { } func (_TLSNone) TLS() (_ *tls.Config) { - logger.Warn("this is none of tls.TLS") + logger.Log.V(-1).Info("this is none of tls.TLS") return } diff --git a/components/common/gen/io/reader/init.go b/components/common/gen/io/reader/init.go index 1ffebc5..995f88b 100644 --- a/components/common/gen/io/reader/init.go +++ b/components/common/gen/io/reader/init.go @@ -8,7 +8,7 @@ import ( "github.com/pipeproxy/pipe/components/common/register" "github.com/pipeproxy/pipe/internal/ctxcache" - "github.com/pipeproxy/pipe/internal/logger" + "github.com/wzshiming/logger" ) func init() { @@ -64,7 +64,7 @@ func ReaderGet(ctx context.Context, name string, defaults io.Reader) io.Reader { if defaults != nil { return defaults } - logger.Warnf("io.Reader %q is not defined", name) + logger.FromContext(ctx).V(-1).Info("io.Reader is not defined", "name", name) return ReaderNone } @@ -77,7 +77,7 @@ func newReaderNone() io.Reader { } func (_ReaderNone) Read(_ []uint8) (_ int, error error) { - logger.Warn("this is none of io.Reader") + logger.Log.V(-1).Info("this is none of io.Reader") error = fmt.Errorf("error io.Reader is none") diff --git a/components/common/gen/io/writer/init.go b/components/common/gen/io/writer/init.go index c19f9e3..7a5634d 100644 --- a/components/common/gen/io/writer/init.go +++ b/components/common/gen/io/writer/init.go @@ -8,7 +8,7 @@ import ( "github.com/pipeproxy/pipe/components/common/register" "github.com/pipeproxy/pipe/internal/ctxcache" - "github.com/pipeproxy/pipe/internal/logger" + "github.com/wzshiming/logger" ) func init() { @@ -64,7 +64,7 @@ func WriterGet(ctx context.Context, name string, defaults io.Writer) io.Writer { if defaults != nil { return defaults } - logger.Warnf("io.Writer %q is not defined", name) + logger.FromContext(ctx).V(-1).Info("io.Writer is not defined", "name", name) return WriterNone } @@ -77,7 +77,7 @@ func newWriterNone() io.Writer { } func (_WriterNone) Write(_ []uint8) (_ int, error error) { - logger.Warn("this is none of io.Writer") + logger.Log.V(-1).Info("this is none of io.Writer") error = fmt.Errorf("error io.Writer is none") diff --git a/components/common/gen/net/conn/init.go b/components/common/gen/net/conn/init.go index 703bdea..7b1dcdd 100644 --- a/components/common/gen/net/conn/init.go +++ b/components/common/gen/net/conn/init.go @@ -9,7 +9,7 @@ import ( "github.com/pipeproxy/pipe/components/common/register" "github.com/pipeproxy/pipe/internal/ctxcache" - "github.com/pipeproxy/pipe/internal/logger" + "github.com/wzshiming/logger" ) func init() { @@ -65,7 +65,7 @@ func ConnGet(ctx context.Context, name string, defaults net.Conn) net.Conn { if defaults != nil { return defaults } - logger.Warnf("net.Conn %q is not defined", name) + logger.FromContext(ctx).V(-1).Info("net.Conn is not defined", "name", name) return ConnNone } @@ -78,7 +78,7 @@ func newConnNone() net.Conn { } func (_ConnNone) Close() (error error) { - logger.Warn("this is none of net.Conn") + logger.Log.V(-1).Info("this is none of net.Conn") error = fmt.Errorf("error net.Conn is none") @@ -86,13 +86,13 @@ func (_ConnNone) Close() (error error) { } func (_ConnNone) LocalAddr() (_ net.Addr) { - logger.Warn("this is none of net.Conn") + logger.Log.V(-1).Info("this is none of net.Conn") return } func (_ConnNone) Read(_ []uint8) (_ int, error error) { - logger.Warn("this is none of net.Conn") + logger.Log.V(-1).Info("this is none of net.Conn") error = fmt.Errorf("error net.Conn is none") @@ -100,13 +100,13 @@ func (_ConnNone) Read(_ []uint8) (_ int, error error) { } func (_ConnNone) RemoteAddr() (_ net.Addr) { - logger.Warn("this is none of net.Conn") + logger.Log.V(-1).Info("this is none of net.Conn") return } func (_ConnNone) SetDeadline(_ time.Time) (error error) { - logger.Warn("this is none of net.Conn") + logger.Log.V(-1).Info("this is none of net.Conn") error = fmt.Errorf("error net.Conn is none") @@ -114,7 +114,7 @@ func (_ConnNone) SetDeadline(_ time.Time) (error error) { } func (_ConnNone) SetReadDeadline(_ time.Time) (error error) { - logger.Warn("this is none of net.Conn") + logger.Log.V(-1).Info("this is none of net.Conn") error = fmt.Errorf("error net.Conn is none") @@ -122,7 +122,7 @@ func (_ConnNone) SetReadDeadline(_ time.Time) (error error) { } func (_ConnNone) SetWriteDeadline(_ time.Time) (error error) { - logger.Warn("this is none of net.Conn") + logger.Log.V(-1).Info("this is none of net.Conn") error = fmt.Errorf("error net.Conn is none") @@ -130,7 +130,7 @@ func (_ConnNone) SetWriteDeadline(_ time.Time) (error error) { } func (_ConnNone) Write(_ []uint8) (_ int, error error) { - logger.Warn("this is none of net.Conn") + logger.Log.V(-1).Info("this is none of net.Conn") error = fmt.Errorf("error net.Conn is none") diff --git a/components/common/gen/net/http/handler/init.go b/components/common/gen/net/http/handler/init.go index fcdb4b3..c40ccaa 100644 --- a/components/common/gen/net/http/handler/init.go +++ b/components/common/gen/net/http/handler/init.go @@ -7,7 +7,7 @@ import ( "github.com/pipeproxy/pipe/components/common/register" "github.com/pipeproxy/pipe/internal/ctxcache" - "github.com/pipeproxy/pipe/internal/logger" + "github.com/wzshiming/logger" ) func init() { @@ -63,7 +63,7 @@ func HandlerGet(ctx context.Context, name string, defaults http.Handler) http.Ha if defaults != nil { return defaults } - logger.Warnf("http.Handler %q is not defined", name) + logger.FromContext(ctx).V(-1).Info("http.Handler is not defined", "name", name) return HandlerNone } @@ -76,7 +76,7 @@ func newHandlerNone() http.Handler { } func (_HandlerNone) ServeHTTP(_ http.ResponseWriter, _ *http.Request) { - logger.Warn("this is none of http.Handler") + logger.Log.V(-1).Info("this is none of http.Handler") return } diff --git a/components/common/gen/net/packetconn/init.go b/components/common/gen/net/packetconn/init.go index 6723a43..f3113b7 100644 --- a/components/common/gen/net/packetconn/init.go +++ b/components/common/gen/net/packetconn/init.go @@ -9,7 +9,7 @@ import ( "github.com/pipeproxy/pipe/components/common/register" "github.com/pipeproxy/pipe/internal/ctxcache" - "github.com/pipeproxy/pipe/internal/logger" + "github.com/wzshiming/logger" ) func init() { @@ -65,7 +65,7 @@ func PacketConnGet(ctx context.Context, name string, defaults net.PacketConn) ne if defaults != nil { return defaults } - logger.Warnf("net.PacketConn %q is not defined", name) + logger.FromContext(ctx).V(-1).Info("net.PacketConn is not defined", "name", name) return PacketConnNone } @@ -78,7 +78,7 @@ func newPacketConnNone() net.PacketConn { } func (_PacketConnNone) Close() (error error) { - logger.Warn("this is none of net.PacketConn") + logger.Log.V(-1).Info("this is none of net.PacketConn") error = fmt.Errorf("error net.PacketConn is none") @@ -86,13 +86,13 @@ func (_PacketConnNone) Close() (error error) { } func (_PacketConnNone) LocalAddr() (_ net.Addr) { - logger.Warn("this is none of net.PacketConn") + logger.Log.V(-1).Info("this is none of net.PacketConn") return } func (_PacketConnNone) ReadFrom(_ []uint8) (_ int, _ net.Addr, error error) { - logger.Warn("this is none of net.PacketConn") + logger.Log.V(-1).Info("this is none of net.PacketConn") error = fmt.Errorf("error net.PacketConn is none") @@ -100,7 +100,7 @@ func (_PacketConnNone) ReadFrom(_ []uint8) (_ int, _ net.Addr, error error) { } func (_PacketConnNone) SetDeadline(_ time.Time) (error error) { - logger.Warn("this is none of net.PacketConn") + logger.Log.V(-1).Info("this is none of net.PacketConn") error = fmt.Errorf("error net.PacketConn is none") @@ -108,7 +108,7 @@ func (_PacketConnNone) SetDeadline(_ time.Time) (error error) { } func (_PacketConnNone) SetReadDeadline(_ time.Time) (error error) { - logger.Warn("this is none of net.PacketConn") + logger.Log.V(-1).Info("this is none of net.PacketConn") error = fmt.Errorf("error net.PacketConn is none") @@ -116,7 +116,7 @@ func (_PacketConnNone) SetReadDeadline(_ time.Time) (error error) { } func (_PacketConnNone) SetWriteDeadline(_ time.Time) (error error) { - logger.Warn("this is none of net.PacketConn") + logger.Log.V(-1).Info("this is none of net.PacketConn") error = fmt.Errorf("error net.PacketConn is none") @@ -124,7 +124,7 @@ func (_PacketConnNone) SetWriteDeadline(_ time.Time) (error error) { } func (_PacketConnNone) WriteTo(_ []uint8, _ net.Addr) (_ int, error error) { - logger.Warn("this is none of net.PacketConn") + logger.Log.V(-1).Info("this is none of net.PacketConn") error = fmt.Errorf("error net.PacketConn is none") diff --git a/components/common/register/register.go b/components/common/register/register.go index 1b52601..c62b7c7 100644 --- a/components/common/register/register.go +++ b/components/common/register/register.go @@ -5,9 +5,9 @@ import ( "reflect" "strings" - "github.com/pipeproxy/pipe/internal/logger" "github.com/wzshiming/funcfg/types" "github.com/wzshiming/funcfg/types/extra" + "github.com/wzshiming/logger" ) func Register(kind string, fun interface{}) error { @@ -20,10 +20,9 @@ func Register(kind string, fun interface{}) error { } func GetKindName(kind string, fun interface{}) (string, error) { - typ, err := types.CheckFunc(reflect.ValueOf(fun)) if err != nil { - logger.Errorf("CheckFunc: %s: %s", kind, err) + logger.Log.Error(err, "CheckFunc", "kind", kind) return "", err } pkg := typ.PkgPath() diff --git a/components/common/types/register.go b/components/common/types/register.go index e2e59b4..91f31b4 100644 --- a/components/common/types/register.go +++ b/components/common/types/register.go @@ -2,7 +2,7 @@ package types import ( "github.com/pipeproxy/pipe/components/common/load" - "github.com/pipeproxy/pipe/internal/logger" + "github.com/wzshiming/logger" ) var Global []interface{} @@ -20,7 +20,7 @@ func Register(i interface{}) error { for _, item := range list { err := item(i) if err != nil { - logger.Errorln(err) + logger.Log.Error(err, "register components") return err } } diff --git a/components/once/message/message.go b/components/once/message/message.go index c76e37a..04b6ce2 100644 --- a/components/once/message/message.go +++ b/components/once/message/message.go @@ -3,12 +3,12 @@ package message import ( "context" - "github.com/pipeproxy/pipe/internal/logger" + "github.com/wzshiming/logger" ) type Message string func (m Message) Do(ctx context.Context) error { - logger.Info(string(m)) + logger.FromContext(ctx).Info(string(m)) return nil } diff --git a/components/once/service/service.go b/components/once/service/service.go index 4470d32..4116e3d 100644 --- a/components/once/service/service.go +++ b/components/once/service/service.go @@ -4,7 +4,7 @@ import ( "context" "github.com/pipeproxy/pipe/components/service" - "github.com/pipeproxy/pipe/internal/logger" + "github.com/wzshiming/logger" ) type Service struct { @@ -22,7 +22,7 @@ func (m *Service) Do(ctx context.Context) error { <-ctx.Done() err := m.svc.Close() if err != nil { - logger.Errorln(err) + logger.FromContext(ctx).Error(err, "service close") } }() return m.svc.Run(ctx) diff --git a/components/packet/handler/http3/server.go b/components/packet/handler/http3/server.go index 057d3a3..714668c 100644 --- a/components/packet/handler/http3/server.go +++ b/components/packet/handler/http3/server.go @@ -9,7 +9,7 @@ import ( "github.com/pipeproxy/pipe/components/packet" "github.com/pipeproxy/pipe/components/tls" "github.com/pipeproxy/pipe/internal/listener" - "github.com/pipeproxy/pipe/internal/logger" + "github.com/wzshiming/logger" ) type server struct { @@ -26,6 +26,10 @@ func NewServer(handler http.Handler, tlsConfig tls.TLS) packet.Handler { } func (s *server) ServePacket(ctx context.Context, pkt packet.Packet) { + log := logger.FromContext(ctx) + log = log.WithName("http3") + ctx = logger.WithContext(ctx, log) + httpServer := &http.Server{ BaseContext: func(listener net.Listener) context.Context { return ctx @@ -47,7 +51,7 @@ func (s *server) ServePacket(ctx context.Context, pkt packet.Packet) { } if err != nil { if err.Error() != "server closed" { - logger.Errorln("[http3]", err) + log.Error(err, "http3 server close") } } } diff --git a/components/packet/handler/quic/quic.go b/components/packet/handler/quic/quic.go index 4818685..0af2818 100644 --- a/components/packet/handler/quic/quic.go +++ b/components/packet/handler/quic/quic.go @@ -7,7 +7,7 @@ import ( quic "github.com/lucas-clemente/quic-go" "github.com/pipeproxy/pipe/internal/listener" - "github.com/pipeproxy/pipe/internal/logger" + "github.com/wzshiming/logger" ) type Listener struct { @@ -36,7 +36,7 @@ func (l *Listener) accept() { for { sess, err := l.Listener.Accept(l.ctx) if err != nil { - logger.Errorf("accept session failed: %v", err) + logger.FromContext(l.ctx).Error(err, "accept session failed") return } @@ -48,7 +48,7 @@ func (l *Listener) acceptStream(sess quic.Session) { for { stm, err := sess.AcceptStream(l.ctx) if err != nil { - logger.Errorf("accept stream failed: %v", err) + logger.FromContext(l.ctx).Error(err, "accept stream failed") return } diff --git a/components/packet/handler/quic/server.go b/components/packet/handler/quic/server.go index 73196f5..9d30486 100644 --- a/components/packet/handler/quic/server.go +++ b/components/packet/handler/quic/server.go @@ -7,6 +7,7 @@ import ( "github.com/pipeproxy/pipe/components/packet" "github.com/pipeproxy/pipe/components/stream" "github.com/pipeproxy/pipe/components/tls" + "github.com/wzshiming/logger" ) type server struct { @@ -23,6 +24,9 @@ func NewServer(pkt packet.Packet, tlsConfig tls.TLS) stream.ListenConfig { } func (s *server) ListenStream(ctx context.Context) (stream.StreamListener, error) { + log := logger.FromContext(ctx) + log = log.WithName("quic") + ctx = logger.WithContext(ctx, log) listen, err := quic.Listen(s.pkt, s.tlsConfig.TLS(), &quic.Config{}) if err != nil { return nil, err diff --git a/components/packet/listener/listener/listener.go b/components/packet/listener/listener/listener.go index 005f6eb..3411c9a 100644 --- a/components/packet/listener/listener/listener.go +++ b/components/packet/listener/listener/listener.go @@ -5,7 +5,7 @@ import ( "github.com/pipeproxy/pipe/components/packet" "github.com/pipeproxy/pipe/internal/listener" - "github.com/pipeproxy/pipe/internal/logger" + "github.com/wzshiming/logger" ) type Listener struct { @@ -21,6 +21,8 @@ func NewListener(network string, address string) *Listener { } func (n *Listener) ListenPacket(ctx context.Context) (packet.Packet, error) { - logger.Infof("Listen %s://%s", n.network, n.address) + logger.FromContext(ctx).Info("Listen packet", + "localAddress", n.address, + ) return listener.ListenPacket(ctx, n.network, n.address) } diff --git a/components/protocol/http/forward/init.go b/components/protocol/http/forward/init.go index 4bc65e3..975e7d9 100644 --- a/components/protocol/http/forward/init.go +++ b/components/protocol/http/forward/init.go @@ -2,9 +2,11 @@ package forward import ( "net/http" + "net/url" "github.com/pipeproxy/pipe/components/common/register" "github.com/pipeproxy/pipe/components/stream" + "github.com/pipeproxy/pipe/components/stream/dialer/dialer" "github.com/pipeproxy/pipe/internal/round_tripper" ) @@ -23,5 +25,12 @@ type Config struct { // NewForwardWithConfig create a new forward with config. func NewForwardWithConfig(conf *Config) (http.Handler, error) { + u, err := url.Parse(conf.URL) + if err != nil { + return nil, err + } + if conf.Dialer == nil { + conf.Dialer = dialer.NewDialer("tcp", u.Host, false, false) + } return NewForward(conf.URL, round_tripper.RoundTripper(conf.Dialer)) } diff --git a/components/protocol/http/log/init.go b/components/protocol/http/log/init.go index ef97c63..c2175f1 100644 --- a/components/protocol/http/log/init.go +++ b/components/protocol/http/log/init.go @@ -3,7 +3,6 @@ package log import ( "net/http" - "github.com/gorilla/handlers" "github.com/pipeproxy/pipe/components/common/register" "github.com/pipeproxy/pipe/components/stdio/output" ) @@ -22,8 +21,5 @@ type Config struct { } func NewLogWithConfig(conf *Config) http.Handler { - if conf.Output != nil { - return handlers.CombinedLoggingHandler(conf.Output, conf.Handler) - } - return conf.Handler + return NewLog(conf.Handler) } diff --git a/components/protocol/http/log/log.go b/components/protocol/http/log/log.go new file mode 100644 index 0000000..72acc9f --- /dev/null +++ b/components/protocol/http/log/log.go @@ -0,0 +1,42 @@ +package log + +import ( + "net/http" + + "github.com/felixge/httpsnoop" + "github.com/wzshiming/logger" +) + +type Log struct { + handler http.Handler +} + +func NewLog(h http.Handler) *Log { + return &Log{h} +} + +func (l *Log) ServeHTTP(rw http.ResponseWriter, r *http.Request) { + ctx := r.Context() + log := logger.FromContext(ctx) + if !log.Enabled() { + l.handler.ServeHTTP(rw, r) + return + } + u := r.RequestURI + + log.WithName("Request"). + Info(u, + "host", r.Host, + "method", r.Method, + "contentLength", r.ContentLength, + "header", r.Header, + ) + metric := httpsnoop.CaptureMetrics(l.handler, rw, r) + log.WithName("Response"). + Info(u, + "code", metric.Code, + "duration", metric.Duration, + "contentLength", metric.Written, + "header", rw.Header(), + ) +} diff --git a/components/protocol/http/quit/quit.go b/components/protocol/http/quit/quit.go index 0f259e3..dff8b7e 100644 --- a/components/protocol/http/quit/quit.go +++ b/components/protocol/http/quit/quit.go @@ -4,7 +4,7 @@ import ( "net/http" "github.com/pipeproxy/pipe" - "github.com/pipeproxy/pipe/internal/logger" + "github.com/wzshiming/logger" ) type Quit struct { @@ -24,7 +24,7 @@ func (c *Quit) ServeHTTP(rw http.ResponseWriter, r *http.Request) { err := svc.Close() if err != nil { - logger.Errorf("service close error: %s", err) + logger.FromContext(r.Context()).Error(err, "service close") return } } diff --git a/components/service/multi/multi.go b/components/service/multi/multi.go index b32185b..37a12e5 100644 --- a/components/service/multi/multi.go +++ b/components/service/multi/multi.go @@ -6,7 +6,7 @@ import ( "sync" "github.com/pipeproxy/pipe/components/service" - "github.com/pipeproxy/pipe/internal/logger" + "github.com/wzshiming/logger" ) var ( @@ -29,14 +29,17 @@ func (m *Multi) Run(ctx context.Context) error { case 0: default: m.wg.Add(len(m.multi)) - for _, svc := range m.multi { - go func(svc service.Service) { + for i, svc := range m.multi { + go func(ctx context.Context, i int, svc service.Service) { + log := logger.FromContext(ctx) + log = log.WithName(getName(i, svc)) + ctx = logger.WithContext(ctx, log) err := svc.Run(ctx) if err != nil { - logger.Errorf("service start error: %s", err) + log.Error(err, "service start") } m.wg.Done() - }(svc) + }(ctx, i, svc) } m.wg.Wait() } @@ -47,10 +50,10 @@ func (m *Multi) Close() error { switch len(m.multi) { case 0: default: - for _, service := range m.multi { - err := service.Close() + for i, svc := range m.multi { + err := svc.Close() if err != nil { - logger.Errorf("service close error: %s", err) + logger.Log.WithName(getName(i, svc)).Error(err, "service close") } } } diff --git a/components/service/multi/name.go b/components/service/multi/name.go new file mode 100644 index 0000000..a5e0503 --- /dev/null +++ b/components/service/multi/name.go @@ -0,0 +1,22 @@ +package multi + +import ( + "fmt" + "reflect" + + "github.com/pipeproxy/pipe/components/service" +) + +func getName(i int, svc service.Service) string { + val := reflect.ValueOf(svc) + if val.Kind() == reflect.Ptr { + val = val.Elem() + } + if val.Kind() == reflect.Struct { + v := val.FieldByName("Name") + if v.IsValid() && v.Kind() == reflect.String { + return v.String() + } + } + return fmt.Sprintf("service-%d", i) +} diff --git a/components/service/packet/server.go b/components/service/packet/server.go index d0e414a..e977454 100644 --- a/components/service/packet/server.go +++ b/components/service/packet/server.go @@ -6,7 +6,7 @@ import ( "github.com/pipeproxy/pipe/components/packet" "github.com/pipeproxy/pipe/internal/listener" - "github.com/pipeproxy/pipe/internal/logger" + "github.com/wzshiming/logger" ) type Server struct { @@ -53,8 +53,9 @@ func (s *Server) ServePacket(ctx context.Context, pkt packet.Packet) { err = nil } if err != nil { - addr := pkt.LocalAddr() - logger.Errorf("Close %s://%s error: %s", addr.Network(), addr.String(), err) + log := logger.FromContext(ctx) + log = log.WithName("packet") + log.Error(err, "close listen") return } } diff --git a/components/service/stream/server.go b/components/service/stream/server.go index 49c92a9..54eba90 100644 --- a/components/service/stream/server.go +++ b/components/service/stream/server.go @@ -2,12 +2,13 @@ package stream import ( "context" + "fmt" "sync" "time" "github.com/pipeproxy/pipe/components/stream" "github.com/pipeproxy/pipe/internal/listener" - "github.com/pipeproxy/pipe/internal/logger" + "github.com/wzshiming/logger" ) type Server struct { @@ -29,20 +30,31 @@ func NewServer(listenConfig stream.ListenConfig, handler stream.Handler, disconn } func (s *Server) Run(ctx context.Context) error { + log := logger.FromContext(ctx) listen, err := s.listenConfig.ListenStream(ctx) if err != nil { return err } s.listener = listen + + var size uint64 for { conn, err := s.listener.Accept() if err != nil { if listener.IsClosedConnError(err) || err == context.Canceled { return nil } - logger.Errorln(err) + log.Error(err, "listener accept") continue } + log := log.WithName(fmt.Sprintf("stream-%d", size)) + size++ + ctx = logger.WithContext(ctx, log) + log = log.WithValues( + "localAddress", conn.LocalAddr(), + "remoteAddress", conn.RemoteAddr(), + ) + log.Info("New stream") go s.ServeStream(ctx, conn) } } @@ -62,7 +74,9 @@ func (s *Server) Close() error { err := stm.SetDeadline(deadline) if err != nil { addr := stm.LocalAddr() - logger.Errorf("SetDeadline %s://%s error: %s", addr.Network(), addr.String(), err) + logger.Log.Error(err, "SetDeadline", + "address", addr.String(), + ) } return true }) @@ -80,7 +94,7 @@ func (s *Server) ServeStream(ctx context.Context, stm stream.Stream) { err := stm.Close() if err != nil { addr := stm.LocalAddr() - logger.Errorf("Close %s://%s error: %s", addr.Network(), addr.String(), err) + logger.Log.V(-2).Info("Close %s://%s error: %s", addr.Network(), addr.String(), err) return } } diff --git a/components/stream/dialer/dialer/dialer.go b/components/stream/dialer/dialer/dialer.go index a668aec..34074e5 100644 --- a/components/stream/dialer/dialer/dialer.go +++ b/components/stream/dialer/dialer/dialer.go @@ -9,6 +9,7 @@ import ( svc_stream "github.com/pipeproxy/pipe/components/service/stream" "github.com/pipeproxy/pipe/components/stream" "github.com/pipeproxy/pipe/internal/listener" + "github.com/wzshiming/logger" ) type Dialer struct { @@ -61,8 +62,17 @@ func (d *Dialer) DialStream(ctx context.Context) (stream.Stream, error) { } } } + + log := logger.FromContext(ctx) if d.virtual { + log.Info("Virtual dial stream", + "targetAddress", address, + "virtual", true, + ) return listener.VirtualDialContext(ctx, network, address) } + log.Info("Dial stream", + "targetAddress", address, + ) return listener.DialContext(ctx, network, address) } diff --git a/components/stream/dialer/tls/tls.go b/components/stream/dialer/tls/tls.go index 682266c..fbb8f62 100644 --- a/components/stream/dialer/tls/tls.go +++ b/components/stream/dialer/tls/tls.go @@ -5,6 +5,7 @@ import ( "github.com/pipeproxy/pipe/components/stream" "github.com/pipeproxy/pipe/components/tls" + "github.com/wzshiming/logger" ) type Tls struct { @@ -20,6 +21,9 @@ func NewTls(dialer stream.Dialer, tlsConfig tls.TLS) *Tls { } func (d *Tls) DialStream(ctx context.Context) (stream.Stream, error) { + log := logger.FromContext(ctx) + log = log.WithName("tls") + ctx = logger.WithContext(ctx, log) stm, err := d.dialer.DialStream(ctx) if err != nil { return nil, err diff --git a/components/stream/handler/forward/forward.go b/components/stream/handler/forward/forward.go index 8e9b60f..e2335ab 100644 --- a/components/stream/handler/forward/forward.go +++ b/components/stream/handler/forward/forward.go @@ -4,8 +4,8 @@ import ( "context" "github.com/pipeproxy/pipe/components/stream" - "github.com/pipeproxy/pipe/internal/logger" "github.com/pipeproxy/pipe/internal/tunnel" + "github.com/wzshiming/logger" ) type Forward struct { @@ -21,13 +21,13 @@ func NewForward(dialer stream.Dialer) *Forward { func (f *Forward) ServeStream(ctx context.Context, stm stream.Stream) { conn, err := f.dialer.DialStream(ctx) if err != nil { - logger.Errorln(err) + logger.FromContext(ctx).Error(err, "dial") return } defer conn.Close() err = tunnel.Tunnel(ctx, stm, conn) if err != nil { - logger.Errorln(err) + logger.FromContext(ctx).Error(err, "tunnel") return } } diff --git a/components/stream/handler/http1/server.go b/components/stream/handler/http1/server.go index e9db107..90f90a1 100644 --- a/components/stream/handler/http1/server.go +++ b/components/stream/handler/http1/server.go @@ -6,7 +6,7 @@ import ( "github.com/pipeproxy/pipe/components/stream" "github.com/pipeproxy/pipe/internal/listener" - "github.com/pipeproxy/pipe/internal/logger" + "github.com/wzshiming/logger" ) type server struct { @@ -38,9 +38,12 @@ func (s *server) serve(ctx context.Context, listen stream.StreamListener, handle } func (s *server) ServeStream(ctx context.Context, stm stream.Stream) { + log := logger.FromContext(ctx) + log = log.WithName("http1") + ctx = logger.WithContext(ctx, log) err := s.serve(ctx, listener.NewSingleConnListener(stm), s.handler) if err != nil { - logger.Errorln("[http1]", err) + log.Error(err, "http1 server close") return } } diff --git a/components/stream/handler/http2/server.go b/components/stream/handler/http2/server.go index 0e2bd25..09eabd5 100644 --- a/components/stream/handler/http2/server.go +++ b/components/stream/handler/http2/server.go @@ -7,7 +7,7 @@ import ( "github.com/pipeproxy/pipe/components/stream" "github.com/pipeproxy/pipe/components/tls" "github.com/pipeproxy/pipe/internal/listener" - "github.com/pipeproxy/pipe/internal/logger" + "github.com/wzshiming/logger" "golang.org/x/net/http2" "golang.org/x/net/http2/h2c" ) @@ -68,9 +68,16 @@ func (s *server) serve(ctx context.Context, listen stream.StreamListener, handle } func (s *server) ServeStream(ctx context.Context, stm stream.Stream) { + log := logger.FromContext(ctx) + if s.tlsConfig != nil { + log = log.WithName("http2") + } else { + log = log.WithName("h2c") + } + ctx = logger.WithContext(ctx, log) err := s.serve(ctx, listener.NewSingleConnListener(stm), s.handler) if err != nil { - logger.Errorln("[http2]", err) + log.Error(err, "http2 server close") return } } diff --git a/components/stream/handler/mux/mux.go b/components/stream/handler/mux/mux.go index 2a9dc4c..aa75396 100644 --- a/components/stream/handler/mux/mux.go +++ b/components/stream/handler/mux/mux.go @@ -9,8 +9,8 @@ import ( "sync/atomic" "github.com/pipeproxy/pipe/components/stream" - "github.com/pipeproxy/pipe/internal/logger" "github.com/wzshiming/crun" + "github.com/wzshiming/logger" "github.com/wzshiming/trie" ) @@ -137,7 +137,9 @@ func (m *Mux) getHandler(index []byte) (stream.Handler, bool) { func (m *Mux) ServeStream(ctx context.Context, stm stream.Stream) { connector, buf, err := m.Handler(stm) if err != nil { - logger.Errorf("prefix %q: %s", buf, err) + logger.FromContext(ctx).Error(err, "", + "prefix", buf, + ) stm.Close() return } diff --git a/components/stream/handler/tls/tls.go b/components/stream/handler/tls/tls.go index b901c8d..f2e26f0 100644 --- a/components/stream/handler/tls/tls.go +++ b/components/stream/handler/tls/tls.go @@ -5,6 +5,7 @@ import ( "github.com/pipeproxy/pipe/components/stream" "github.com/pipeproxy/pipe/components/tls" + "github.com/wzshiming/logger" ) type TlsUp struct { @@ -20,6 +21,9 @@ func NewTlsUp(handler stream.Handler, tlsConfig tls.TLS) *TlsUp { } func (t *TlsUp) ServeStream(ctx context.Context, stm stream.Stream) { + log := logger.FromContext(ctx) + log = log.WithName("tls_client") + ctx = logger.WithContext(ctx, log) conn := tls.Client(stm, t.tlsConfig.TLS()) t.handler.ServeStream(ctx, conn) } @@ -37,6 +41,9 @@ func NewTlsDown(handler stream.Handler, tlsConfig tls.TLS) *TlsDown { } func (t *TlsDown) ServeStream(ctx context.Context, stm stream.Stream) { + log := logger.FromContext(ctx) + log = log.WithName("tls_server") + ctx = logger.WithContext(ctx, log) conn := tls.Server(stm, t.tlsConfig.TLS()) t.handler.ServeStream(ctx, conn) } diff --git a/components/stream/listener/listener/listener.go b/components/stream/listener/listener/listener.go index e668aae..5980518 100644 --- a/components/stream/listener/listener/listener.go +++ b/components/stream/listener/listener/listener.go @@ -5,7 +5,7 @@ import ( "github.com/pipeproxy/pipe/components/stream" "github.com/pipeproxy/pipe/internal/listener" - "github.com/pipeproxy/pipe/internal/logger" + "github.com/wzshiming/logger" ) type Listener struct { @@ -23,10 +23,16 @@ func NewListener(network string, address string, virtual bool) *Listener { } func (l *Listener) ListenStream(ctx context.Context) (stream.StreamListener, error) { + log := logger.FromContext(ctx) if l.virtual { - logger.Infof("Virtual Listen %s://%s", l.network, l.address) + log.Info("Virtual listen stream", + "localAddress", l.address, + "virtual", true, + ) return listener.VirtualListen(ctx, l.network, l.address) } - logger.Infof("Listen %s://%s", l.network, l.address) + log.Info("Listen stream", + "localAddress", l.address, + ) return listener.Listen(ctx, l.network, l.address) } diff --git a/components/stream/listener/tls/tls.go b/components/stream/listener/tls/tls.go index 7e11ada..c4678b4 100644 --- a/components/stream/listener/tls/tls.go +++ b/components/stream/listener/tls/tls.go @@ -5,6 +5,7 @@ import ( "github.com/pipeproxy/pipe/components/stream" "github.com/pipeproxy/pipe/components/tls" + "github.com/wzshiming/logger" ) type Tls struct { @@ -20,6 +21,9 @@ func NewTls(listenConfig stream.ListenConfig, tlsConfig tls.TLS) *Tls { } func (d *Tls) ListenStream(ctx context.Context) (stream.StreamListener, error) { + log := logger.FromContext(ctx) + log = log.WithName("tls") + ctx = logger.WithContext(ctx, log) listener, err := d.listenConfig.ListenStream(ctx) if err != nil { return nil, err diff --git a/examples/examples.go b/examples/examples.go index 97d1985..c2eb53d 100644 --- a/examples/examples.go +++ b/examples/examples.go @@ -59,9 +59,12 @@ var ( bind.DefServiceConfig{ Name: "server", Def: config.BuildH1WithService(":80", - config.BuildHTTPLogStderr(bind.RefNetHTTPHandlerConfig{ - Name: "balance", - })), + config.BuildHTTPLogStderr( + bind.RefNetHTTPHandlerConfig{ + Name: "balance", + }, + ), + ), }, bind.DefNetHTTPHandlerConfig{ Name: "balance", @@ -84,32 +87,34 @@ var ( bind.DefServiceConfig{ Name: "host1", Def: config.BuildH1WithService(":8001", - bind.DirectNetHTTPHandlerConfig{ - Code: http.StatusOK, - Body: bind.InlineIoReaderConfig{ - Data: `This is Pipe page1 {{.Scheme}}://{{.Host}}{{.RequestURI}}`, + config.BuildHTTPLogStderr( + bind.DirectNetHTTPHandlerConfig{ + Code: http.StatusOK, + Body: bind.InlineIoReaderConfig{ + Data: `This is Pipe page1 {{.Scheme}}://{{.Host}}{{.RequestURI}}`, + }, }, - }), + ), + ), }, bind.DefServiceConfig{ Name: "host2", Def: config.BuildH1WithService(":8002", - bind.DirectNetHTTPHandlerConfig{ - Code: http.StatusOK, - Body: bind.InlineIoReaderConfig{ - Data: `This is Pipe page2 {{.Scheme}}://{{.Host}}{{.RequestURI}}`, + config.BuildHTTPLogStderr( + bind.DirectNetHTTPHandlerConfig{ + Code: http.StatusOK, + Body: bind.InlineIoReaderConfig{ + Data: `This is Pipe page2 {{.Scheme}}://{{.Host}}{{.RequestURI}}`, + }, }, - }), + ), + ), }, ) ExampleHTTPS = config.BuildSampleWithOnce( - bind.MultiServiceConfig{ - Multi: []bind.Service{ - bind.RefServiceConfig{ - Name: "server", - }, - }, + bind.RefServiceConfig{ + Name: "server", }, bind.DefNetHTTPHandlerConfig{ Name: "page", @@ -126,9 +131,13 @@ var ( Multi: []bind.Service{ config.BuildHTTPRedirectToHTTPSWithService(":80"), config.BuildH2WithService(":443", - config.BuildHTTPLogStderr(bind.RefNetHTTPHandlerConfig{ - Name: "page", - }), bind.SelfSignedTLS{}), + config.BuildHTTPLogStderr( + bind.RefNetHTTPHandlerConfig{ + Name: "page", + }, + ), + bind.SelfSignedTLS{}, + ), }, }, }, diff --git a/examples/web_forward.yml b/examples/web_forward.yml index 35b6c68..07ee9f6 100644 --- a/examples/web_forward.yml +++ b/examples/web_forward.yml @@ -38,11 +38,16 @@ Multi: Handler: '@Kind': http1@stream.Handler Handler: - '@Kind': direct@net/http.Handler - Body: - '@Kind': inline@io.Reader - Data: This is Pipe page1 {{.Scheme}}://{{.Host}}{{.RequestURI}} - Code: 200 + '@Kind': log@net/http.Handler + Handler: + '@Kind': direct@net/http.Handler + Body: + '@Kind': inline@io.Reader + Data: This is Pipe page1 {{.Scheme}}://{{.Host}}{{.RequestURI}} + Code: 200 + Output: + '@Kind': file@io.Writer + Path: /dev/stderr Listener: '@Kind': listener@stream.ListenConfig Address: :8001 @@ -54,11 +59,16 @@ Multi: Handler: '@Kind': http1@stream.Handler Handler: - '@Kind': direct@net/http.Handler - Body: - '@Kind': inline@io.Reader - Data: This is Pipe page2 {{.Scheme}}://{{.Host}}{{.RequestURI}} - Code: 200 + '@Kind': log@net/http.Handler + Handler: + '@Kind': direct@net/http.Handler + Body: + '@Kind': inline@io.Reader + Data: This is Pipe page2 {{.Scheme}}://{{.Host}}{{.RequestURI}} + Code: 200 + Output: + '@Kind': file@io.Writer + Path: /dev/stderr Listener: '@Kind': listener@stream.ListenConfig Address: :8002 diff --git a/examples/web_https.yml b/examples/web_https.yml index 3aebc79..1e37d72 100644 --- a/examples/web_https.yml +++ b/examples/web_https.yml @@ -55,7 +55,5 @@ Multi: Name: server - '@Kind': service@once.Once Service: - '@Kind': multi@service.Service - Multi: - - '@Kind': ref@service.Service - Name: server + '@Kind': ref@service.Service + Name: server diff --git a/go.mod b/go.mod index e828787..dfc6e82 100644 --- a/go.mod +++ b/go.mod @@ -3,6 +3,8 @@ module github.com/pipeproxy/pipe go 1.15 require ( + github.com/felixge/httpsnoop v1.0.1 + github.com/go-logr/logr v0.3.0 github.com/gogf/greuse v1.1.0 github.com/gorilla/handlers v1.4.2 github.com/lucas-clemente/quic-go v0.18.0 @@ -14,14 +16,15 @@ require ( github.com/wzshiming/crun v0.3.3 github.com/wzshiming/funcfg v0.1.2 github.com/wzshiming/lockfile v0.0.5 + github.com/wzshiming/logger v0.0.0-20201120123225-10f5d60851cc github.com/wzshiming/notify v0.0.5 github.com/wzshiming/trie v0.0.1 golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a - golang.org/x/net v0.0.0-20200822124328-c89045814202 - golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208 + golang.org/x/net v0.0.0-20201021035429-f5854403a974 + golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9 golang.org/x/sys v0.0.0-20200821140526-fda516888d29 // indirect golang.org/x/text v0.3.3 // indirect - golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect + golang.org/x/tools v0.0.0-20201120032337-6d151481565c // indirect sigs.k8s.io/yaml v1.2.0 ) diff --git a/go.sum b/go.sum index 0892e87..90b133a 100644 --- a/go.sum +++ b/go.sum @@ -7,6 +7,7 @@ dmitri.shuralyov.com/html/belt v0.0.0-20180602232347-f7d459c86be0/go.mod h1:JLBr dmitri.shuralyov.com/service/change v0.0.0-20181023043359-a85b471d5412/go.mod h1:a1inKt/atXimZ4Mv927x+r7UpyzRUf4emIoiiSC2TN4= dmitri.shuralyov.com/state v0.0.0-20180228185332-28bcc343414c/go.mod h1:0PRwlb0D6DFvNNtx+9ybjezNCa8XF0xaYcETyp6rHWU= git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg= +github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= @@ -29,6 +30,8 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/felixge/httpsnoop v1.0.1 h1:lvB5Jl89CsZtGIWuTcDM1E/vkVs49/Ml7JJe07l8SPQ= +github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/francoispqt/gojay v1.2.13/go.mod h1:ehT5mTG4ua4581f1++1WLG0vPdaA9HaiDsoyrBGkyDY= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= @@ -41,6 +44,11 @@ github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2 github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= +github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= +github.com/go-logr/logr v0.3.0 h1:q4c+kbcR0d5rSurhBR8dIgieOaYpXtsdTYfx22Cu6rs= +github.com/go-logr/logr v0.3.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= +github.com/go-logr/zapr v0.3.0 h1:iyiCRZ29uPmbO7mWIjOEiYMXrTxZWTyK4tCatLyGpUY= +github.com/go-logr/zapr v0.3.0/go.mod h1:qhKdvif7YF5GI9NWEpyxTSSBdGmzkNguibrdCNVPunU= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/gogf/greuse v1.1.0 h1:tID8vkYr1Hx4sNvXMY1nLacJjhoXeUwW0uyztVVpgzk= github.com/gogf/greuse v1.1.0/go.mod h1:lZZcvDkB3mLtr6y4mQg7HTG4rnmoT1z962appNLMPGI= @@ -67,6 +75,7 @@ github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/googleapis/gax-go v2.0.0+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= github.com/googleapis/gax-go/v2 v2.0.3/go.mod h1:LLvjysVCY1JZeum8Z6l8qUty8fiNwE08qbEPm1M08qg= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= @@ -126,7 +135,9 @@ github.com/onsi/gomega v1.10.1 h1:o0+MgICZLuZ7xjH7Vx6zS/zcu93/BEp1VwkIW1mEXCE= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/openzipkin/zipkin-go v0.1.1/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_golang v0.8.0/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= @@ -146,6 +157,7 @@ github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.1.3 h1:F0+tqvhOksq22sc6iCHF5WGlWjdwj92p0udFh1VFBS8= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/shurcooL/component v0.0.0-20170202220835-f88ec8f54cc4/go.mod h1:XhFIlyj5a1fBNx5aJTbKoIq0mNaPvOagO+HjB3EtxrY= @@ -180,6 +192,7 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= github.com/viant/assertly v0.4.8/go.mod h1:aGifi++jvCrUaklKEKT0BU95igDNaqkvz+49uaYMPRU= @@ -194,14 +207,28 @@ github.com/wzshiming/inject v0.1.0 h1:jIxBvu1uZu1hmTtlVT8KyBqXNKwWZoM7+AipVCLr2b github.com/wzshiming/inject v0.1.0/go.mod h1:TMwIIbf/euizgbEFavNdWAudPr7tO9kM0UOLxJJgJkY= github.com/wzshiming/lockfile v0.0.5 h1:UXmyza5BHnG4otZ5tXSUAp4TnHt72oKozKQ0BlwZqoM= github.com/wzshiming/lockfile v0.0.5/go.mod h1:vhWLDg1zBZYjo0UGrKCzCa8V+exb/6pq3H9yAulhpHM= +github.com/wzshiming/logger v0.0.0-20201120123225-10f5d60851cc h1:9fuCV59swHz7BFVaB7xaFhHjZkXitfnU9PPPHTH86R8= +github.com/wzshiming/logger v0.0.0-20201120123225-10f5d60851cc/go.mod h1:ZrCaVKS2W7/ivqWwOXmW7GuOlTe3jC6RCDyP48cJCqc= github.com/wzshiming/namecase v0.2.0 h1:zRWDTVN8Yfzz9YfpOuM/TpYza/HRO9SrWAR6l9mMpKQ= github.com/wzshiming/namecase v0.2.0/go.mod h1:FJT9Q8a289dtinO3AJUDKqRP9UQzq9UxpWDevdDVvYA= github.com/wzshiming/notify v0.0.5 h1:c/S99kE2S1jNt74hg5bpmM0DFATEHNg5NDgl8sYKAfo= github.com/wzshiming/notify v0.0.5/go.mod h1:SFhsQKZJznzsDcj/Qfo9A65k5IRcpUrpgbLRzZEa/DI= github.com/wzshiming/trie v0.0.1 h1:6xnhRyO5tZWR6aKjEpFfm8KSNNHYsNbpKrY1+NdyHME= github.com/wzshiming/trie v0.0.1/go.mod h1:Z20IrQFTHnjWz//dssIoiEPWInBZFyuFlPOFPxV0Rec= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= go.opencensus.io v0.18.0/go.mod h1:vKdFvxhtzZ9onBp9VKHK8z/sRpBMnKAsufL7wlDrCOA= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/atomic v1.6.0 h1:Ezj3JGmsOnG1MoRWQkPBsKLe9DwWD9QeXzTRzzldNVk= +go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= +go.uber.org/multierr v1.5.0 h1:KCa4XfM8CWFCpxXRGok+Q0SS/0XBhMDbHHGABQLvD2A= +go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= +go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee h1:0mgffUl7nfd+FpvXMVz4IDEaUSmT1ysygQC7qYo7sG4= +go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= +go.uber.org/zap v1.8.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +go.uber.org/zap v1.16.0 h1:uFRZXykJGK9lLY4HtgSw44DnIcAM+kRBP7x5m+NpAOM= +go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ= go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE= golang.org/x/build v0.0.0-20190111050920-041ab4dc3f9d/go.mod h1:OWs+y06UdEOHN4y+MfF/py+xQ/tYqIWW03b70/CG9Rw= golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a h1:vclmkQCjlDX5OydZ9wv8rBCcS0QyQY66Mpf/7BZbInM= @@ -211,6 +238,11 @@ golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTk golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de h1:5hukYrvBGR8/eNkX5mdUezrA6JiaEZDtJb9Ei+1LlBs= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20200822124328-c89045814202 h1:VvcQYSHwXgi7W+TpUR6A9g6Up98WAHf3f/ulnJ62IyA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -234,6 +266,15 @@ golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3 golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262 h1:qsl9y/CJx34tuA7QCPNp86JNJe4spst6Ff8MjvPUdPg= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5 h1:hKsoRgsbwY1NafxrwTs+k64bikrLBkAgPir1TNCj3Zs= +golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20201120032337-6d151481565c h1:IXtuZap6vTKIQ3jemmcwf2gY4BT+lwfZHBYwxMGe5/k= +golang.org/x/tools v0.0.0-20201120032337-6d151481565c/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= @@ -263,6 +304,7 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= @@ -273,6 +315,8 @@ grpc.go4.org v0.0.0-20170609214715-11d0a25b4919/go.mod h1:77eQGdRu53HpSqPFJFmuJd honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.1-2019.2.3 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXeM= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q= diff --git a/hack/gen_common/main.go b/hack/gen_common/main.go index 2e7cd44..ca62958 100644 --- a/hack/gen_common/main.go +++ b/hack/gen_common/main.go @@ -14,7 +14,7 @@ import ( _ "github.com/pipeproxy/pipe/init" "github.com/pipeproxy/pipe/components/common/types" - "github.com/pipeproxy/pipe/internal/logger" + "github.com/wzshiming/logger" ) //go:generate ../../bin/go-bindata --nomemcopy --pkg main -o template.go ./template.go.tpl @@ -25,7 +25,7 @@ func main() { g := newGen(t) err := g.Write() if err != nil { - logger.Errorln(err) + logger.Log.Error(err, "write file") } } } @@ -44,7 +44,7 @@ func (g *gen) data() interface{} { imports := map[string]struct{}{} dep := []string{ "github.com/pipeproxy/pipe/components/common/register", - "github.com/pipeproxy/pipe/internal/logger", + "github.com/wzshiming/logger", "github.com/pipeproxy/pipe/internal/ctxcache", "context", } @@ -142,7 +142,7 @@ func (g *gen) Write() error { if err == nil { src = newSrc } else { - logger.Errorln(err) + logger.Log.Error(err, "format source code") } file := filepath.Join(g.typ.PkgPath(), strings.ToLower(g.typ.Name()), "init.go") diff --git a/hack/gen_common/template.go b/hack/gen_common/template.go index 7edb7c0..ba5f051 100644 --- a/hack/gen_common/template.go +++ b/hack/gen_common/template.go @@ -68,7 +68,7 @@ func (fi bindataFileInfo) Sys() interface{} { return nil } -var _templateGoTpl = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x56\xd1\x6e\xe2\x38\x14\x7d\xb6\xbf\xe2\x36\x62\x57\x49\x95\xba\xef\x48\x3c\x54\xb0\x5b\x55\xda\xa5\xa8\x5b\x6d\x1f\xaa\x8a\x46\x89\x13\x32\x80\xcd\x24\x66\x86\xca\xca\xbf\x8f\xae\x6d\xc0\x40\x80\x52\xcd\x13\xe6\xda\xc7\xf7\xf8\x1c\xe3\xc3\xed\x2d\x0c\x1e\x61\xf8\xf8\x0c\x7f\x0d\x1e\x9e\xaf\xa0\x2f\x33\x0e\x05\x17\xbc\x4a\x14\xcf\x18\x5d\x24\xe9\x34\x29\x38\x68\x0d\x6c\x34\x2d\x86\xc9\x9c\x43\xd3\x50\x5a\xce\x17\xb2\x52\x10\x52\xa2\x35\x54\x89\x28\x38\xb0\x07\x53\xab\x71\x9e\x68\x7d\x03\xec\x6e\x56\x26\xf8\x15\x02\x07\x1f\x25\x6a\x02\x4d\x13\x18\x14\x17\x19\x2e\x8d\x28\xcd\x97\x22\x85\x52\x94\x2a\x8c\x40\x53\x52\xf1\xa2\xac\x15\xaf\xd8\x93\x1b\x84\x41\xc5\xf3\x20\x86\x21\xff\x89\x1b\x3d\x7f\x2c\x90\xc4\x13\xcf\x5f\x4a\x35\xe9\x4b\x91\x97\x45\xd4\x0a\xcb\x5a\x60\x83\xf3\x30\x21\x05\x0f\x62\x10\x3b\xb8\xa1\x14\x3c\xa2\x0d\xa5\x5a\x43\xc7\xd4\xba\xbd\xcd\xa4\x29\x8e\xa6\x85\xa9\xe1\x27\x6a\xa4\x70\xce\xf6\x81\x5a\x55\xcb\x54\xe1\xe9\x8c\x84\xb5\xaa\x4a\x51\x50\x32\xe0\x39\xac\xb5\x85\xa6\x61\x5e\x3f\x78\xff\x56\x4b\xd1\x0d\x62\x39\x2f\x15\x9f\x2f\xd4\x47\xf0\x8e\xed\x8d\x58\x27\x94\x08\x53\xb5\x82\x54\x0a\xc5\x57\x8a\xf5\xed\x67\x8c\x85\x1c\xae\xdd\xa1\x8f\x75\xd4\x94\x48\x3c\xc1\x9f\x5e\x51\x53\x62\x28\x77\xcd\x16\x0c\x87\x31\x25\x48\xbc\x0b\xb6\x34\xe0\x39\x56\xfa\x6a\x85\x15\xb5\x8a\x29\x69\x50\x56\xb5\xac\x04\xc8\x23\x94\x07\xbf\x8f\xb2\xeb\xe4\x55\x47\x4b\x85\x5b\xc6\x1e\xe5\x0d\xd5\x68\x43\xe8\x10\x70\xc8\x41\x6c\xcd\x8a\x21\xe3\xf9\x11\x1a\xa7\xe8\x95\xb9\x01\xf6\x7a\x20\xca\x19\x16\x5a\x08\xe3\xdd\x42\xd5\x28\x99\xc7\x20\xa7\xe8\x41\xaa\x56\x69\x92\x4e\x38\xbb\xe7\xaa\x8f\x03\x27\x17\xf2\x42\xae\x91\xd9\xf9\x4a\x4e\xcf\x6c\x49\x6a\x25\x2b\x1e\xc3\x18\x37\x9d\xb3\x7f\x64\x92\x3d\x56\xff\x61\x2d\x0c\xda\x49\x07\x31\xcc\x93\xc5\xab\x3d\xf5\x5b\xfb\x1a\xdd\x44\x6e\x67\x16\x9e\x5d\x1c\xbd\xa2\x8c\x6f\xd0\x43\x21\x36\x7e\xe1\xb8\xc5\x8a\x7b\xfe\x49\x2b\x92\xe5\x4c\xd5\x5f\xf0\xe3\x42\x85\x9d\xc0\x4e\x45\x8b\xb4\x32\x1e\xd5\x2f\xa2\xc4\x43\x12\xb9\x86\x5d\xa8\x17\x62\xbd\x6d\xb6\xbf\x28\x42\x48\x03\x00\x94\xa0\xbd\x78\x69\xec\x15\xb3\x82\x5c\x1d\xdc\xb3\xf5\x94\xb9\x0d\x33\x59\x14\xbc\x62\x2f\x49\x25\x72\x73\x80\xce\xb6\x7f\x67\xad\xd2\x1f\xdf\xa1\xac\x41\x48\x85\xd8\x52\xf0\x2c\xb0\xf2\x47\x6d\x3f\x36\x73\xd1\x1a\x4a\x7f\x24\xd5\x7e\x19\xc6\xfb\xeb\xec\x9b\xb8\x5f\x76\xaf\xa3\x5e\x5f\x87\xc3\x87\x37\xbc\xec\x01\x58\x73\xda\x66\xd3\xbf\x5c\x4d\x64\x66\xb2\xc9\xb4\x08\xc7\xde\x81\xcd\xd3\x6e\xf0\x7f\x2f\x45\xea\x32\x2e\xb4\x21\xe6\xf0\x77\x55\x51\xc3\x0d\x26\x1b\x19\xfb\x9d\x62\xbb\x0a\xb3\xcc\xcc\x46\xb0\x8b\x7b\xe2\xb5\xb1\xc5\x42\xb5\x86\x32\x07\xf6\x7f\x32\x5b\x5a\xf2\x1a\x98\x6b\x87\x63\x3e\xab\xcd\xd0\x74\xb0\xf1\x78\xba\x97\xde\x31\x34\x0c\xd4\xa4\xac\xad\x75\x82\x83\x34\xaf\x55\x8b\xbf\x78\x41\xb7\xca\xac\x19\xda\xd4\x3e\xce\xaf\x67\xbe\xf9\x53\x2e\xc0\xbd\x2c\x77\x56\x50\x93\x87\xae\x66\x2d\xf7\x2d\xbb\x3c\x0b\x29\xa6\x0b\xec\xbf\x09\x67\x1c\x96\x70\xed\x1d\xfa\xf3\xfe\x9a\xbf\x2e\x9e\x2b\x5f\xb6\xfa\xa4\x6f\x4e\xea\xad\xfa\x56\xba\x1d\xe3\x3b\xde\x9b\x28\x59\x1f\x13\x4d\xba\x38\x93\x26\xcb\xd8\x57\xce\x74\x40\xc7\xb7\xeb\x57\x00\x00\x00\xff\xff\x18\x93\xbd\x8b\x10\x0a\x00\x00" +var _templateGoTpl = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x56\x41\x6f\xea\x38\x10\x3e\xdb\xbf\x62\x1a\xa1\x55\xf2\x94\xfa\x69\xaf\x48\x1c\x9e\x60\x5f\x55\xa9\x4b\x51\xb7\xea\x1e\xaa\x8a\x46\x89\x13\xb2\x10\x1b\x25\x66\x97\xca\xca\x7f\x5f\x8d\x6d\xc0\x40\x80\x52\xbd\x13\x66\xec\x99\xf9\xe6\xfb\x86\x19\xbe\x7f\x87\xd1\x23\x8c\x1f\x9f\xe1\x8f\xd1\xfd\xf3\x0d\x0c\x65\xc6\xa1\xe0\x82\xd7\x89\xe2\x19\xa3\xcb\x24\x9d\x27\x05\x07\xad\x81\x4d\xe6\xc5\x38\xa9\x38\xb4\x2d\xa5\x65\xb5\x94\xb5\x82\x90\x12\xad\xa1\x4e\x44\xc1\x81\xdd\x1b\x5b\x83\xf7\x44\xeb\x5b\x60\x3f\x16\x65\x82\x5f\x21\x70\xee\x93\x44\xcd\xa0\x6d\x03\xe3\xc5\x45\x86\x4f\x23\x4a\xf3\x95\x48\xa1\x14\xa5\x0a\x23\xd0\x94\xd4\xbc\x28\x1b\xc5\x6b\xf6\xe4\x0e\x61\x50\xf3\x3c\x88\x61\xcc\xff\xc3\x40\xcf\x1f\x4b\x04\xf1\xc4\xf3\xbf\x4b\x35\x1b\x4a\x91\x97\x45\xd4\xe9\x96\x75\xb8\x8d\x2e\xbb\x09\x29\x78\x10\x83\xd8\xf3\x1b\x4b\xc1\x23\xda\x52\xaa\x35\xf4\x8c\xad\x3f\xd8\x5e\x1a\xe3\x64\x5e\x18\x1b\x7e\x22\x47\x0a\xef\x6c\x1e\x68\x54\xbd\x4a\x15\x56\x67\x28\x6c\x54\x5d\x8a\x82\x92\x11\xcf\x61\xc3\x2d\xb4\x2d\xf3\xf2\xc1\xfb\x3f\x8d\x14\xfd\x20\x96\x55\xa9\x78\xb5\x54\x1f\xc1\x3b\xa6\x37\x64\x9d\x61\x22\x4c\xd5\x1a\x52\x29\x14\x5f\x2b\x36\xb4\x9f\x31\x1a\x72\xf8\xe6\x8a\x3e\x95\x51\x53\x22\xb1\x82\xdf\x3c\xa3\xa6\xc4\x40\xee\x9b\x10\x0c\x8f\x31\x25\x08\xbc\x0f\xd6\x34\xe2\x39\x5a\x86\x6a\x8d\x16\xb5\x8e\x29\x69\x91\x56\xb5\xaa\x05\xc8\x13\x90\x47\xbf\x0e\xb2\xcb\xe4\x59\x27\x2b\x85\x21\x63\x0f\xf2\x16\x6a\xb4\x05\x74\xec\x70\x8c\x41\xec\xc4\x8a\x21\xe3\xf9\x09\x18\xe7\xe0\x95\xb9\x71\x1c\x0c\x40\x94\x0b\x34\x74\x00\xc6\xde\x42\xd6\x28\xa9\x62\x90\x73\xd4\x20\x55\xeb\x34\x49\x67\x9c\xdd\x71\x35\xc4\x83\xa3\x0b\x71\x21\xd6\xc8\x44\xbe\x91\xf3\x0b\x21\x49\xa3\x64\xcd\x63\x98\x62\xd0\x8a\x3d\xc8\x24\x7b\xac\xff\x42\x5b\x18\x74\x83\x0e\x62\xa8\x92\xe5\xab\xad\xfa\xad\xfb\x8d\x6e\x23\x17\x99\x85\x17\x1f\x47\xaf\x48\xe3\x1b\x0c\x90\x88\xad\x5e\x78\xee\x90\xe2\x8e\x7f\x52\x8a\x64\xb5\x50\xcd\x17\xf4\xb8\x92\x61\x47\xb0\x63\xd1\x7a\x5a\x1a\x4f\xf2\x17\x51\xe2\x79\x12\xb9\x71\xbb\x92\x2f\xf4\xf5\xc2\xec\x7e\x51\x84\x90\x16\x00\x28\x41\x79\xb1\x69\x6c\x8b\x59\x42\x6e\x8e\xfa\x6c\x73\x65\xba\x61\x21\x8b\x82\xd7\xec\x67\x2d\x2b\xbf\x54\xf6\x12\xde\xfe\x1e\xb1\x7b\x91\x4b\x53\x56\x6f\x87\xaa\xb7\xe1\xae\x6c\x40\x48\x85\xe1\x4a\xc1\xb3\x20\x86\x00\x61\x06\x56\x99\xa8\xeb\x77\x68\x7a\xb0\xa5\xf4\xdf\xa4\x3e\x34\xc3\xf4\xf0\x9d\x1d\x97\x87\x66\x37\x38\xf5\xa6\x53\x8e\x67\x72\x78\xdd\x6c\xd8\x60\xda\xad\xad\x3f\xb9\x9a\xc9\xcc\xac\x2d\x93\x22\x9c\x7a\x55\x9b\xa9\x6f\xfc\x7f\xae\x44\xea\xd6\x5f\x68\xf7\x9b\xf3\xff\x51\x17\x0d\xdc\xe2\xd2\x23\x53\x3f\x53\x6c\x5f\xe1\x9a\x33\xb7\x11\xec\xfb\x3d\xf1\xc6\x28\x66\x5d\xb5\x86\x32\x07\xf6\x92\x2c\x56\x16\xbc\x06\xe6\xd2\xe1\x99\x2f\x1a\x73\x34\x19\xec\xe6\x3c\x9f\x4b\x6f\xb5\x7e\x90\xc5\x9e\xbc\x6a\x56\x36\x56\x4c\xc1\x41\x9a\x91\xd6\x21\x37\x76\xf1\x8e\xa3\x0d\x56\xbb\xda\x4f\x23\x1d\x98\x6f\xfe\x95\xdb\xf2\xde\xc2\x77\xa2\x50\xb3\x34\x9d\xcd\x8a\xef\x8b\x77\xfd\xc2\xa4\xb8\x82\xe0\x70\x70\x5c\xd0\x5a\xc2\x37\xaf\xe8\xcf\x2b\x6d\xfe\xdf\x78\xfa\x7c\x59\xf4\xb3\x0a\x3a\xaa\x77\xec\x5b\xea\xf6\x5a\xa0\xe7\x0d\x4e\xc9\x86\xb8\xf6\xa4\xdb\x79\xd2\x2c\x3c\xf6\x95\x9a\x8e\xe0\xf8\x72\xfd\x1f\x00\x00\xff\xff\x2b\x66\xdd\x35\x35\x0a\x00\x00" func templateGoTplBytes() ([]byte, error) { return bindataRead( @@ -83,7 +83,7 @@ func templateGoTpl() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "template.go.tpl", size: 2576, mode: os.FileMode(420), modTime: time.Unix(1601363058, 0)} + info := bindataFileInfo{name: "template.go.tpl", size: 2613, mode: os.FileMode(420), modTime: time.Unix(1605877639, 0)} a := &asset{bytes: bytes, info: info} return a, nil } diff --git a/hack/gen_common/template.go.tpl b/hack/gen_common/template.go.tpl index 32693b6..fab8a40 100644 --- a/hack/gen_common/template.go.tpl +++ b/hack/gen_common/template.go.tpl @@ -63,7 +63,7 @@ func {{ .Type }}Get(ctx context.Context, name string, defaults {{ .Pkg }}.{{ .Ty if defaults != nil { return defaults } - logger.Warnf("{{ $Pkg }}.{{ $Type }} %q is not defined", name) + logger.FromContext(ctx).V(-1).Info("{{ $Pkg }}.{{ $Type }} is not defined", "name", name) return {{ .Type }}None } @@ -85,7 +85,7 @@ func (_{{ $Type }}None) {{ .FuncName }}( {{ if .Value }} {{ .Name }} {{ else }} _ {{ end }} {{ .Type }}, {{- end -}} ) { - logger.Warn("this is none of {{ $Pkg }}.{{ $Type }}") + logger.Log.V(-1).Info("this is none of {{ $Pkg }}.{{ $Type }}") {{ range .Results }} {{ if .Value }} {{ .Name }} = {{ .Value }} {{ end }} {{ end }} diff --git a/internal/logger/file.go b/internal/log/file.go similarity index 57% rename from internal/logger/file.go rename to internal/log/file.go index a9ca8a1..678df83 100644 --- a/internal/logger/file.go +++ b/internal/log/file.go @@ -1,18 +1,34 @@ -package logger +package log import ( "io" - "log" "os" "path/filepath" + + "github.com/wzshiming/logger" ) +var outfile = map[string]io.WriteCloser{ + "/dev/stdout": nopCloser{os.Stdout}, + "/dev/stderr": nopCloser{os.Stderr}, + "/dev/null": emptyWriter{}, + "stdout": nopCloser{os.Stdout}, + "stderr": nopCloser{os.Stderr}, + "null": emptyWriter{}, + "": emptyWriter{}, +} + type fileLogger struct { file io.WriteCloser path string } -func newFileLogger(file string) (*fileLogger, error) { +func NewFile(file string) (io.WriteCloser, error) { + f, ok := outfile[file] + if ok { + return f, nil + } + if file != "" { abs, err := filepath.Abs(file) if err != nil { @@ -28,24 +44,19 @@ func newFileLogger(file string) (*fileLogger, error) { l := &fileLogger{ path: file, } - f, ok := outfile[file] - if ok { - l.file = f - } else { - log.Printf("open log file: %s", l.path) - f, err := openAppendFile(l.path) - if err != nil { - return nil, err - } - l.file = f + + f, err = openAppendFile(l.path) + if err != nil { + return nil, err } + l.file = f + return l, nil } func (l *fileLogger) Close() error { old := l.file - - log.Printf("close log file: %s", l.path) + logger.Log.V(1).Info("close log file: %s", l.path) return old.Close() } diff --git a/internal/log/log.go b/internal/log/log.go new file mode 100644 index 0000000..d92d4b7 --- /dev/null +++ b/internal/log/log.go @@ -0,0 +1,36 @@ +package log + +import ( + "io" + + "github.com/go-logr/logr" + "github.com/wzshiming/logger" + "github.com/wzshiming/logger/zap" +) + +var loggerFiles = map[string]logr.Logger{} + +func init() { + l, _ := NewLogFromFile("stderr") + logger.SetLogger(l) +} + +func NewLogFromFile(file string) (logr.Logger, error) { + l, ok := loggerFiles[file] + if ok { + return l, nil + } + + f, err := NewFile(file) + if err != nil { + return nil, err + } + + l = NewLog(f) + loggerFiles[file] = l + return l, nil +} + +func NewLog(w io.Writer) logr.Logger { + return zap.New(zap.WriteTo(w), zap.UseDevMode(true)) +} diff --git a/internal/logger/util.go b/internal/log/util.go similarity index 95% rename from internal/logger/util.go rename to internal/log/util.go index 3c2341e..9ed119d 100644 --- a/internal/logger/util.go +++ b/internal/log/util.go @@ -1,4 +1,4 @@ -package logger +package log import ( "io" diff --git a/internal/logger/logger.go b/internal/logger/logger.go deleted file mode 100644 index 528c758..0000000 --- a/internal/logger/logger.go +++ /dev/null @@ -1,203 +0,0 @@ -package logger - -import ( - "fmt" - "io" - "log" - "os" -) - -var outfile = map[string]io.WriteCloser{ - "/dev/stdout": nopCloser{os.Stdout}, - "/dev/stderr": nopCloser{os.Stderr}, - "/dev/null": emptyWriter{}, - "": emptyWriter{}, -} - -var loggerFiles = map[string]*fileLogger{} - -func NewLogger(file string) (Logger, error) { - l, ok := loggerFiles[file] - if ok { - return newWrapLogger(l, 2), nil - } - - l, err := newFileLogger(file) - if err != nil { - return nil, err - } - loggerFiles[file] = l - return newWrapLogger(l, 2), nil - -} - -type wrapLogger struct { - io.WriteCloser - *log.Logger - depth int -} - -func newWrapLogger(writeCloser io.WriteCloser, depth int) *wrapLogger { - return &wrapLogger{ - WriteCloser: writeCloser, - Logger: log.New(writeCloser, "", log.LstdFlags), - depth: depth, - } -} - -// Info calls Output to print to the standard logger. -// Arguments are handled in the manner of fmt.Print. -func (w *wrapLogger) Info(v ...interface{}) { - w.Output(w.depth, "[INFO] "+fmt.Sprint(v...)) -} - -// Infof calls Output to print to the standard logger. -// Arguments are handled in the manner of fmt.Printf. -func (w *wrapLogger) Infof(format string, v ...interface{}) { - w.Output(w.depth, "[INFO] "+fmt.Sprintf(format, v...)) -} - -// Infoln calls Output to print to the standard logger. -// Arguments are handled in the manner of fmt.Println. -func (w *wrapLogger) Infoln(v ...interface{}) { - w.Output(w.depth, "[INFO] "+fmt.Sprintln(v...)) -} - -// Error calls Output to print to the standard logger. -// Arguments are handled in the manner of fmt.Print. -func (w *wrapLogger) Error(v ...interface{}) { - w.Output(w.depth, "[ERROR] "+fmt.Sprint(v...)) -} - -// Errorf calls Output to print to the standard logger. -// Arguments are handled in the manner of fmt.Printf. -func (w *wrapLogger) Errorf(format string, v ...interface{}) { - w.Output(w.depth, "[ERROR] "+fmt.Sprintf(format, v...)) -} - -// Errorln calls Output to print to the standard logger. -// Arguments are handled in the manner of fmt.Println. -func (w *wrapLogger) Errorln(v ...interface{}) { - w.Output(w.depth, "[ERROR] "+fmt.Sprintln(v...)) -} - -// Warn calls Output to print to the standard logger. -// Arguments are handled in the manner of fmt.Print. -func (w *wrapLogger) Warn(v ...interface{}) { - w.Output(w.depth, "[WARN] "+fmt.Sprint(v...)) -} - -// Warnf calls Output to print to the standard logger. -// Arguments are handled in the manner of fmt.Printf. -func (w *wrapLogger) Warnf(format string, v ...interface{}) { - w.Output(w.depth, "[WARN] "+fmt.Sprintf(format, v...)) -} - -// Warnln calls Output to print to the standard logger. -// Arguments are handled in the manner of fmt.Println. -func (w *wrapLogger) Warnln(v ...interface{}) { - w.Output(w.depth, "[WARN] "+fmt.Sprintln(v...)) -} - -// Fatal calls Output to print to the standard logger. -// Arguments are handled in the manner of fmt.Print. -func (w *wrapLogger) Fatal(v ...interface{}) { - w.Output(w.depth, "[FATAL] "+fmt.Sprint(v...)) - os.Exit(1) -} - -// Fatalf calls Output to print to the standard logger. -// Arguments are handled in the manner of fmt.Printf. -func (w *wrapLogger) Fatalf(format string, v ...interface{}) { - w.Output(w.depth, "[FATAL] "+fmt.Sprintf(format, v...)) - os.Exit(1) -} - -// Fatalln calls Output to print to the standard logger. -// Arguments are handled in the manner of fmt.Println. -func (w *wrapLogger) Fatalln(v ...interface{}) { - w.Output(w.depth, "[FATAL] "+fmt.Sprintln(v...)) - os.Exit(1) -} - -// Todo calls Output to print to the standard logger. -// Arguments are handled in the manner of fmt.Print. -func (w *wrapLogger) Todo(v ...interface{}) { - w.Output(w.depth, "[TODO] "+fmt.Sprint(v...)) -} - -// Todof calls Output to print to the standard logger. -// Arguments are handled in the manner of fmt.Printf. -func (w *wrapLogger) Todof(format string, v ...interface{}) { - w.Output(w.depth, "[TODO] "+fmt.Sprintf(format, v...)) -} - -// Todoln calls Output to print to the standard logger. -// Arguments are handled in the manner of fmt.Println. -func (w *wrapLogger) Todoln(v ...interface{}) { - w.Output(w.depth, "[TODO] "+fmt.Sprintln(v...)) -} - -type Logger interface { - io.WriteCloser - - // Info calls Output to print to the standard logger. - // Arguments are handled in the manner of fmt.Print. - Info(v ...interface{}) - - // Infof calls Output to print to the standard logger. - // Arguments are handled in the manner of fmt.Printf. - Infof(format string, v ...interface{}) - - // Infoln calls Output to print to the standard logger. - // Arguments are handled in the manner of fmt.Println. - Infoln(v ...interface{}) - - // Error calls Output to print to the standard logger. - // Arguments are handled in the manner of fmt.Print. - Error(v ...interface{}) - - // Errorf calls Output to print to the standard logger. - // Arguments are handled in the manner of fmt.Printf. - Errorf(format string, v ...interface{}) - - // Errorln calls Output to print to the standard logger. - // Arguments are handled in the manner of fmt.Println. - Errorln(v ...interface{}) - - // Warn calls Output to print to the standard logger. - // Arguments are handled in the manner of fmt.Print. - Warn(v ...interface{}) - - // Warnf calls Output to print to the standard logger. - // Arguments are handled in the manner of fmt.Printf. - Warnf(format string, v ...interface{}) - - // Warnln calls Output to print to the standard logger. - // Arguments are handled in the manner of fmt.Println. - Warnln(v ...interface{}) - - // Fatal calls Output to print to the standard logger. - // Arguments are handled in the manner of fmt.Print. - Fatal(v ...interface{}) - - // Fatalf calls Output to print to the standard logger. - // Arguments are handled in the manner of fmt.Printf. - Fatalf(format string, v ...interface{}) - - // Fatalln calls Output to print to the standard logger. - // Arguments are handled in the manner of fmt.Println. - Fatalln(v ...interface{}) - - // Todo calls Output to print to the standard logger. - // Arguments are handled in the manner of fmt.Print. - Todo(v ...interface{}) - - // Todof calls Output to print to the standard logger. - // Arguments are handled in the manner of fmt.Printf. - Todof(format string, v ...interface{}) - - // Todoln calls Output to print to the standard logger. - // Arguments are handled in the manner of fmt.Println. - Todoln(v ...interface{}) -} diff --git a/internal/logger/std.go b/internal/logger/std.go deleted file mode 100644 index 258147a..0000000 --- a/internal/logger/std.go +++ /dev/null @@ -1,103 +0,0 @@ -package logger - -import ( - "log" - "os" -) - -var std = newWrapLogger(nopCloser{os.Stderr}, 3) - -func Debug() { - std.Logger.SetFlags(std.Logger.Flags() | log.Llongfile) - log.SetFlags(log.Flags() | log.Llongfile) -} - -// Info calls Output to print to the standard logger. -// Arguments are handled in the manner of fmt.Print. -func Info(v ...interface{}) { - std.Info(v...) -} - -// Infof calls Output to print to the standard logger. -// Arguments are handled in the manner of fmt.Printf. -func Infof(format string, v ...interface{}) { - std.Infof(format, v...) -} - -// Infoln calls Output to print to the standard logger. -// Arguments are handled in the manner of fmt.Println. -func Infoln(v ...interface{}) { - std.Infoln(v...) -} - -// Error calls Output to print to the standard logger. -// Arguments are handled in the manner of fmt.Print. -func Error(v ...interface{}) { - std.Error(v...) -} - -// Errorf calls Output to print to the standard logger. -// Arguments are handled in the manner of fmt.Printf. -func Errorf(format string, v ...interface{}) { - std.Errorf(format, v...) -} - -// Errorln calls Output to print to the standard logger. -// Arguments are handled in the manner of fmt.Println. -func Errorln(v ...interface{}) { - std.Errorln(v...) -} - -// Warn calls Output to print to the standard logger. -// Arguments are handled in the manner of fmt.Print. -func Warn(v ...interface{}) { - std.Warn(v...) -} - -// Warnf calls Output to print to the standard logger. -// Arguments are handled in the manner of fmt.Printf. -func Warnf(format string, v ...interface{}) { - std.Warnf(format, v...) -} - -// Warnln calls Output to print to the standard logger. -// Arguments are handled in the manner of fmt.Println. -func Warnln(v ...interface{}) { - std.Warnln(v...) -} - -// Fatal calls Output to print to the standard logger. -// Arguments are handled in the manner of fmt.Print. -func Fatal(v ...interface{}) { - std.Fatal(v...) -} - -// Fatalf calls Output to print to the standard logger. -// Arguments are handled in the manner of fmt.Printf. -func Fatalf(format string, v ...interface{}) { - std.Fatalf(format, v...) -} - -// Fatalln calls Output to print to the standard logger. -// Arguments are handled in the manner of fmt.Println. -func Fatalln(v ...interface{}) { - std.Fatalln(v...) -} - -// Todo calls Output to print to the standard logger. -// Arguments are handled in the manner of fmt.Print. -func Todo(v ...interface{}) { - std.Todo(v...) -} - -// Todof calls Output to print to the standard logger. -// Arguments are handled in the manner of fmt.Printf. -func Todof(format string, v ...interface{}) { - std.Todof(format, v...) -} - -// Todoln calls Output to print to the standard logger. -// Arguments are handled in the manner of fmt.Println. -func Todoln(v ...interface{}) { - std.Todoln(v...) -}