blob: 93573948c16143fbd9e43480a69127abf62e03fd [file] [log] [blame]
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
}