Use interface for logging instead of log15 directly

logger-interface
Jack Christensen 2014-07-14 09:42:52 -05:00
parent 311c332fdc
commit 98109c57bb
3 changed files with 31 additions and 9 deletions

View File

@ -14,7 +14,6 @@ import (
"encoding/hex"
"errors"
"fmt"
log "gopkg.in/inconshreveable/log15.v2"
"io"
"net"
"net/url"
@ -34,7 +33,7 @@ type ConnConfig struct {
User string // default: OS user name
Password string
TLSConfig *tls.Config // config for TLS connection -- nil disables TLS
Logger log.Logger
Logger Logger
}
// Conn is a PostgreSQL connection handle. It is not safe for concurrent usage.
@ -53,7 +52,7 @@ type Conn struct {
notifications []*Notification
alive bool
causeOfDeath error
logger log.Logger
logger Logger
rows Rows
mr msgReader
}
@ -100,8 +99,7 @@ func Connect(config ConnConfig) (c *Conn, err error) {
if c.config.Logger != nil {
c.logger = c.config.Logger
} else {
c.logger = log.New()
c.logger.SetHandler(log.DiscardHandler())
c.logger = &DiscardLogger{}
}
if c.config.User == "" {

View File

@ -2,7 +2,6 @@ package pgx
import (
"errors"
log "gopkg.in/inconshreveable/log15.v2"
"sync"
)
@ -19,7 +18,7 @@ type ConnPool struct {
config ConnConfig // config used when establishing connection
maxConnections int
afterConnect func(*Conn) error
logger log.Logger
logger Logger
}
type ConnPoolStat struct {
@ -45,8 +44,7 @@ func NewConnPool(config ConnPoolConfig) (p *ConnPool, err error) {
if config.Logger != nil {
p.logger = config.Logger
} else {
p.logger = log.New()
p.logger.SetHandler(log.DiscardHandler())
p.logger = &DiscardLogger{}
}
p.allConnections = make([]*Conn, 0, p.maxConnections)

26
logger.go Normal file
View File

@ -0,0 +1,26 @@
package pgx
// Logger is the interface used to get logging from pgx internals.
// https://github.com/inconshreveable/log15 is the recommended logging package.
// This logging interface was extracted from there. However, it should be simple
// to adapt any logger to this interface.
type Logger interface {
// New returns a new Logger that has this logger's context plus the given context
New(ctx ...interface{}) Logger
// Log a message at the given level with context key/value pairs
Debug(msg string, ctx ...interface{})
Info(msg string, ctx ...interface{})
Warn(msg string, ctx ...interface{})
Error(msg string, ctx ...interface{})
Crit(msg string, ctx ...interface{})
}
type DiscardLogger struct{}
func (l *DiscardLogger) New(ctx ...interface{}) Logger { return l }
func (l *DiscardLogger) Debug(msg string, ctx ...interface{}) {}
func (l *DiscardLogger) Info(msg string, ctx ...interface{}) {}
func (l *DiscardLogger) Warn(msg string, ctx ...interface{}) {}
func (l *DiscardLogger) Error(msg string, ctx ...interface{}) {}
func (l *DiscardLogger) Crit(msg string, ctx ...interface{}) {}