62 lines
1.5 KiB
Go
62 lines
1.5 KiB
Go
|
package log
|
||
|
|
||
|
var formatterCreators = map[string]CreateFormatterFunc{}
|
||
|
|
||
|
// CreateFormatterFunc is a function which creates a new instance
|
||
|
// of a Formatter.
|
||
|
type CreateFormatterFunc func(name, kind string) (Formatter, error)
|
||
|
|
||
|
// createFormatter creates formatters. It accepts a kind in {"text", "JSON"}
|
||
|
// which correspond to TextFormatter and JSONFormatter, and the name of the
|
||
|
// logger.
|
||
|
func createFormatter(name string, kind string) (Formatter, error) {
|
||
|
if kind == FormatEnv {
|
||
|
kind = logxiFormat
|
||
|
}
|
||
|
if kind == "" {
|
||
|
kind = FormatText
|
||
|
}
|
||
|
|
||
|
fn := formatterCreators[kind]
|
||
|
if fn == nil {
|
||
|
fn = formatterCreators[FormatText]
|
||
|
}
|
||
|
|
||
|
formatter, err := fn(name, kind)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
// custom formatter may have not returned a formatter
|
||
|
if formatter == nil {
|
||
|
formatter, err = formatFactory(name, FormatText)
|
||
|
}
|
||
|
return formatter, err
|
||
|
}
|
||
|
|
||
|
func formatFactory(name string, kind string) (Formatter, error) {
|
||
|
var formatter Formatter
|
||
|
var err error
|
||
|
switch kind {
|
||
|
default:
|
||
|
formatter = NewTextFormatter(name)
|
||
|
case FormatHappy:
|
||
|
formatter = NewHappyDevFormatter(name)
|
||
|
case FormatText:
|
||
|
formatter = NewTextFormatter(name)
|
||
|
case FormatJSON:
|
||
|
formatter = NewJSONFormatter(name)
|
||
|
}
|
||
|
return formatter, err
|
||
|
}
|
||
|
|
||
|
// RegisterFormatFactory registers a format factory function.
|
||
|
func RegisterFormatFactory(kind string, fn CreateFormatterFunc) {
|
||
|
if kind == "" {
|
||
|
panic("kind is empty string")
|
||
|
}
|
||
|
if fn == nil {
|
||
|
panic("creator is nil")
|
||
|
}
|
||
|
formatterCreators[kind] = fn
|
||
|
}
|