feat: use qoobing log
This commit is contained in:
parent
eef1014397
commit
ddf1439876
@ -18,45 +18,40 @@ import (
|
|||||||
"bytes"
|
"bytes"
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/gomodule/redigo/redis"
|
"github.com/gomodule/redigo/redis"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
_ redis.ConnWithTimeout = (*loggingConn)(nil)
|
_ redis.ConnWithTimeout = (*loggingConn)(nil)
|
||||||
logCallDepth = 3
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// NewLoggingConn returns a logging wrapper around a connection.
|
type Logger interface {
|
||||||
func NewLoggingConn(conn redis.Conn, logger *log.Logger, prefix string) redis.Conn {
|
Debugf(format string, v ...interface{})
|
||||||
if prefix != "" {
|
Errorf(format string, v ...interface{})
|
||||||
prefix = prefix + "."
|
|
||||||
}
|
|
||||||
return &loggingConn{conn, logger, prefix, nil}
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewLoggingConnFilter returns a logging wrapper around a connection and a filter function.
|
|
||||||
func NewLoggingConnFilter(conn redis.Conn, logger *log.Logger, prefix string, skip func(cmdName string) bool) redis.Conn {
|
|
||||||
if prefix != "" {
|
|
||||||
prefix = prefix + "."
|
|
||||||
}
|
|
||||||
return &loggingConn{conn, logger, prefix, skip}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type loggingConn struct {
|
type loggingConn struct {
|
||||||
redis.Conn
|
redis.Conn
|
||||||
logger *log.Logger
|
logger Logger
|
||||||
prefix string
|
prefix string
|
||||||
skip func(cmdName string) bool
|
logskip func(cmdName string) bool
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewLoggingConn returns a logging wrapper around a connection.
|
||||||
|
func NewLoggingConn(conn redis.Conn, logger Logger, prefix string) redis.Conn {
|
||||||
|
return &loggingConn{conn, logger, prefix, nil}
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewLoggingConnFilter returns a logging wrapper around a connection and a filter function.
|
||||||
|
func NewLoggingConnFilter(conn redis.Conn, logger Logger, prefix string, skip func(cmdName string) bool) redis.Conn {
|
||||||
|
return &loggingConn{conn, logger, prefix, skip}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *loggingConn) Close() error {
|
func (c *loggingConn) Close() error {
|
||||||
err := c.Conn.Close()
|
err := c.Conn.Close()
|
||||||
var buf bytes.Buffer
|
c.logger.Debugf("%sClose() -> (%v)", c.prefix, err)
|
||||||
fmt.Fprintf(&buf, "%sClose() -> (%v)", c.prefix, err)
|
|
||||||
c.logger.Output(logCallDepth, buf.String()) // nolint: errcheck
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -98,7 +93,7 @@ func (c *loggingConn) printValue(buf *bytes.Buffer, v interface{}) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *loggingConn) print(method, commandName string, args []interface{}, reply interface{}, err error) {
|
func (c *loggingConn) print(method, commandName string, args []interface{}, reply interface{}, err error) {
|
||||||
if c.skip != nil && c.skip(commandName) {
|
if c.logskip != nil && c.logskip(commandName) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
var buf bytes.Buffer
|
var buf bytes.Buffer
|
||||||
@ -111,12 +106,15 @@ func (c *loggingConn) print(method, commandName string, args []interface{}, repl
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
buf.WriteString(") -> (")
|
buf.WriteString(") -> (")
|
||||||
if method != "Send" {
|
if err != nil {
|
||||||
c.printValue(&buf, reply)
|
fmt.Fprintf(&buf, "error: %v)", err)
|
||||||
buf.WriteString(", ")
|
} else {
|
||||||
|
if method != "Send" {
|
||||||
|
c.printValue(&buf, reply)
|
||||||
|
}
|
||||||
|
buf.WriteString(")")
|
||||||
}
|
}
|
||||||
fmt.Fprintf(&buf, "%v)", err)
|
c.logger.Debugf("%s", buf.String())
|
||||||
c.logger.Output(logCallDepth+1, buf.String()) // nolint: errcheck
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *loggingConn) Do(commandName string, args ...interface{}) (interface{}, error) {
|
func (c *loggingConn) Do(commandName string, args ...interface{}) (interface{}, error) {
|
||||||
|
@ -2,10 +2,10 @@ package redis
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
|
||||||
"os"
|
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"qoobing.com/gomod/log"
|
||||||
|
|
||||||
"github.com/gomodule/redigo/redis"
|
"github.com/gomodule/redigo/redis"
|
||||||
"qoobing.com/gomod/redis/logging"
|
"qoobing.com/gomod/redis/logging"
|
||||||
"qoobing.com/gomod/redis/sentinel"
|
"qoobing.com/gomod/redis/sentinel"
|
||||||
@ -51,15 +51,8 @@ func NewPool(cfg Config) *redis.Pool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
logPrefix = "redis"
|
logPrefix = "redis "
|
||||||
logStdPrefix = "DBUG "
|
logLogger = log.New("redis")
|
||||||
logStdWriter = os.Stdout
|
|
||||||
logStdFlags = log.Ldate | log.Lmicroseconds | log.Lshortfile
|
|
||||||
logStdLogger = log.New(logStdWriter, logStdPrefix, logStdFlags)
|
|
||||||
logErrPrefix = "ERRO "
|
|
||||||
logErrWriter = os.Stderr
|
|
||||||
logErrFlags = log.Ldate | log.Lmicroseconds | log.Lshortfile
|
|
||||||
logErrLogger = log.New(logErrWriter, logErrPrefix, logErrFlags)
|
|
||||||
)
|
)
|
||||||
return &redis.Pool{
|
return &redis.Pool{
|
||||||
MaxIdle: *cfg.MaxIdle,
|
MaxIdle: *cfg.MaxIdle,
|
||||||
@ -69,7 +62,7 @@ func NewPool(cfg Config) *redis.Pool {
|
|||||||
Dial: func() (redis.Conn, error) {
|
Dial: func() (redis.Conn, error) {
|
||||||
c, err := redis.Dial("tcp", masterAddr)
|
c, err := redis.Dial("tcp", masterAddr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logErrLogger.Output(2, fmt.Sprintf("connect [%s] error: %s", masterAddr, err))
|
logLogger.Errorf("connect [%s] error: %s", masterAddr, err)
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -81,23 +74,15 @@ func NewPool(cfg Config) *redis.Pool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logErrLogger.Output(2, fmt.Sprintf("auth [%s] error: %s", masterAddr, err))
|
logLogger.Errorf("auth [%s] error: %s", masterAddr, err)
|
||||||
return nil, fmt.Errorf("redis master AUTH failed: <%s>", err.Error())
|
return nil, fmt.Errorf("redis master AUTH failed: <%s>", err.Error())
|
||||||
} else if okstr != "OK" {
|
} else if okstr != "OK" {
|
||||||
logErrLogger.Output(2, fmt.Sprintf("auth [%s] not return ok but '%s'", masterAddr, okstr))
|
logLogger.Errorf("auth [%s] not return ok but '%s'", masterAddr, okstr)
|
||||||
return nil, fmt.Errorf("redis master AUTH failed: <%s>", okstr)
|
return nil, fmt.Errorf("redis master AUTH failed: <%s>", okstr)
|
||||||
}
|
}
|
||||||
|
|
||||||
//// if !TestRole(c, "master") {
|
|
||||||
//// c.Close()
|
|
||||||
//// err = fmt.Errorf(
|
|
||||||
//// "master(%s) got by name '%s' is not redis master",
|
|
||||||
//// masterAddr, masterName)
|
|
||||||
//// return nil, err
|
|
||||||
//// }
|
|
||||||
|
|
||||||
if cfg.Debug {
|
if cfg.Debug {
|
||||||
c = logging.NewLoggingConn(c, logStdLogger, logPrefix)
|
c = logging.NewLoggingConn(c, logLogger, logPrefix)
|
||||||
}
|
}
|
||||||
return c, nil
|
return c, nil
|
||||||
},
|
},
|
||||||
|
@ -3,14 +3,13 @@ package sentinel
|
|||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
|
||||||
"net"
|
"net"
|
||||||
"os"
|
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/gomodule/redigo/redis"
|
"github.com/gomodule/redigo/redis"
|
||||||
|
"qoobing.com/gomod/log"
|
||||||
"qoobing.com/gomod/redis/logging"
|
"qoobing.com/gomod/redis/logging"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -123,17 +122,9 @@ func NewPool(cfg Config) *redis.Pool {
|
|||||||
} else if *cfg.MaxActive < 0 {
|
} else if *cfg.MaxActive < 0 {
|
||||||
*cfg.MaxActive = 100
|
*cfg.MaxActive = 100
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
logPrefix = "redis"
|
logPrefix = "redis "
|
||||||
logStdPrefix = "DBUG "
|
logLogger = log.New("redis")
|
||||||
logStdWriter = os.Stdout
|
|
||||||
logStdFlags = log.Ldate | log.Lmicroseconds | log.Lshortfile
|
|
||||||
logStdLogger = log.New(logStdWriter, logStdPrefix, logStdFlags)
|
|
||||||
logErrPrefix = "ERRO "
|
|
||||||
logErrWriter = os.Stderr
|
|
||||||
logErrFlags = log.Ldate | log.Lmicroseconds | log.Lshortfile
|
|
||||||
logErrLogger = log.New(logErrWriter, logErrPrefix, logErrFlags)
|
|
||||||
)
|
)
|
||||||
return &redis.Pool{
|
return &redis.Pool{
|
||||||
MaxIdle: *cfg.MaxIdle,
|
MaxIdle: *cfg.MaxIdle,
|
||||||
@ -143,13 +134,13 @@ func NewPool(cfg Config) *redis.Pool {
|
|||||||
Dial: func() (redis.Conn, error) {
|
Dial: func() (redis.Conn, error) {
|
||||||
masterAddr, err := sntnl.MasterAddr()
|
masterAddr, err := sntnl.MasterAddr()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logErrLogger.Output(2, fmt.Sprintf("get master from sentinel error: %s", err))
|
logLogger.Errorf("get master from sentinel error: %s", err)
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
c, err := redis.Dial("tcp", masterAddr)
|
c, err := redis.Dial("tcp", masterAddr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logErrLogger.Output(2, fmt.Sprintf("connect [%s] error: %s", masterAddr, err))
|
logLogger.Errorf("connect [%s] error: %s", masterAddr, err)
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -161,10 +152,10 @@ func NewPool(cfg Config) *redis.Pool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logErrLogger.Output(2, fmt.Sprintf("auth [%s] error: %s", masterAddr, err))
|
logLogger.Errorf("auth [%s] error: %s", masterAddr, err)
|
||||||
return nil, fmt.Errorf("redis master AUTH failed: <%s>", err.Error())
|
return nil, fmt.Errorf("redis master AUTH failed: <%s>", err.Error())
|
||||||
} else if okstr != "OK" {
|
} else if okstr != "OK" {
|
||||||
logErrLogger.Output(2, fmt.Sprintf("auth [%s] not return ok but '%s'", masterAddr, okstr))
|
logLogger.Errorf("auth [%s] not return ok but '%s'", masterAddr, okstr)
|
||||||
return nil, fmt.Errorf("redis master AUTH failed: <%s>", okstr)
|
return nil, fmt.Errorf("redis master AUTH failed: <%s>", okstr)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -173,12 +164,12 @@ func NewPool(cfg Config) *redis.Pool {
|
|||||||
err = fmt.Errorf(
|
err = fmt.Errorf(
|
||||||
"master(%s) got by name '%s' is not redis master",
|
"master(%s) got by name '%s' is not redis master",
|
||||||
masterAddr, masterName)
|
masterAddr, masterName)
|
||||||
logErrLogger.Output(2, err.Error())
|
logLogger.Errorf("%s", err.Error())
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if cfg.Debug {
|
if cfg.Debug {
|
||||||
c = logging.NewLoggingConn(c, logStdLogger, logPrefix)
|
c = logging.NewLoggingConn(c, logLogger, logPrefix)
|
||||||
}
|
}
|
||||||
return c, nil
|
return c, nil
|
||||||
},
|
},
|
||||||
|
Loading…
Reference in New Issue
Block a user