Add trace logging
This commit is contained in:
@@ -273,6 +273,23 @@ func BenchmarkSelectWithoutLogging(b *testing.B) {
|
|||||||
benchmarkSelectWithLog(b, conn)
|
benchmarkSelectWithLog(b, conn)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func BenchmarkSelectWithLoggingTraceWithLog15(b *testing.B) {
|
||||||
|
connConfig := *defaultConnConfig
|
||||||
|
|
||||||
|
logger := log.New()
|
||||||
|
lvl, err := log.LvlFromString("debug")
|
||||||
|
if err != nil {
|
||||||
|
b.Fatal(err)
|
||||||
|
}
|
||||||
|
logger.SetHandler(log.LvlFilterHandler(lvl, log.DiscardHandler()))
|
||||||
|
connConfig.Logger = logger
|
||||||
|
connConfig.LogLevel = pgx.LogLevelTrace
|
||||||
|
conn := mustConnect(b, connConfig)
|
||||||
|
defer closeConn(b, conn)
|
||||||
|
|
||||||
|
benchmarkSelectWithLog(b, conn)
|
||||||
|
}
|
||||||
|
|
||||||
func BenchmarkSelectWithLoggingDebugWithLog15(b *testing.B) {
|
func BenchmarkSelectWithLoggingDebugWithLog15(b *testing.B) {
|
||||||
connConfig := *defaultConnConfig
|
connConfig := *defaultConnConfig
|
||||||
|
|
||||||
@@ -283,6 +300,7 @@ func BenchmarkSelectWithLoggingDebugWithLog15(b *testing.B) {
|
|||||||
}
|
}
|
||||||
logger.SetHandler(log.LvlFilterHandler(lvl, log.DiscardHandler()))
|
logger.SetHandler(log.LvlFilterHandler(lvl, log.DiscardHandler()))
|
||||||
connConfig.Logger = logger
|
connConfig.Logger = logger
|
||||||
|
connConfig.LogLevel = pgx.LogLevelDebug
|
||||||
conn := mustConnect(b, connConfig)
|
conn := mustConnect(b, connConfig)
|
||||||
defer closeConn(b, conn)
|
defer closeConn(b, conn)
|
||||||
|
|
||||||
@@ -299,6 +317,7 @@ func BenchmarkSelectWithLoggingInfoWithLog15(b *testing.B) {
|
|||||||
}
|
}
|
||||||
logger.SetHandler(log.LvlFilterHandler(lvl, log.DiscardHandler()))
|
logger.SetHandler(log.LvlFilterHandler(lvl, log.DiscardHandler()))
|
||||||
connConfig.Logger = logger
|
connConfig.Logger = logger
|
||||||
|
connConfig.LogLevel = pgx.LogLevelInfo
|
||||||
conn := mustConnect(b, connConfig)
|
conn := mustConnect(b, connConfig)
|
||||||
defer closeConn(b, conn)
|
defer closeConn(b, conn)
|
||||||
|
|
||||||
@@ -315,6 +334,7 @@ func BenchmarkSelectWithLoggingErrorWithLog15(b *testing.B) {
|
|||||||
}
|
}
|
||||||
logger.SetHandler(log.LvlFilterHandler(lvl, log.DiscardHandler()))
|
logger.SetHandler(log.LvlFilterHandler(lvl, log.DiscardHandler()))
|
||||||
connConfig.Logger = logger
|
connConfig.Logger = logger
|
||||||
|
connConfig.LogLevel = pgx.LogLevelError
|
||||||
conn := mustConnect(b, connConfig)
|
conn := mustConnect(b, connConfig)
|
||||||
defer closeConn(b, conn)
|
defer closeConn(b, conn)
|
||||||
|
|
||||||
|
|||||||
@@ -124,6 +124,8 @@ func Connect(config ConnConfig) (c *Conn, err error) {
|
|||||||
if c.logger == nil {
|
if c.logger == nil {
|
||||||
c.logLevel = LogLevelNone
|
c.logLevel = LogLevelNone
|
||||||
}
|
}
|
||||||
|
c.mr.logger = c.logger
|
||||||
|
c.mr.logLevel = c.logLevel
|
||||||
|
|
||||||
if c.config.User == "" {
|
if c.config.User == "" {
|
||||||
user, err := user.Current()
|
user, err := user.Current()
|
||||||
@@ -956,7 +958,7 @@ func (c *Conn) rxMsg() (t byte, r *msgReader, err error) {
|
|||||||
c.lastActivityTime = time.Now()
|
c.lastActivityTime = time.Now()
|
||||||
|
|
||||||
if c.logLevel >= LogLevelTrace {
|
if c.logLevel >= LogLevelTrace {
|
||||||
c.logger.Debug("rxMsg", "Type", string(t), "Size", c.mr.msgBytesRemaining)
|
c.logger.Debug("rxMsg", "type", string(t), "msgBytesRemaining", c.mr.msgBytesRemaining)
|
||||||
}
|
}
|
||||||
|
|
||||||
return t, &c.mr, err
|
return t, &c.mr, err
|
||||||
|
|||||||
@@ -192,7 +192,8 @@ Logging
|
|||||||
|
|
||||||
pgx defines a simple logger interface. Connections optionally accept a logger
|
pgx defines a simple logger interface. Connections optionally accept a logger
|
||||||
that satisfies this interface. The log15 package
|
that satisfies this interface. The log15 package
|
||||||
(http://gopkg.in/inconshreveable/log15.v2) satisfies this interface
|
(http://gopkg.in/inconshreveable/log15.v2) satisfies this interface and it is
|
||||||
and it is simple to define adapters for other loggers.
|
simple to define adapters for other loggers. Set LogLevel to control logging
|
||||||
|
verbosity.
|
||||||
*/
|
*/
|
||||||
package pgx
|
package pgx
|
||||||
|
|||||||
+52
-5
@@ -14,6 +14,8 @@ type msgReader struct {
|
|||||||
buf [128]byte
|
buf [128]byte
|
||||||
msgBytesRemaining int32
|
msgBytesRemaining int32
|
||||||
err error
|
err error
|
||||||
|
logger Logger
|
||||||
|
logLevel int
|
||||||
}
|
}
|
||||||
|
|
||||||
// Err returns any error that the msgReader has experienced
|
// Err returns any error that the msgReader has experienced
|
||||||
@@ -23,6 +25,9 @@ func (r *msgReader) Err() error {
|
|||||||
|
|
||||||
// fatal tells r that a Fatal error has occurred
|
// fatal tells r that a Fatal error has occurred
|
||||||
func (r *msgReader) fatal(err error) {
|
func (r *msgReader) fatal(err error) {
|
||||||
|
if r.logLevel >= LogLevelTrace {
|
||||||
|
r.logger.Debug("msgReader.fatal", "error", err, "msgBytesRemaining", r.msgBytesRemaining)
|
||||||
|
}
|
||||||
r.err = err
|
r.err = err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -33,6 +38,10 @@ func (r *msgReader) rxMsg() (t byte, err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if r.msgBytesRemaining > 0 {
|
if r.msgBytesRemaining > 0 {
|
||||||
|
if r.logLevel >= LogLevelTrace {
|
||||||
|
r.logger.Debug("msgReader.rxMsg discarding unread previous message", "msgBytesRemaining", r.msgBytesRemaining)
|
||||||
|
}
|
||||||
|
|
||||||
io.CopyN(ioutil.Discard, r.reader, int64(r.msgBytesRemaining))
|
io.CopyN(ioutil.Discard, r.reader, int64(r.msgBytesRemaining))
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -59,6 +68,10 @@ func (r *msgReader) readByte() byte {
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if r.logLevel >= LogLevelTrace {
|
||||||
|
r.logger.Debug("msgReader.readByte", "value", b, "byteAsString", string(b), "msgBytesRemaining", r.msgBytesRemaining)
|
||||||
|
}
|
||||||
|
|
||||||
return b
|
return b
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -80,7 +93,13 @@ func (r *msgReader) readInt16() int16 {
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
return int16(binary.BigEndian.Uint16(b))
|
n := int16(binary.BigEndian.Uint16(b))
|
||||||
|
|
||||||
|
if r.logLevel >= LogLevelTrace {
|
||||||
|
r.logger.Debug("msgReader.readInt16", "value", n, "msgBytesRemaining", r.msgBytesRemaining)
|
||||||
|
}
|
||||||
|
|
||||||
|
return n
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *msgReader) readInt32() int32 {
|
func (r *msgReader) readInt32() int32 {
|
||||||
@@ -101,7 +120,13 @@ func (r *msgReader) readInt32() int32 {
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
return int32(binary.BigEndian.Uint32(b))
|
n := int32(binary.BigEndian.Uint32(b))
|
||||||
|
|
||||||
|
if r.logLevel >= LogLevelTrace {
|
||||||
|
r.logger.Debug("msgReader.readInt32", "value", n, "msgBytesRemaining", r.msgBytesRemaining)
|
||||||
|
}
|
||||||
|
|
||||||
|
return n
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *msgReader) readInt64() int64 {
|
func (r *msgReader) readInt64() int64 {
|
||||||
@@ -122,7 +147,13 @@ func (r *msgReader) readInt64() int64 {
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
return int64(binary.BigEndian.Uint64(b))
|
n := int64(binary.BigEndian.Uint64(b))
|
||||||
|
|
||||||
|
if r.logLevel >= LogLevelTrace {
|
||||||
|
r.logger.Debug("msgReader.readInt64", "value", n, "msgBytesRemaining", r.msgBytesRemaining)
|
||||||
|
}
|
||||||
|
|
||||||
|
return n
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *msgReader) readOid() Oid {
|
func (r *msgReader) readOid() Oid {
|
||||||
@@ -147,7 +178,13 @@ func (r *msgReader) readCString() string {
|
|||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
return string(b[0 : len(b)-1])
|
s := string(b[0 : len(b)-1])
|
||||||
|
|
||||||
|
if r.logLevel >= LogLevelTrace {
|
||||||
|
r.logger.Debug("msgReader.readCString", "value", s, "msgBytesRemaining", r.msgBytesRemaining)
|
||||||
|
}
|
||||||
|
|
||||||
|
return s
|
||||||
}
|
}
|
||||||
|
|
||||||
// readString reads count bytes and returns as string
|
// readString reads count bytes and returns as string
|
||||||
@@ -175,7 +212,13 @@ func (r *msgReader) readString(count int32) string {
|
|||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
return string(b)
|
s := string(b)
|
||||||
|
|
||||||
|
if r.logLevel >= LogLevelTrace {
|
||||||
|
r.logger.Debug("msgReader.readString", "value", s, "msgBytesRemaining", r.msgBytesRemaining)
|
||||||
|
}
|
||||||
|
|
||||||
|
return s
|
||||||
}
|
}
|
||||||
|
|
||||||
// readBytes reads count bytes and returns as []byte
|
// readBytes reads count bytes and returns as []byte
|
||||||
@@ -198,5 +241,9 @@ func (r *msgReader) readBytes(count int32) []byte {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if r.logLevel >= LogLevelTrace {
|
||||||
|
r.logger.Debug("msgReader.readBytes", "value", b, "msgBytesRemaining", r.msgBytesRemaining)
|
||||||
|
}
|
||||||
|
|
||||||
return b
|
return b
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user