summaryrefslogtreecommitdiff
path: root/vendor/github.com/jackc/pgx/v4/logger.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/jackc/pgx/v4/logger.go')
-rw-r--r--vendor/github.com/jackc/pgx/v4/logger.go98
1 files changed, 98 insertions, 0 deletions
diff --git a/vendor/github.com/jackc/pgx/v4/logger.go b/vendor/github.com/jackc/pgx/v4/logger.go
new file mode 100644
index 000000000..89fd5af51
--- /dev/null
+++ b/vendor/github.com/jackc/pgx/v4/logger.go
@@ -0,0 +1,98 @@
+package pgx
+
+import (
+ "context"
+ "encoding/hex"
+ "errors"
+ "fmt"
+)
+
+// The values for log levels are chosen such that the zero value means that no
+// log level was specified.
+const (
+ LogLevelTrace = 6
+ LogLevelDebug = 5
+ LogLevelInfo = 4
+ LogLevelWarn = 3
+ LogLevelError = 2
+ LogLevelNone = 1
+)
+
+// LogLevel represents the pgx logging level. See LogLevel* constants for
+// possible values.
+type LogLevel int
+
+func (ll LogLevel) String() string {
+ switch ll {
+ case LogLevelTrace:
+ return "trace"
+ case LogLevelDebug:
+ return "debug"
+ case LogLevelInfo:
+ return "info"
+ case LogLevelWarn:
+ return "warn"
+ case LogLevelError:
+ return "error"
+ case LogLevelNone:
+ return "none"
+ default:
+ return fmt.Sprintf("invalid level %d", ll)
+ }
+}
+
+// Logger is the interface used to get logging from pgx internals.
+type Logger interface {
+ // Log a message at the given level with data key/value pairs. data may be nil.
+ Log(ctx context.Context, level LogLevel, msg string, data map[string]interface{})
+}
+
+// LogLevelFromString converts log level string to constant
+//
+// Valid levels:
+// trace
+// debug
+// info
+// warn
+// error
+// none
+func LogLevelFromString(s string) (LogLevel, error) {
+ switch s {
+ case "trace":
+ return LogLevelTrace, nil
+ case "debug":
+ return LogLevelDebug, nil
+ case "info":
+ return LogLevelInfo, nil
+ case "warn":
+ return LogLevelWarn, nil
+ case "error":
+ return LogLevelError, nil
+ case "none":
+ return LogLevelNone, nil
+ default:
+ return 0, errors.New("invalid log level")
+ }
+}
+
+func logQueryArgs(args []interface{}) []interface{} {
+ logArgs := make([]interface{}, 0, len(args))
+
+ for _, a := range args {
+ switch v := a.(type) {
+ case []byte:
+ if len(v) < 64 {
+ a = hex.EncodeToString(v)
+ } else {
+ a = fmt.Sprintf("%x (truncated %d bytes)", v[:64], len(v)-64)
+ }
+ case string:
+ if len(v) > 64 {
+ a = fmt.Sprintf("%s (truncated %d bytes)", v[:64], len(v)-64)
+ }
+ }
+ logArgs = append(logArgs, a)
+ }
+
+ return logArgs
+}