@@ -37,6 +37,21 @@ import (
3737// Deprecated: use StructuredLogger instead
3838type StdLogger interface {}
3939
40+ func logHelper (logger StructuredLogger , level LogLevel , msg string , fields ... LogField ) {
41+ switch level {
42+ case LogLevelDebug :
43+ logger .Debug (msg , fields ... )
44+ case LogLevelInfo :
45+ logger .Info (msg , fields ... )
46+ case LogLevelWarn :
47+ logger .Warning (msg , fields ... )
48+ case LogLevelError :
49+ logger .Error (msg , fields ... )
50+ default :
51+ logger .Error ("Unknown log level" , newLogFieldInt ("level" , int (level )), newLogFieldString ("msg" , msg ))
52+ }
53+ }
54+
4055type nopLogger struct {}
4156
4257func (n nopLogger ) Error (_ string , _ ... LogField ) {}
@@ -101,7 +116,21 @@ type defaultLogger struct {
101116 logLevel LogLevel
102117}
103118
104- // NewLogger creates an StructuredLogger that uses the standard library "log" package.
119+ // NewLogger creates a StructuredLogger that uses the standard library log package.
120+ //
121+ // This logger will write log messages in the following format:
122+ //
123+ // <LOG_LEVEL> gocql: <message> <fields[0].Name>=<fields[0].Value> <fields[1].Name>=<fields[1].Value>
124+ //
125+ // LOG_LEVEL is always a 3 letter string:
126+ // - DEBUG -> DBG
127+ // - INFO -> INF
128+ // - WARNING -> WRN
129+ // - ERROR -> ERR
130+ //
131+ // Example:
132+ //
133+ // INF gocql: Adding host (session initialization). host_addr=127.0.0.1 host_id=a21dd06e-9e7e-4528-8ad7-039604e25e73
105134func NewLogger (logLevel LogLevel ) StructuredLogger {
106135 return & defaultLogger {logLevel : logLevel }
107136}
@@ -197,7 +226,9 @@ func newLogField(name string, value LogFieldValue) LogField {
197226
198227func newLogFieldIp (name string , value net.IP ) LogField {
199228 var str string
200- if value != nil {
229+ if value == nil {
230+ str = "<nil>"
231+ } else {
201232 str = value .String ()
202233 }
203234 return newLogField (name , logFieldValueString (str ))
@@ -246,7 +277,7 @@ type LogFieldValue struct {
246277 any interface {}
247278}
248279
249- // LogFieldValueType is the type of a [ LogFieldValue] .
280+ // LogFieldValueType is the type of a LogFieldValue.
250281type LogFieldValueType int
251282
252283// It's important that LogFieldTypeAny is 0 so that a zero Value represents nil.
@@ -270,7 +301,7 @@ func (v LogFieldValue) LogFieldValueType() LogFieldValueType {
270301}
271302
272303func logFieldValueString (value string ) LogFieldValue {
273- return LogFieldValue {num : uint64 ( len ( value )), any : value }
304+ return LogFieldValue {any : value }
274305}
275306
276307func logFieldValueInt (v int ) LogFieldValue {
@@ -308,9 +339,11 @@ func (v LogFieldValue) Any() interface{} {
308339 }
309340}
310341
311- // String returns Value's value as a string, formatted like [fmt.Sprint]. Unlike
312- // the methods Int64, Float64, and so on, which panic if v is of the
313- // wrong kind, String never panics.
342+ // String returns LogFieldValue's value as a string, formatted like fmt.Sprint.
343+ //
344+ // Unlike the methods Int64 and Bool which panic if v is of the
345+ // wrong LogFieldValueType, String never panics
346+ // (i.e. it can be called for any LogFieldValueType, not just LogFieldTypeString)
314347func (v LogFieldValue ) String () string {
315348 return v .stringValue ()
316349}
0 commit comments