diff --git a/core/log.go b/core/log.go deleted file mode 100644 index e574c374..00000000 --- a/core/log.go +++ /dev/null @@ -1,24 +0,0 @@ -package core - -import ( - "fmt" - "log" -) - -func init() { - log.SetFlags(log.LstdFlags | log.Lshortfile) -} - -// LogLogger uses the standard log package as the logger -type LogLogger struct { -} - -// Log uses the standard log library log.Output -func (l *LogLogger) Log(v ...interface{}) { - log.Output(3, fmt.Sprintln(v...)) -} - -// Logf uses the standard log library log.Output -func (l *LogLogger) Logf(format string, v ...interface{}) { - log.Output(3, fmt.Sprintf(format, v...)) -} \ No newline at end of file diff --git a/core/server.go b/core/server.go index 96da0615..2156f525 100644 --- a/core/server.go +++ b/core/server.go @@ -8,7 +8,7 @@ import ( "net" "time" - "github.com/go-log/log" + log "github.com/sirupsen/logrus" ) // Server is a proxy server. @@ -55,7 +55,7 @@ func (s *Server) Serve(ctx context.Context, h Handler) error { if max := 1 * time.Second; tempDelay > max { tempDelay = max } - log.Logf("server: Accept error: %v; retrying in %v", e, tempDelay) + log.Warnf("server: Accept error: %v; retrying in %v", e, tempDelay) time.Sleep(tempDelay) continue } diff --git a/core/socks.go b/core/socks.go index 21173237..6d78c3b2 100644 --- a/core/socks.go +++ b/core/socks.go @@ -12,7 +12,7 @@ import ( "time" "github.com/ginuerzh/gosocks5" - "github.com/go-log/log" + log "github.com/sirupsen/logrus" ) type clientSelector struct { @@ -22,7 +22,7 @@ type clientSelector struct { func (selector *clientSelector) Methods() []uint8 { if util.Debug { - log.Log("[socks5] methods:", selector.methods) + log.Debug("[socks5] methods:", selector.methods) } return selector.methods } @@ -37,7 +37,7 @@ func (selector *clientSelector) Select(methods ...uint8) (method uint8) { func (selector *clientSelector) OnSelected(method uint8, conn net.Conn) (net.Conn, error) { if util.Debug { - log.Log("[socks5] method selected:", method) + log.Debug("[socks5] method selected:", method) } switch method { case gosocks5.MethodUserPass: @@ -49,19 +49,19 @@ func (selector *clientSelector) OnSelected(method uint8, conn net.Conn) (net.Con req := gosocks5.NewUserPassRequest(gosocks5.UserPassVer, username, password) if err := req.Write(conn); err != nil { - log.Log("[socks5]", err) + log.Debug("[socks5]", err) return nil, err } if util.Debug { - log.Log("[socks5]", req) + log.Debug("[socks5]", req) } resp, err := gosocks5.ReadUserPassResponse(conn) if err != nil { - log.Log("[socks5]", err) + log.Debug("[socks5]", err) return nil, err } if util.Debug { - log.Log("[socks5]", resp) + log.Debug("[socks5]", resp) } if resp.Status != gosocks5.Succeeded { return nil, gosocks5.ErrAuthFailure @@ -89,7 +89,7 @@ func (selector *serverSelector) AddMethod(methods ...uint8) { func (selector *serverSelector) Select(methods ...uint8) (method uint8) { if util.Debug { - log.Logf("[socks5] %d %d %v", gosocks5.Ver5, len(methods), methods) + log.Debugf("[socks5] %d %d %v", gosocks5.Ver5, len(methods), methods) } method = gosocks5.MethodNoAuth // when Authenticator is set, auth is mandatory @@ -104,39 +104,39 @@ func (selector *serverSelector) Select(methods ...uint8) (method uint8) { func (selector *serverSelector) OnSelected(method uint8, conn net.Conn) (net.Conn, error) { if util.Debug { - log.Logf("[socks5] %d %d", gosocks5.Ver5, method) + log.Debugf("[socks5] %d %d", gosocks5.Ver5, method) } switch method { case gosocks5.MethodUserPass: req, err := gosocks5.ReadUserPassRequest(conn) if err != nil { - log.Logf("[socks5] %s - %s: %s", conn.RemoteAddr(), conn.LocalAddr(), err) + log.Debugf("[socks5] %s - %s: %s", conn.RemoteAddr(), conn.LocalAddr(), err) return nil, err } if util.Debug { - log.Logf("[socks5] %s - %s: %s", conn.RemoteAddr(), conn.LocalAddr(), req.String()) + log.Debugf("[socks5] %s - %s: %s", conn.RemoteAddr(), conn.LocalAddr(), req.String()) } if selector.Authenticator != nil && !selector.Authenticator.Authenticate(req.Username, req.Password) { resp := gosocks5.NewUserPassResponse(gosocks5.UserPassVer, gosocks5.Failure) if err := resp.Write(conn); err != nil { - log.Logf("[socks5] %s - %s: %s", conn.RemoteAddr(), conn.LocalAddr(), err) + log.Debugf("[socks5] %s - %s: %s", conn.RemoteAddr(), conn.LocalAddr(), err) return nil, err } if util.Debug { - log.Logf("[socks5] %s - %s: %s", conn.RemoteAddr(), conn.LocalAddr(), resp) + log.Debugf("[socks5] %s - %s: %s", conn.RemoteAddr(), conn.LocalAddr(), resp) } - log.Logf("[socks5] %s - %s: proxy authentication required", conn.RemoteAddr(), conn.LocalAddr()) + log.Debugf("[socks5] %s - %s: proxy authentication required", conn.RemoteAddr(), conn.LocalAddr()) return nil, gosocks5.ErrAuthFailure } resp := gosocks5.NewUserPassResponse(gosocks5.UserPassVer, gosocks5.Succeeded) if err := resp.Write(conn); err != nil { - log.Logf("[socks5] %s - %s: %s", conn.RemoteAddr(), conn.LocalAddr(), err) + log.Debugf("[socks5] %s - %s: %s", conn.RemoteAddr(), conn.LocalAddr(), err) return nil, err } if util.Debug { - log.Logf("[socks5] %s - %s: %s", conn.RemoteAddr(), conn.LocalAddr(), resp) + log.Debugf("[socks5] %s - %s: %s", conn.RemoteAddr(), conn.LocalAddr(), resp) } case gosocks5.MethodNoAcceptable: return nil, gosocks5.ErrBadMethod @@ -192,7 +192,7 @@ func (c *socks5Connector) ConnectContext(ctx context.Context, conn net.Conn, net } if util.Debug { - log.Log("[socks5]", req) + log.Debug("[socks5]", req) } reply, err := gosocks5.ReadReply(conn) @@ -201,7 +201,7 @@ func (c *socks5Connector) ConnectContext(ctx context.Context, conn net.Conn, net } if util.Debug { - log.Log("[socks5]", reply) + log.Debug("[socks5]", reply) } if reply.Rep != gosocks5.Succeeded { @@ -272,13 +272,13 @@ func (h *socks5Handler) Handle(conn net.Conn) { conn = gosocks5.ServerConn(conn, h.selector) req, err := gosocks5.ReadRequest(conn) if err != nil { - log.Logf("[socks5] %s -> %s : %s", + log.Debugf("[socks5] %s -> %s : %s", conn.RemoteAddr(), conn.LocalAddr(), err) return } if util.Debug { - log.Logf("[socks5] %s -> %s\n%s", + log.Debugf("[socks5] %s -> %s\n%s", conn.RemoteAddr(), conn.LocalAddr(), req) } switch req.Cmd { @@ -292,7 +292,7 @@ func (h *socks5Handler) Handle(conn net.Conn) { h.handleUDPTunnel(conn, req) default: - log.Logf("[socks5] %s - %s : Unrecognized request: %d", + log.Debugf("[socks5] %s - %s : Unrecognized request: %d", conn.RemoteAddr(), conn.LocalAddr(), req.Cmd) } } @@ -300,7 +300,7 @@ func (h *socks5Handler) Handle(conn net.Conn) { func (h *socks5Handler) handleConnect(conn net.Conn, req *gosocks5.Request) { host := req.Addr.String() - log.Logf("[socks5] %s -> %s -> %s", + log.Debugf("[socks5] %s -> %s -> %s", conn.RemoteAddr(), h.options.Node.String(), host) retries := 1 @@ -314,7 +314,7 @@ func (h *socks5Handler) handleConnect(conn net.Conn, req *gosocks5.Request) { for i := 0; i < retries; i++ { route, err = h.options.Chain.selectRouteFor(host) if err != nil { - log.Logf("[socks5] %s -> %s : %s", + log.Debugf("[socks5] %s -> %s : %s", conn.RemoteAddr(), conn.LocalAddr(), err) continue } @@ -326,13 +326,13 @@ func (h *socks5Handler) handleConnect(conn net.Conn, req *gosocks5.Request) { fmt.Fprintf(&buf, "%s -> ", nd.String()) } fmt.Fprintf(&buf, "%s", host) - log.Log("[route]", buf.String()) + log.Debug("[route]", buf.String()) cc, err = route.DialContext(context.Background(), "tcp", host) if err == nil { break } - log.Logf("[socks5] %s -> %s : %s", + log.Debugf("[socks5] %s -> %s : %s", conn.RemoteAddr(), conn.LocalAddr(), err) } @@ -340,7 +340,7 @@ func (h *socks5Handler) handleConnect(conn net.Conn, req *gosocks5.Request) { rep := gosocks5.NewReply(gosocks5.HostUnreachable, nil) rep.Write(conn) if util.Debug { - log.Logf("[socks5] %s <- %s\n%s", + log.Debugf("[socks5] %s <- %s\n%s", conn.RemoteAddr(), conn.LocalAddr(), rep) } return @@ -349,23 +349,23 @@ func (h *socks5Handler) handleConnect(conn net.Conn, req *gosocks5.Request) { rep := gosocks5.NewReply(gosocks5.Succeeded, nil) if err := rep.Write(conn); err != nil { - log.Logf("[socks5] %s <- %s : %s", + log.Debugf("[socks5] %s <- %s : %s", conn.RemoteAddr(), conn.LocalAddr(), err) return } if util.Debug { - log.Logf("[socks5] %s <- %s\n%s", + log.Debugf("[socks5] %s <- %s\n%s", conn.RemoteAddr(), conn.LocalAddr(), rep) } - log.Logf("[socks5] %s <-> %s", conn.RemoteAddr(), host) + log.Debugf("[socks5] %s <-> %s", conn.RemoteAddr(), host) transport(conn, cc) - log.Logf("[socks5] %s >-< %s", conn.RemoteAddr(), host) + log.Debugf("[socks5] %s >-< %s", conn.RemoteAddr(), host) } func (h *socks5Handler) handleBind(conn net.Conn, req *gosocks5.Request) { addr := req.Addr.String() - log.Logf("[socks5-bind] %s -> %s -> %s", + log.Debugf("[socks5-bind] %s -> %s -> %s", conn.RemoteAddr(), h.options.Node.String(), addr) if h.options.Chain.IsEmpty() { @@ -375,12 +375,12 @@ func (h *socks5Handler) handleBind(conn net.Conn, req *gosocks5.Request) { cc, err := h.options.Chain.Conn() if err != nil { - log.Logf("[socks5-bind] %s <- %s : %s", + log.Debugf("[socks5-bind] %s <- %s : %s", conn.RemoteAddr(), conn.LocalAddr(), err) reply := gosocks5.NewReply(gosocks5.Failure, nil) reply.Write(conn) if util.Debug { - log.Logf("[socks5-bind] %s <- %s\n%s", + log.Debugf("[socks5-bind] %s <- %s\n%s", conn.RemoteAddr(), conn.LocalAddr(), reply) } return @@ -391,16 +391,16 @@ func (h *socks5Handler) handleBind(conn net.Conn, req *gosocks5.Request) { // so we don't need to authenticate it, as it's as explicit as whitelisting defer cc.Close() req.Write(cc) - log.Logf("[socks5-bind] %s <-> %s", conn.RemoteAddr(), addr) + log.Debugf("[socks5-bind] %s <-> %s", conn.RemoteAddr(), addr) transport(conn, cc) - log.Logf("[socks5-bind] %s >-< %s", conn.RemoteAddr(), addr) + log.Debugf("[socks5-bind] %s >-< %s", conn.RemoteAddr(), addr) } func (h *socks5Handler) bindOn(conn net.Conn, addr string) { bindAddr, _ := net.ResolveTCPAddr("tcp", addr) ln, err := net.ListenTCP("tcp", bindAddr) // strict mode: if the port already in use, it will return error if err != nil { - log.Logf("[socks5-bind] %s -> %s : %s", + log.Debugf("[socks5-bind] %s -> %s : %s", conn.RemoteAddr(), conn.LocalAddr(), err) gosocks5.NewReply(gosocks5.Failure, nil).Write(conn) return @@ -411,16 +411,16 @@ func (h *socks5Handler) bindOn(conn net.Conn, addr string) { socksAddr.Host, _, _ = net.SplitHostPort(conn.LocalAddr().String()) reply := gosocks5.NewReply(gosocks5.Succeeded, socksAddr) if err := reply.Write(conn); err != nil { - log.Logf("[socks5-bind] %s <- %s : %s", + log.Debugf("[socks5-bind] %s <- %s : %s", conn.RemoteAddr(), conn.LocalAddr(), err) ln.Close() return } if util.Debug { - log.Logf("[socks5-bind] %s <- %s\n%s", + log.Debugf("[socks5-bind] %s <- %s\n%s", conn.RemoteAddr(), conn.LocalAddr(), reply) } - log.Logf("[socks5-bind] %s - %s BIND ON %s OK", + log.Debugf("[socks5-bind] %s - %s BIND ON %s OK", conn.RemoteAddr(), conn.LocalAddr(), socksAddr) var pconn net.Conn @@ -462,29 +462,29 @@ func (h *socks5Handler) bindOn(conn net.Conn, addr string) { select { case err := <-accept(): if err != nil || pconn == nil { - log.Logf("[socks5-bind] %s <- %s : %v", conn.RemoteAddr(), addr, err) + log.Debugf("[socks5-bind] %s <- %s : %v", conn.RemoteAddr(), addr, err) return } defer pconn.Close() reply := gosocks5.NewReply(gosocks5.Succeeded, toSocksAddr(pconn.RemoteAddr())) if err := reply.Write(pc2); err != nil { - log.Logf("[socks5-bind] %s <- %s : %v", conn.RemoteAddr(), addr, err) + log.Debugf("[socks5-bind] %s <- %s : %v", conn.RemoteAddr(), addr, err) } if util.Debug { - log.Logf("[socks5-bind] %s <- %s\n%s", conn.RemoteAddr(), addr, reply) + log.Debugf("[socks5-bind] %s <- %s\n%s", conn.RemoteAddr(), addr, reply) } - log.Logf("[socks5-bind] %s <- %s PEER %s ACCEPTED", conn.RemoteAddr(), socksAddr, pconn.RemoteAddr()) + log.Debugf("[socks5-bind] %s <- %s PEER %s ACCEPTED", conn.RemoteAddr(), socksAddr, pconn.RemoteAddr()) - log.Logf("[socks5-bind] %s <-> %s", conn.RemoteAddr(), pconn.RemoteAddr()) + log.Debugf("[socks5-bind] %s <-> %s", conn.RemoteAddr(), pconn.RemoteAddr()) if err = transport(pc2, pconn); err != nil { - log.Logf("[socks5-bind] %s - %s : %v", conn.RemoteAddr(), pconn.RemoteAddr(), err) + log.Debugf("[socks5-bind] %s - %s : %v", conn.RemoteAddr(), pconn.RemoteAddr(), err) } - log.Logf("[socks5-bind] %s >-< %s", conn.RemoteAddr(), pconn.RemoteAddr()) + log.Debugf("[socks5-bind] %s >-< %s", conn.RemoteAddr(), pconn.RemoteAddr()) return case err := <-pipe(): if err != nil { - log.Logf("[socks5-bind] %s -> %s : %v", conn.RemoteAddr(), addr, err) + log.Debugf("[socks5-bind] %s -> %s : %v", conn.RemoteAddr(), addr, err) } ln.Close() return @@ -525,7 +525,7 @@ func (h *socks5Handler) transportUDP(relay, peer net.PacketConn) (err error) { return } if util.Debug { - log.Logf("[socks5-udp] %s >>> %s length: %d", relay.LocalAddr(), raddr, len(dgram.Data)) + log.Debugf("[socks5-udp] %s >>> %s length: %d", relay.LocalAddr(), raddr, len(dgram.Data)) } } }() @@ -551,7 +551,7 @@ func (h *socks5Handler) transportUDP(relay, peer net.PacketConn) (err error) { return } if util.Debug { - log.Logf("[socks5-udp] %s <<< %s length: %d", relay.LocalAddr(), raddr, len(dgram.Data)) + log.Debugf("[socks5-udp] %s <<< %s length: %d", relay.LocalAddr(), raddr, len(dgram.Data)) } } }() @@ -576,7 +576,7 @@ func (h *socks5Handler) tunnelClientUDP(uc *net.UDPConn, cc net.Conn) (err error for { n, addr, err := uc.ReadFromUDP(b) if err != nil { - log.Logf("[udp-tun] %s <- %s : %s", cc.RemoteAddr(), addr, err) + log.Debugf("[udp-tun] %s <- %s : %s", cc.RemoteAddr(), addr, err) errc <- err return } @@ -598,7 +598,7 @@ func (h *socks5Handler) tunnelClientUDP(uc *net.UDPConn, cc net.Conn) (err error return } if util.Debug { - log.Logf("[udp-tun] %s >>> %s length: %d", uc.LocalAddr(), dgram.Header.Addr, len(dgram.Data)) + log.Debugf("[udp-tun] %s >>> %s length: %d", uc.LocalAddr(), dgram.Header.Addr, len(dgram.Data)) } } }() @@ -607,7 +607,7 @@ func (h *socks5Handler) tunnelClientUDP(uc *net.UDPConn, cc net.Conn) (err error for { dgram, err := gosocks5.ReadUDPDatagram(cc) if err != nil { - log.Logf("[udp-tun] %s -> 0 : %s", cc.RemoteAddr(), err) + log.Debugf("[udp-tun] %s -> 0 : %s", cc.RemoteAddr(), err) errc <- err return } @@ -626,7 +626,7 @@ func (h *socks5Handler) tunnelClientUDP(uc *net.UDPConn, cc net.Conn) (err error return } if util.Debug { - log.Logf("[udp-tun] %s <<< %s length: %d", uc.LocalAddr(), dgram.Header.Addr, len(dgram.Data)) + log.Debugf("[udp-tun] %s <<< %s length: %d", uc.LocalAddr(), dgram.Header.Addr, len(dgram.Data)) } } }() @@ -646,7 +646,7 @@ func (h *socks5Handler) handleUDPTunnel(conn net.Conn, req *gosocks5.Request) { bindAddr, _ := net.ResolveUDPAddr("udp", addr) uc, err := net.ListenUDP("udp", bindAddr) if err != nil { - log.Logf("[socks5] udp-tun %s -> %s : %s", conn.RemoteAddr(), req.Addr, err) + log.Debugf("[socks5] udp-tun %s -> %s : %s", conn.RemoteAddr(), req.Addr, err) return } defer uc.Close() @@ -655,32 +655,32 @@ func (h *socks5Handler) handleUDPTunnel(conn net.Conn, req *gosocks5.Request) { socksAddr.Host, _, _ = net.SplitHostPort(conn.LocalAddr().String()) reply := gosocks5.NewReply(gosocks5.Succeeded, socksAddr) if err := reply.Write(conn); err != nil { - log.Logf("[socks5] udp-tun %s <- %s : %s", conn.RemoteAddr(), socksAddr, err) + log.Debugf("[socks5] udp-tun %s <- %s : %s", conn.RemoteAddr(), socksAddr, err) return } if util.Debug { - log.Logf("[socks5] udp-tun %s <- %s\n%s", conn.RemoteAddr(), socksAddr, reply) + log.Debugf("[socks5] udp-tun %s <- %s\n%s", conn.RemoteAddr(), socksAddr, reply) } - log.Logf("[socks5] udp-tun %s <-> %s", conn.RemoteAddr(), socksAddr) + log.Debugf("[socks5] udp-tun %s <-> %s", conn.RemoteAddr(), socksAddr) h.tunnelServerUDP(conn, uc) - log.Logf("[socks5] udp-tun %s >-< %s", conn.RemoteAddr(), socksAddr) + log.Debugf("[socks5] udp-tun %s >-< %s", conn.RemoteAddr(), socksAddr) return } cc, err := h.options.Chain.Conn() // connection error if err != nil { - log.Logf("[socks5] udp-tun %s -> %s : %s", conn.RemoteAddr(), req.Addr, err) + log.Debugf("[socks5] udp-tun %s -> %s : %s", conn.RemoteAddr(), req.Addr, err) reply := gosocks5.NewReply(gosocks5.Failure, nil) reply.Write(conn) - log.Logf("[socks5] udp-tun %s -> %s\n%s", conn.RemoteAddr(), req.Addr, reply) + log.Debugf("[socks5] udp-tun %s -> %s\n%s", conn.RemoteAddr(), req.Addr, reply) return } defer cc.Close() cc, err = socks5Handshake(cc, userSocks5HandshakeOption(h.options.Chain.LastNode().User)) if err != nil { - log.Logf("[socks5] udp-tun %s -> %s : %s", conn.RemoteAddr(), req.Addr, err) + log.Debugf("[socks5] udp-tun %s -> %s : %s", conn.RemoteAddr(), req.Addr, err) return } // tunnel <-> tunnel, direct forwarding @@ -688,9 +688,9 @@ func (h *socks5Handler) handleUDPTunnel(conn net.Conn, req *gosocks5.Request) { // so we don't need to authenticate it, as it's as explicit as whitelisting req.Write(cc) - log.Logf("[socks5] udp-tun %s <-> %s", conn.RemoteAddr(), cc.RemoteAddr()) + log.Debugf("[socks5] udp-tun %s <-> %s", conn.RemoteAddr(), cc.RemoteAddr()) transport(conn, cc) - log.Logf("[socks5] udp-tun %s >-< %s", conn.RemoteAddr(), cc.RemoteAddr()) + log.Debugf("[socks5] udp-tun %s >-< %s", conn.RemoteAddr(), cc.RemoteAddr()) } func (h *socks5Handler) tunnelServerUDP(cc net.Conn, pc net.PacketConn) (err error) { @@ -703,7 +703,7 @@ func (h *socks5Handler) tunnelServerUDP(cc net.Conn, pc net.PacketConn) (err err for { n, addr, err := pc.ReadFrom(b) if err != nil { - // log.Logf("[udp-tun] %s : %s", cc.RemoteAddr(), err) + // log.Debugf("[udp-tun] %s : %s", cc.RemoteAddr(), err) errc <- err return } @@ -712,12 +712,12 @@ func (h *socks5Handler) tunnelServerUDP(cc net.Conn, pc net.PacketConn) (err err dgram := gosocks5.NewUDPDatagram( gosocks5.NewUDPHeader(uint16(n), 0, toSocksAddr(addr)), b[:n]) if err := dgram.Write(cc); err != nil { - log.Logf("[socks5] udp-tun %s <- %s : %s", cc.RemoteAddr(), dgram.Header.Addr, err) + log.Debugf("[socks5] udp-tun %s <- %s : %s", cc.RemoteAddr(), dgram.Header.Addr, err) errc <- err return } if util.Debug { - log.Logf("[socks5] udp-tun %s <<< %s length: %d", cc.RemoteAddr(), dgram.Header.Addr, len(dgram.Data)) + log.Debugf("[socks5] udp-tun %s <<< %s length: %d", cc.RemoteAddr(), dgram.Header.Addr, len(dgram.Data)) } } }() @@ -726,7 +726,7 @@ func (h *socks5Handler) tunnelServerUDP(cc net.Conn, pc net.PacketConn) (err err for { dgram, err := gosocks5.ReadUDPDatagram(cc) if err != nil { - // log.Logf("[udp-tun] %s -> 0 : %s", cc.RemoteAddr(), err) + // log.Debugf("[udp-tun] %s -> 0 : %s", cc.RemoteAddr(), err) errc <- err return } @@ -737,12 +737,12 @@ func (h *socks5Handler) tunnelServerUDP(cc net.Conn, pc net.PacketConn) (err err continue // drop silently } if _, err := pc.WriteTo(dgram.Data, addr); err != nil { - log.Logf("[socks5] udp-tun %s -> %s : %s", cc.RemoteAddr(), addr, err) + log.Debugf("[socks5] udp-tun %s -> %s : %s", cc.RemoteAddr(), addr, err) errc <- err return } if util.Debug { - log.Logf("[socks5] udp-tun %s >>> %s length: %d", cc.RemoteAddr(), addr, len(dgram.Data)) + log.Debugf("[socks5] udp-tun %s >>> %s length: %d", cc.RemoteAddr(), addr, len(dgram.Data)) } } }() @@ -829,7 +829,7 @@ func newSocks5UDPTunnelConn(conn net.Conn, raddr, taddr net.Addr, opts ...socks5 return nil, err } if util.Debug { - log.Log("[socks5] udp-tun", req) + log.Debug("[socks5] udp-tun", req) } reply, err := gosocks5.ReadReply(cc) @@ -838,7 +838,7 @@ func newSocks5UDPTunnelConn(conn net.Conn, raddr, taddr net.Addr, opts ...socks5 } if util.Debug { - log.Log("[socks5] udp-tun", reply) + log.Debug("[socks5] udp-tun", reply) } if reply.Rep != gosocks5.Succeeded { @@ -849,7 +849,7 @@ func newSocks5UDPTunnelConn(conn net.Conn, raddr, taddr net.Addr, opts ...socks5 if err != nil { return nil, err } - log.Logf("[socks5] udp-tun associate on %s OK", baddr) + log.Debugf("[socks5] udp-tun associate on %s OK", baddr) return &socks5UDPTunnelConn{ Conn: cc, diff --git a/core/tunhandler.go b/core/tunhandler.go index 7a7ff60e..5ca758a9 100644 --- a/core/tunhandler.go +++ b/core/tunhandler.go @@ -11,9 +11,9 @@ import ( "sync" "time" - "github.com/go-log/log" "github.com/shadowsocks/go-shadowsocks2/core" "github.com/shadowsocks/go-shadowsocks2/shadowaead" + log "github.com/sirupsen/logrus" "github.com/songgao/water/waterutil" "golang.org/x/net/ipv4" "golang.org/x/net/ipv6" @@ -82,7 +82,7 @@ func (h *tunHandler) Handle(conn net.Conn) { if addr := h.options.Node.Remote; addr != "" { raddr, err = net.ResolveUDPAddr("udp", addr) if err != nil { - log.Logf("[tun] %s: remote addr: %v", conn.LocalAddr(), err) + log.Debugf("[tun] %s: remote addr: %v", conn.LocalAddr(), err) return } } @@ -102,7 +102,7 @@ func (h *tunHandler) Handle(conn net.Conn) { pc, ok = cc.(net.PacketConn) if !ok { err = errors.New("not a packet connection") - log.Logf("[tun] %s - %s: %s", conn.LocalAddr(), raddr, err) + log.Debugf("[tun] %s - %s: %s", conn.LocalAddr(), raddr, err) return err } } else { @@ -121,7 +121,7 @@ func (h *tunHandler) Handle(conn net.Conn) { return h.transportTun(conn, pc, raddr) }() if err != nil { - log.Logf("[tun] %s: %v", conn.LocalAddr(), err) + log.Debugf("[tun] %s: %v", conn.LocalAddr(), err) } select { @@ -194,11 +194,11 @@ func (h *tunHandler) transportTun(tun net.Conn, conn net.PacketConn, raddr net.A if waterutil.IsIPv4(b[:n]) { header, err := ipv4.ParseHeader(b[:n]) if err != nil { - log.Logf("[tun] %s: %v", tun.LocalAddr(), err) + log.Debugf("[tun] %s: %v", tun.LocalAddr(), err) return nil } if util.Debug { - log.Logf("[tun] %s -> %s %-4s %d/%-4d %-4x %d", + log.Debugf("[tun] %s -> %s %-4s %d/%-4d %-4x %d", header.Src, header.Dst, ipProtocol(waterutil.IPv4Protocol(b[:n])), header.Len, header.TotalLen, header.ID, header.Flags) } @@ -206,18 +206,18 @@ func (h *tunHandler) transportTun(tun net.Conn, conn net.PacketConn, raddr net.A } else if waterutil.IsIPv6(b[:n]) { header, err := ipv6.ParseHeader(b[:n]) if err != nil { - log.Logf("[tun] %s: %v", tun.LocalAddr(), err) + log.Debugf("[tun] %s: %v", tun.LocalAddr(), err) return nil } if util.Debug { - log.Logf("[tun] %s -> %s %s %d %d", + log.Debugf("[tun] %s -> %s %s %d %d", header.Src, header.Dst, ipProtocol(waterutil.IPProtocol(header.NextHeader)), header.PayloadLen, header.TrafficClass) } src, dst = header.Src, header.Dst } else { - log.Logf("[tun] unknown packet") + log.Debugf("[tun] unknown packet") return nil } @@ -229,12 +229,12 @@ func (h *tunHandler) transportTun(tun net.Conn, conn net.PacketConn, raddr net.A addr := h.findRouteFor(dst) if addr == nil { - log.Logf("[tun] no route for %s -> %s", src, dst) + log.Debugf("[tun] no route for %s -> %s", src, dst) return nil } if util.Debug { - log.Logf("[tun] find route: %s -> %s", dst, addr) + log.Debugf("[tun] find route: %s -> %s", dst, addr) } if _, err := conn.WriteTo(b[:n], addr); err != nil { return err @@ -265,11 +265,11 @@ func (h *tunHandler) transportTun(tun net.Conn, conn net.PacketConn, raddr net.A if waterutil.IsIPv4(b[:n]) { header, err := ipv4.ParseHeader(b[:n]) if err != nil { - log.Logf("[tun] %s: %v", tun.LocalAddr(), err) + log.Debugf("[tun] %s: %v", tun.LocalAddr(), err) return nil } if util.Debug { - log.Logf("[tun] %s -> %s %-4s %d/%-4d %-4x %d", + log.Debugf("[tun] %s -> %s %-4s %d/%-4d %-4x %d", header.Src, header.Dst, ipProtocol(waterutil.IPv4Protocol(b[:n])), header.Len, header.TotalLen, header.ID, header.Flags) } @@ -277,18 +277,18 @@ func (h *tunHandler) transportTun(tun net.Conn, conn net.PacketConn, raddr net.A } else if waterutil.IsIPv6(b[:n]) { header, err := ipv6.ParseHeader(b[:n]) if err != nil { - log.Logf("[tun] %s: %v", tun.LocalAddr(), err) + log.Debugf("[tun] %s: %v", tun.LocalAddr(), err) return nil } if util.Debug { - log.Logf("[tun] %s -> %s %s %d %d", + log.Debugf("[tun] %s -> %s %s %d %d", header.Src, header.Dst, ipProtocol(waterutil.IPProtocol(header.NextHeader)), header.PayloadLen, header.TrafficClass) } src, dst = header.Src, header.Dst } else { - log.Logf("[tun] unknown packet") + log.Debugf("[tun] unknown packet") return nil } @@ -301,17 +301,17 @@ func (h *tunHandler) transportTun(tun net.Conn, conn net.PacketConn, raddr net.A rkey := ipToTunRouteKey(src) if actual, loaded := h.routes.LoadOrStore(rkey, addr); loaded { if actual.(net.Addr).String() != addr.String() { - log.Logf("[tun] update route: %s -> %s (old %s)", + log.Debugf("[tun] update route: %s -> %s (old %s)", src, addr, actual.(net.Addr)) h.routes.Store(rkey, addr) } } else { - log.Logf("[tun] new route: %s -> %s", src, addr) + log.Debugf("[tun] new route: %s -> %s", src, addr) } if addr := h.findRouteFor(dst); addr != nil { if util.Debug { - log.Logf("[tun] find route: %s -> %s", dst, addr) + log.Debugf("[tun] find route: %s -> %s", dst, addr) } _, err := conn.WriteTo(b[:n], addr) return err diff --git a/go.mod b/go.mod index b46c1360..9f1fe88b 100644 --- a/go.mod +++ b/go.mod @@ -6,7 +6,6 @@ require ( github.com/datawire/dlib v1.2.4 github.com/docker/libcontainer v2.2.1+incompatible github.com/ginuerzh/gosocks5 v0.2.0 - github.com/go-log/log v0.2.0 github.com/go-openapi/jsonpointer v0.19.5 // indirect github.com/google/go-cmp v0.5.5 // indirect github.com/googleapis/gnostic v0.5.1 // indirect diff --git a/go.sum b/go.sum index f432a604..510b4b29 100644 --- a/go.sum +++ b/go.sum @@ -126,8 +126,6 @@ github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2 github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-log/log v0.2.0 h1:z8i91GBudxD5L3RmF0KVpetCbcGWAV7q1Tw1eRwQM9Q= -github.com/go-log/log v0.2.0/go.mod h1:xzCnwajcues/6w7lne3yK2QU7DBPW7kqbgPGG5AF65U= 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.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= diff --git a/pkg/connect.go b/pkg/connect.go index 00743537..87bd95b8 100644 --- a/pkg/connect.go +++ b/pkg/connect.go @@ -8,7 +8,6 @@ import ( "k8s.io/client-go/rest" "k8s.io/client-go/tools/clientcmd" cmdutil "k8s.io/kubectl/pkg/cmd/util" - "kubevpn/core" "kubevpn/util" ) @@ -24,7 +23,6 @@ var ( ) func init() { - util.SetLogger(&core.LogLogger{}) connectCmd.Flags().StringVar(&kubeconfigpath, "kubeconfig", clientcmd.RecommendedHomeFile, "kubeconfig") connectCmd.Flags().StringVarP(&namespace, "namespace", "n", "", "namespace") connectCmd.PersistentFlags().StringArrayVar(&workloads, "workloads", []string{}, "workloads, like: services/tomcat, deployment/nginx, replicaset/tomcat...") @@ -40,6 +38,7 @@ var connectCmd = &cobra.Command{ return nil }, Run: func(cmd *cobra.Command, args []string) { + util.SetupLogger() InitClient() Main() // hang up @@ -48,7 +47,7 @@ var connectCmd = &cobra.Command{ } func InitClient() { - log.Printf("kubeconfig path: %s, namespace: %s, serivces: %v\n", kubeconfigpath, namespace, workloads) + log.Infof("kubeconfig path: %s, namespace: %s, serivces: %v", kubeconfigpath, namespace, workloads) var err error configFlags := genericclioptions.NewConfigFlags(true).WithDeprecatedPasswordFlag() configFlags.KubeConfig = &kubeconfigpath diff --git a/pkg/route.go b/pkg/route.go index e15215b8..7390eb87 100644 --- a/pkg/route.go +++ b/pkg/route.go @@ -2,8 +2,8 @@ package main import ( "context" - "github.com/go-log/log" "github.com/pkg/errors" + log "github.com/sirupsen/logrus" "kubevpn/core" "kubevpn/tun" "net" @@ -145,7 +145,7 @@ type router struct { } func (r *router) Serve(ctx context.Context) error { - log.Logf("%s on %s", r.node.String(), r.server.Addr()) + log.Debugf("%s on %s", r.node.String(), r.server.Addr()) return r.server.Serve(ctx, r.handler) } diff --git a/pkg/server.go b/pkg/server.go index 1042f94a..ee877c03 100644 --- a/pkg/server.go +++ b/pkg/server.go @@ -3,12 +3,10 @@ package main import ( log "github.com/sirupsen/logrus" "github.com/spf13/cobra" - "kubevpn/core" "kubevpn/util" ) func init() { - util.SetLogger(&core.LogLogger{}) ServerCmd.Flags().StringArrayVarP(&nodeConfig.ServeNodes, "nodeCommand", "L", []string{}, "command needs to be executed") ServerCmd.Flags().StringVarP(&nodeConfig.ChainNodes, "chainCommand", "F", "", "command needs to be executed") ServerCmd.Flags().BoolVar(&util.Debug, "debug", false, "true/false") @@ -23,6 +21,7 @@ var ServerCmd = &cobra.Command{ return nil }, Run: func(cmd *cobra.Command, args []string) { + util.SetupLogger() if err := start(); err != nil { log.Fatal(err) } diff --git a/tun/tun.go b/tun/tun.go index 80b1b63e..444ee56b 100644 --- a/tun/tun.go +++ b/tun/tun.go @@ -2,7 +2,7 @@ package tun import ( "errors" - "github.com/go-log/log" + log "github.com/sirupsen/logrus" "github.com/songgao/water" "net" "os" @@ -44,7 +44,7 @@ func TunListener(cfg TunConfig) (Listener, error) { addrs, _ := ifce.Addrs() _ = os.Setenv("tunName", ifce.Name) - log.Logf("[tun] %s: name: %s, mtu: %d, addrs: %s", + log.Debugf("[tun] %s: name: %s, mtu: %d, addrs: %s", conn.LocalAddr(), ifce.Name, ifce.MTU, addrs) ln.conns <- conn diff --git a/tun/tun_darwin.go b/tun/tun_darwin.go index d0d86a94..8034e8df 100644 --- a/tun/tun_darwin.go +++ b/tun/tun_darwin.go @@ -7,7 +7,7 @@ import ( "os/exec" "strings" - "github.com/go-log/log" + log "github.com/sirupsen/logrus" "github.com/songgao/water" ) @@ -35,7 +35,7 @@ func createTun(cfg TunConfig) (conn net.Conn, itf *net.Interface, err error) { } cmd := fmt.Sprintf("ifconfig %s inet %s %s mtu %d up", ifce.Name(), cfg.Addr, peer, mtu) - log.Log("[tun]", cmd) + log.Debug("[tun]", cmd) args := strings.Split(cmd, " ") if er := exec.Command(args[0], args[1:]...).Run(); er != nil { err = fmt.Errorf("%s: %v", cmd, er) @@ -64,7 +64,7 @@ func addTunRoutes(ifName string, routes ...IPRoute) error { continue } cmd := fmt.Sprintf("route add -net %s -interface %s", route.Dest.String(), ifName) - log.Log("[tun]", cmd) + log.Debug("[tun]", cmd) args := strings.Split(cmd, " ") if er := exec.Command(args[0], args[1:]...).Run(); er != nil { return fmt.Errorf("%s: %v", cmd, er) diff --git a/tun/tun_linux.go b/tun/tun_linux.go index 84b09fd4..94e7e09f 100644 --- a/tun/tun_linux.go +++ b/tun/tun_linux.go @@ -8,8 +8,8 @@ import ( "syscall" "github.com/docker/libcontainer/netlink" - "github.com/go-log/log" "github.com/milosgajdos/tenus" + log "github.com/sirupsen/logrus" "github.com/songgao/water" ) @@ -40,21 +40,21 @@ func createTun(cfg TunConfig) (conn net.Conn, itf *net.Interface, err error) { } cmd := fmt.Sprintf("ip link set dev %s mtu %d", ifce.Name(), mtu) - log.Log("[tun]", cmd) + log.Debug("[tun]", cmd) if er := link.SetLinkMTU(mtu); er != nil { err = fmt.Errorf("%s: %v", cmd, er) return } cmd = fmt.Sprintf("ip address add %s dev %s", cfg.Addr, ifce.Name()) - log.Log("[tun]", cmd) + log.Debug("[tun]", cmd) if er := link.SetLinkIp(ip, ipNet); er != nil { err = fmt.Errorf("%s: %v", cmd, er) return } cmd = fmt.Sprintf("ip link set dev %s up", ifce.Name()) - log.Log("[tun]", cmd) + log.Debug("[tun]", cmd) if er := link.SetLinkUp(); er != nil { err = fmt.Errorf("%s: %v", cmd, er) return @@ -82,7 +82,7 @@ func addTunRoutes(ifName string, routes ...IPRoute) error { continue } cmd := fmt.Sprintf("ip route add %s dev %s", route.Dest.String(), ifName) - log.Logf("[tun] %s", cmd) + log.Debugf("[tun] %s", cmd) if err := netlink.AddRoute(route.Dest.String(), "", "", ifName); err != nil && !errors.Is(err, syscall.EEXIST) { return fmt.Errorf("%s: %v", cmd, err) } diff --git a/tun/tun_unix.go b/tun/tun_unix.go index 15453187..1bc0bb52 100644 --- a/tun/tun_unix.go +++ b/tun/tun_unix.go @@ -10,7 +10,7 @@ import ( "os/exec" "strings" - "github.com/go-log/log" + log "github.com/sirupsen/logrus" "github.com/songgao/water" ) @@ -33,7 +33,7 @@ func createTun(cfg TunConfig) (conn net.Conn, itf *net.Interface, err error) { } cmd := fmt.Sprintf("ifconfig %s inet %s mtu %d up", ifce.Name(), cfg.Addr, mtu) - log.Log("[tun]", cmd) + log.Debug("[tun]", cmd) args := strings.Split(cmd, " ") if er := exec.Command(args[0], args[1:]...).Run(); er != nil { err = fmt.Errorf("%s: %v", cmd, er) @@ -62,7 +62,7 @@ func addTunRoutes(ifName string, routes ...IPRoute) error { continue } cmd := fmt.Sprintf("route add -net %s -interface %s", route.Dest.String(), ifName) - log.Logf("[tun] %s", cmd) + log.Debugf("[tun] %s", cmd) args := strings.Split(cmd, " ") if er := exec.Command(args[0], args[1:]...).Run(); er != nil { return fmt.Errorf("%s: %v", cmd, er) diff --git a/tun/tun_windows.go b/tun/tun_windows.go index c324b86e..0a07fbdb 100644 --- a/tun/tun_windows.go +++ b/tun/tun_windows.go @@ -14,7 +14,7 @@ import ( "strings" "time" - "github.com/go-log/log" + log "github.com/sirupsen/logrus" ) func createTun(cfg TunConfig) (conn net.Conn, itf *net.Interface, err error) { @@ -31,7 +31,7 @@ func createTun(cfg TunConfig) (conn net.Conn, itf *net.Interface, err error) { cmd := fmt.Sprintf("netsh interface ip set address name=\"%s\" "+ "source=static addr=%s mask=%s gateway=none", name, ip.String(), ipMask(ipNet.Mask)) - log.Log("[tun]", cmd) + log.Debug("[tun]", cmd) args := strings.Split(cmd, " ") err = retry.OnError(retry.DefaultRetry, func(err error) bool { @@ -184,7 +184,7 @@ func addTunRoutes(ifName string, gw string, routes ...IPRoute) error { if gw != "" { cmd += " nexthop=" + gw } - log.Logf("[tun] %s", cmd) + log.Debugf("[tun] %s", cmd) args := strings.Split(cmd, " ") if er := exec.Command(args[0], args[1:]...).Run(); er != nil { return fmt.Errorf("%s: %v", cmd, er) diff --git a/util/config.go b/util/config.go index b065be82..b65ddd4a 100644 --- a/util/config.go +++ b/util/config.go @@ -3,15 +3,12 @@ package util import ( "sync" "time" - - "github.com/go-log/log" ) // Debug is a flag that enables the debug log. var Debug bool var ( - tinyBufferSize = 512 smallBufferSize = 2 * 1024 // 2KB small buffer mediumBufferSize = 8 * 1024 // 8KB medium buffer largeBufferSize = 32 * 1024 // 32KB large buffer @@ -51,11 +48,5 @@ var ( ) var ( - // DefaultMTU is the default mtu for tun/tap device DefaultMTU = 1350 ) - -// SetLogger sets a new logger for internal log system. -func SetLogger(logger log.Logger) { - log.DefaultLogger = logger -} diff --git a/util/log.go b/util/log.go new file mode 100644 index 00000000..0b62e0e9 --- /dev/null +++ b/util/log.go @@ -0,0 +1,29 @@ +package util + +import ( + "fmt" + log "github.com/sirupsen/logrus" + "path/filepath" +) + +func SetupLogger() { + if Debug { + log.SetLevel(log.DebugLevel) + } + log.SetReportCaller(true) + log.SetFormatter(&Format{}) +} + +type Format struct { + log.Formatter +} + +// 2009/01/23 01:23:23 d.go:23: message +func (*Format) Format(e *log.Entry) ([]byte, error) { + return []byte( + fmt.Sprintf("%s %s:%d: %s\n", + e.Time.Format("2006/01/02 15:04:05"), + filepath.Base(e.Caller.File), + e.Caller.Line, + e.Message)), nil +}