mirror of https://github.com/go-redis/redis.git
Declare and use a package-level Logger
This allow users of the API to override the Logger. Fix #250.
This commit is contained in:
parent
538069c33f
commit
d3ee281748
|
@ -1,7 +1,6 @@
|
||||||
package redis
|
package redis
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"log"
|
|
||||||
"math/rand"
|
"math/rand"
|
||||||
"sync"
|
"sync"
|
||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
|
@ -256,13 +255,13 @@ func (c *ClusterClient) reloadSlots() {
|
||||||
|
|
||||||
client, err := c.randomClient()
|
client, err := c.randomClient()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("redis: randomClient failed: %s", err)
|
Logger.Printf("redis: randomClient failed: %s", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
slots, err := client.ClusterSlots().Result()
|
slots, err := client.ClusterSlots().Result()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("redis: ClusterSlots failed: %s", err)
|
Logger.Printf("redis: ClusterSlots failed: %s", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
c.setSlots(slots)
|
c.setSlots(slots)
|
||||||
|
|
|
@ -2,7 +2,6 @@ package redis
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"io"
|
"io"
|
||||||
"log"
|
|
||||||
"strconv"
|
"strconv"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
@ -32,7 +31,7 @@ func usePrecise(dur time.Duration) bool {
|
||||||
|
|
||||||
func formatMs(dur time.Duration) string {
|
func formatMs(dur time.Duration) string {
|
||||||
if dur > 0 && dur < time.Millisecond {
|
if dur > 0 && dur < time.Millisecond {
|
||||||
log.Printf(
|
Logger.Printf(
|
||||||
"redis: specified duration is %s, but minimal supported value is %s",
|
"redis: specified duration is %s, but minimal supported value is %s",
|
||||||
dur, time.Millisecond,
|
dur, time.Millisecond,
|
||||||
)
|
)
|
||||||
|
@ -42,7 +41,7 @@ func formatMs(dur time.Duration) string {
|
||||||
|
|
||||||
func formatSec(dur time.Duration) string {
|
func formatSec(dur time.Duration) string {
|
||||||
if dur > 0 && dur < time.Second {
|
if dur > 0 && dur < time.Second {
|
||||||
log.Printf(
|
Logger.Printf(
|
||||||
"redis: specified duration is %s, but minimal supported value is %s",
|
"redis: specified duration is %s, but minimal supported value is %s",
|
||||||
dur, time.Second,
|
dur, time.Second,
|
||||||
)
|
)
|
||||||
|
|
5
multi.go
5
multi.go
|
@ -3,7 +3,6 @@ package redis
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var errDiscard = errors.New("redis: Discard can be used only inside Exec")
|
var errDiscard = errors.New("redis: Discard can be used only inside Exec")
|
||||||
|
@ -53,7 +52,7 @@ func (c *Multi) putConn(cn *conn, err error) {
|
||||||
} else {
|
} else {
|
||||||
err := c.base.connPool.Put(cn)
|
err := c.base.connPool.Put(cn)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("redis: putConn failed: %s", err)
|
Logger.Printf("redis: putConn failed: %s", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -70,7 +69,7 @@ func (c *Multi) process(cmd Cmder) {
|
||||||
func (c *Multi) Close() error {
|
func (c *Multi) Close() error {
|
||||||
c.closed = true
|
c.closed = true
|
||||||
if err := c.Unwatch().Err(); err != nil {
|
if err := c.Unwatch().Err(); err != nil {
|
||||||
log.Printf("redis: Unwatch failed: %s", err)
|
Logger.Printf("redis: Unwatch failed: %s", err)
|
||||||
}
|
}
|
||||||
return c.base.Close()
|
return c.base.Close()
|
||||||
}
|
}
|
||||||
|
|
7
pool.go
7
pool.go
|
@ -3,7 +3,6 @@ package redis
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
|
||||||
"sync"
|
"sync"
|
||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
"time"
|
"time"
|
||||||
|
@ -178,7 +177,7 @@ func (p *connPool) First() *conn {
|
||||||
var err error
|
var err error
|
||||||
cn, err = p.replace(cn)
|
cn, err = p.replace(cn)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("redis: replace failed: %s", err)
|
Logger.Printf("redis: replace failed: %s", err)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -200,7 +199,7 @@ func (p *connPool) wait() *conn {
|
||||||
var err error
|
var err error
|
||||||
cn, err = p.replace(cn)
|
cn, err = p.replace(cn)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("redis: replace failed: %s", err)
|
Logger.Printf("redis: replace failed: %s", err)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -272,7 +271,7 @@ func (p *connPool) Put(cn *conn) error {
|
||||||
if cn.rd.Buffered() != 0 {
|
if cn.rd.Buffered() != 0 {
|
||||||
b, _ := cn.rd.Peek(cn.rd.Buffered())
|
b, _ := cn.rd.Peek(cn.rd.Buffered())
|
||||||
err := fmt.Errorf("redis: connection has unread data: %q", b)
|
err := fmt.Errorf("redis: connection has unread data: %q", b)
|
||||||
log.Print(err)
|
Logger.Print(err)
|
||||||
return p.Remove(cn, err)
|
return p.Remove(cn, err)
|
||||||
}
|
}
|
||||||
if p.opt.getIdleTimeout() > 0 {
|
if p.opt.getIdleTimeout() > 0 {
|
||||||
|
|
|
@ -2,7 +2,6 @@ package redis
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
|
||||||
"net"
|
"net"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
@ -239,12 +238,12 @@ func (c *PubSub) reconnect(reason error) {
|
||||||
|
|
||||||
if len(c.channels) > 0 {
|
if len(c.channels) > 0 {
|
||||||
if err := c.Subscribe(c.channels...); err != nil {
|
if err := c.Subscribe(c.channels...); err != nil {
|
||||||
log.Printf("redis: Subscribe failed: %s", err)
|
Logger.Printf("redis: Subscribe failed: %s", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if len(c.patterns) > 0 {
|
if len(c.patterns) > 0 {
|
||||||
if err := c.PSubscribe(c.patterns...); err != nil {
|
if err := c.PSubscribe(c.patterns...); err != nil {
|
||||||
log.Printf("redis: PSubscribe failed: %s", err)
|
Logger.Printf("redis: PSubscribe failed: %s", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -269,7 +268,7 @@ func (c *PubSub) ReceiveMessage() (*Message, error) {
|
||||||
if err == nil {
|
if err == nil {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
log.Printf("redis: PubSub.Ping failed: %s", err)
|
Logger.Printf("redis: PubSub.Ping failed: %s", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
5
redis.go
5
redis.go
|
@ -4,9 +4,12 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"net"
|
"net"
|
||||||
|
"os"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var Logger = log.New(os.Stderr, "", log.LstdFlags)
|
||||||
|
|
||||||
type baseClient struct {
|
type baseClient struct {
|
||||||
connPool pool
|
connPool pool
|
||||||
opt *Options
|
opt *Options
|
||||||
|
@ -27,7 +30,7 @@ func (c *baseClient) putConn(cn *conn, err error) {
|
||||||
err = c.connPool.Put(cn)
|
err = c.connPool.Put(cn)
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("redis: putConn failed: %s", err)
|
Logger.Printf("redis: putConn failed: %s", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
3
ring.go
3
ring.go
|
@ -3,7 +3,6 @@ package redis
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
@ -202,7 +201,7 @@ func (ring *Ring) heartbeat() {
|
||||||
for _, shard := range ring.shards {
|
for _, shard := range ring.shards {
|
||||||
err := shard.Client.Ping().Err()
|
err := shard.Client.Ping().Err()
|
||||||
if shard.Vote(err == nil || err == errPoolTimeout) {
|
if shard.Vote(err == nil || err == errPoolTimeout) {
|
||||||
log.Printf("redis: ring shard state changed: %s", shard)
|
Logger.Printf("redis: ring shard state changed: %s", shard)
|
||||||
rebalance = true
|
rebalance = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
27
sentinel.go
27
sentinel.go
|
@ -3,7 +3,6 @@ package redis
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
|
||||||
"net"
|
"net"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
|
@ -145,11 +144,11 @@ func (d *sentinelFailover) MasterAddr() (string, error) {
|
||||||
if d._sentinel != nil {
|
if d._sentinel != nil {
|
||||||
addr, err := d._sentinel.GetMasterAddrByName(d.masterName).Result()
|
addr, err := d._sentinel.GetMasterAddrByName(d.masterName).Result()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("redis-sentinel: GetMasterAddrByName %q failed: %s", d.masterName, err)
|
Logger.Printf("redis-sentinel: GetMasterAddrByName %q failed: %s", d.masterName, err)
|
||||||
d.resetSentinel()
|
d.resetSentinel()
|
||||||
} else {
|
} else {
|
||||||
addr := net.JoinHostPort(addr[0], addr[1])
|
addr := net.JoinHostPort(addr[0], addr[1])
|
||||||
log.Printf("redis-sentinel: %q addr is %s", d.masterName, addr)
|
Logger.Printf("redis-sentinel: %q addr is %s", d.masterName, addr)
|
||||||
return addr, nil
|
return addr, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -168,7 +167,7 @@ func (d *sentinelFailover) MasterAddr() (string, error) {
|
||||||
})
|
})
|
||||||
masterAddr, err := sentinel.GetMasterAddrByName(d.masterName).Result()
|
masterAddr, err := sentinel.GetMasterAddrByName(d.masterName).Result()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("redis-sentinel: GetMasterAddrByName %q failed: %s", d.masterName, err)
|
Logger.Printf("redis-sentinel: GetMasterAddrByName %q failed: %s", d.masterName, err)
|
||||||
sentinel.Close()
|
sentinel.Close()
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
@ -178,7 +177,7 @@ func (d *sentinelFailover) MasterAddr() (string, error) {
|
||||||
|
|
||||||
d.setSentinel(sentinel)
|
d.setSentinel(sentinel)
|
||||||
addr := net.JoinHostPort(masterAddr[0], masterAddr[1])
|
addr := net.JoinHostPort(masterAddr[0], masterAddr[1])
|
||||||
log.Printf("redis-sentinel: %q addr is %s", d.masterName, addr)
|
Logger.Printf("redis-sentinel: %q addr is %s", d.masterName, addr)
|
||||||
return addr, nil
|
return addr, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -194,7 +193,7 @@ func (d *sentinelFailover) setSentinel(sentinel *sentinelClient) {
|
||||||
func (d *sentinelFailover) discoverSentinels(sentinel *sentinelClient) {
|
func (d *sentinelFailover) discoverSentinels(sentinel *sentinelClient) {
|
||||||
sentinels, err := sentinel.Sentinels(d.masterName).Result()
|
sentinels, err := sentinel.Sentinels(d.masterName).Result()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("redis-sentinel: Sentinels %q failed: %s", d.masterName, err)
|
Logger.Printf("redis-sentinel: Sentinels %q failed: %s", d.masterName, err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
for _, sentinel := range sentinels {
|
for _, sentinel := range sentinels {
|
||||||
|
@ -204,7 +203,7 @@ func (d *sentinelFailover) discoverSentinels(sentinel *sentinelClient) {
|
||||||
if key == "name" {
|
if key == "name" {
|
||||||
sentinelAddr := vals[i+1].(string)
|
sentinelAddr := vals[i+1].(string)
|
||||||
if !contains(d.sentinelAddrs, sentinelAddr) {
|
if !contains(d.sentinelAddrs, sentinelAddr) {
|
||||||
log.Printf(
|
Logger.Printf(
|
||||||
"redis-sentinel: discovered new %q sentinel: %s",
|
"redis-sentinel: discovered new %q sentinel: %s",
|
||||||
d.masterName, sentinelAddr,
|
d.masterName, sentinelAddr,
|
||||||
)
|
)
|
||||||
|
@ -232,7 +231,7 @@ func (d *sentinelFailover) closeOldConns(newMaster string) {
|
||||||
"redis-sentinel: closing connection to the old master %s",
|
"redis-sentinel: closing connection to the old master %s",
|
||||||
cn.RemoteAddr(),
|
cn.RemoteAddr(),
|
||||||
)
|
)
|
||||||
log.Print(err)
|
Logger.Print(err)
|
||||||
d.pool.Remove(cn, err)
|
d.pool.Remove(cn, err)
|
||||||
} else {
|
} else {
|
||||||
cnsToPut = append(cnsToPut, cn)
|
cnsToPut = append(cnsToPut, cn)
|
||||||
|
@ -250,7 +249,7 @@ func (d *sentinelFailover) listen() {
|
||||||
if pubsub == nil {
|
if pubsub == nil {
|
||||||
pubsub = d._sentinel.PubSub()
|
pubsub = d._sentinel.PubSub()
|
||||||
if err := pubsub.Subscribe("+switch-master"); err != nil {
|
if err := pubsub.Subscribe("+switch-master"); err != nil {
|
||||||
log.Printf("redis-sentinel: Subscribe failed: %s", err)
|
Logger.Printf("redis-sentinel: Subscribe failed: %s", err)
|
||||||
d.lock.Lock()
|
d.lock.Lock()
|
||||||
d.resetSentinel()
|
d.resetSentinel()
|
||||||
d.lock.Unlock()
|
d.lock.Unlock()
|
||||||
|
@ -260,7 +259,7 @@ func (d *sentinelFailover) listen() {
|
||||||
|
|
||||||
msgIface, err := pubsub.Receive()
|
msgIface, err := pubsub.Receive()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("redis-sentinel: Receive failed: %s", err)
|
Logger.Printf("redis-sentinel: Receive failed: %s", err)
|
||||||
pubsub.Close()
|
pubsub.Close()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -271,23 +270,23 @@ func (d *sentinelFailover) listen() {
|
||||||
case "+switch-master":
|
case "+switch-master":
|
||||||
parts := strings.Split(msg.Payload, " ")
|
parts := strings.Split(msg.Payload, " ")
|
||||||
if parts[0] != d.masterName {
|
if parts[0] != d.masterName {
|
||||||
log.Printf("redis-sentinel: ignore new %s addr", parts[0])
|
Logger.Printf("redis-sentinel: ignore new %s addr", parts[0])
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
addr := net.JoinHostPort(parts[3], parts[4])
|
addr := net.JoinHostPort(parts[3], parts[4])
|
||||||
log.Printf(
|
Logger.Printf(
|
||||||
"redis-sentinel: new %q addr is %s",
|
"redis-sentinel: new %q addr is %s",
|
||||||
d.masterName, addr,
|
d.masterName, addr,
|
||||||
)
|
)
|
||||||
|
|
||||||
d.closeOldConns(addr)
|
d.closeOldConns(addr)
|
||||||
default:
|
default:
|
||||||
log.Printf("redis-sentinel: unsupported message: %s", msg)
|
Logger.Printf("redis-sentinel: unsupported message: %s", msg)
|
||||||
}
|
}
|
||||||
case *Subscription:
|
case *Subscription:
|
||||||
// Ignore.
|
// Ignore.
|
||||||
default:
|
default:
|
||||||
log.Printf("redis-sentinel: unsupported message: %s", msgIface)
|
Logger.Printf("redis-sentinel: unsupported message: %s", msgIface)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue