Open kevinburke opened 8 years ago
Yeah, we need a way to make the formatter more customizable. I like the idea of setting up functional options for the LogFmtFormat constructor and letting you pass those in. So the API might look like:
func LogFmtFormat(opts ...FormatOption)
And usage:
// default
fmtr := log.LogFmtFormat()
// customized formatter
fmtr := log.LogFmtFormat(
log.WithTimeFormat(func(time.Time) string {
return "Hammer Time!"
}),
log.WithMessagePadding(10),
log.WithTimelKey("time"),
log.WithLevelKey(""), // empty string means omit
)
This would address #84 and some other issues we closed in the past.Maybe we could even share some of the options with the JSONFormatter. Thoughts?
@ChrisHines thoughts on this API? I think it would get us some flexibility in custom formatting we were always missing. I wonder if this is a better way to allow folks to define custom names for t
, lvl
, and msg
keys instead of the RecordKeyNames
that we eventually settled on
@grahamking started down the path of functional options in #60 but abandoned it for a custom formatter the better fit his needs.
The log.WithTimeFormat
approach is interesting because it doesn't assume you are using time.Format
.
interesting. @kevinburke or I might take a stab at resurrecting that approach. do you like the way that worked out for StdlibAdapterOption
in go-kit/log?
I don't use StdlibAdapter
much and I didn't write it either, credit for that idea goes to @peterbourgon, but I do like how functional options work for this sort of thing.
Instead of functional style options like above why not pass in an options struct?
In the struct the user can specify only the options they need and rest all is default. I have seen this approach in the Kafka go library
Examples
https://pkg.go.dev/github.com/segmentio/kafka-go?utm_source=godoc#Writer
https://github.com/segmentio/kafka-go/blob/v0.4.32/reader.go#L622
I'm trying to add HTTP logging to my application. The format I want is all keys and values, no
Msg
component.The terminal format adds 40 chars of padding, regardless of whether a Msg is specified. It would be nice if you could omit this padding without having to reimplement a lot of the terminal display code.