Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -352,6 +352,21 @@ output.FormatLevel = func(i interface{}) string {
output.FormatMessage = func(i interface{}) string {
return fmt.Sprintf("***%s****", i)
}
output.FormatMessageFromEvent = func(evt map[string]interface{}) zerolog.Formatter {
return func(i interface{}) string {
level := evt[zerolog.LevelFieldName]
switch level {
case zerolog.LevelInfoValue:
return fmt.Sprintf("=> %s %s", level, i)
case zerolog.LevelWarnValue:
return fmt.Sprintf("!! %s %s", level, i)
case zerolog.LevelErrorValue, zerolog.LevelFatalValue, zerolog.LevelPanicValue:
return fmt.Sprintf("XX %s %s", level, i)
default:
return fmt.Sprintf("%s", i)
}
}
}
output.FormatFieldName = func(i interface{}) string {
return fmt.Sprintf("%s:", i)
}
Expand Down
34 changes: 20 additions & 14 deletions console.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,9 @@ type Formatter func(interface{}) string
// being able to differentiate formatting based on field name.
type FormatterByFieldName func(interface{}, string) string

// FormatterFromEvent generates a Formatter from an event.
type FormatterFromEvent func(map[string]interface{}) Formatter

// ConsoleWriter parses the JSON input and writes it in an
// (optionally) colorized, human-friendly format to Out.
type ConsoleWriter struct {
Expand Down Expand Up @@ -81,14 +84,15 @@ type ConsoleWriter struct {
// FieldsExclude defines contextual fields to not display in output.
FieldsExclude []string

FormatTimestamp Formatter
FormatLevel Formatter
FormatCaller Formatter
FormatMessage Formatter
FormatFieldName Formatter
FormatFieldValue Formatter
FormatErrFieldName Formatter
FormatErrFieldValue Formatter
FormatTimestamp Formatter
FormatLevel Formatter
FormatCaller Formatter
FormatMessage Formatter
FormatMessageFromEvent FormatterFromEvent
FormatFieldName Formatter
FormatFieldValue Formatter
FormatErrFieldName Formatter
FormatErrFieldValue Formatter
// If this is configured it is used for "part" values and
// has precedence on FormatFieldValue
FormatPartValueByName FormatterByFieldName
Expand All @@ -101,9 +105,9 @@ type ConsoleWriter struct {
// NewConsoleWriter creates and initializes a new ConsoleWriter.
func NewConsoleWriter(options ...func(w *ConsoleWriter)) ConsoleWriter {
w := ConsoleWriter{
Out: os.Stdout,
TimeFormat: consoleDefaultTimeFormat,
PartsOrder: consoleDefaultPartsOrder(),
Out: os.Stdout,
TimeFormat: consoleDefaultTimeFormat,
PartsOrder: consoleDefaultPartsOrder(),
}

for _, opt := range options {
Expand Down Expand Up @@ -313,10 +317,12 @@ func (w ConsoleWriter) writePart(buf *bytes.Buffer, evt map[string]interface{},
f = w.FormatTimestamp
}
case MessageFieldName:
if w.FormatMessage == nil {
f = consoleDefaultFormatMessage(w.NoColor, evt[LevelFieldName])
} else {
if w.FormatMessageFromEvent != nil {
f = w.FormatMessageFromEvent(evt)
} else if w.FormatMessage != nil {
f = w.FormatMessage
} else {
f = consoleDefaultFormatMessage(w.NoColor, evt[LevelFieldName])
}
case CallerFieldName:
if w.FormatCaller == nil {
Expand Down
14 changes: 13 additions & 1 deletion console_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,22 @@ func ExampleConsoleWriter_customFormatters() {
out.FormatLevel = func(i interface{}) string { return strings.ToUpper(fmt.Sprintf("%-6s|", i)) }
out.FormatFieldName = func(i interface{}) string { return fmt.Sprintf("%s:", i) }
out.FormatFieldValue = func(i interface{}) string { return strings.ToUpper(fmt.Sprintf("%s", i)) }
out.FormatMessageFromEvent = func(evt map[string]interface{}) zerolog.Formatter {
return func(i interface{}) string {
level := evt[zerolog.LevelFieldName]
switch level {
case zerolog.LevelInfoValue, zerolog.LevelWarnValue, zerolog.LevelErrorValue, zerolog.LevelFatalValue, zerolog.LevelPanicValue:
return fmt.Sprintf("%s (%q formatted message)", i, level)
default:
return fmt.Sprintf("%s", i)
}
}
}

log := zerolog.New(out)

log.Info().Str("foo", "bar").Msg("Hello World")
// Output: <nil> INFO | Hello World foo:BAR
// Output: <nil> INFO | Hello World ("info" formatted message) foo:BAR
}

func ExampleConsoleWriter_partValueFormatter() {
Expand Down