forked from jshiffer/matterbridge
64 lines
1.5 KiB
Go
64 lines
1.5 KiB
Go
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
|
// See LICENSE.txt for license information.
|
|
|
|
package mlog
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
"fmt"
|
|
"os"
|
|
)
|
|
|
|
// defaultLog manually encodes the log to STDERR, providing a basic, default logging implementation
|
|
// before mlog is fully configured.
|
|
func defaultLog(level Level, msg string, fields ...Field) {
|
|
mFields := make(map[string]string)
|
|
buf := &bytes.Buffer{}
|
|
|
|
for _, fld := range fields {
|
|
buf.Reset()
|
|
fld.ValueString(buf, shouldQuote)
|
|
mFields[fld.Key] = buf.String()
|
|
}
|
|
|
|
log := struct {
|
|
Level string `json:"level"`
|
|
Message string `json:"msg"`
|
|
Fields map[string]string `json:"fields,omitempty"`
|
|
}{
|
|
level.Name,
|
|
msg,
|
|
mFields,
|
|
}
|
|
|
|
if b, err := json.Marshal(log); err != nil {
|
|
fmt.Fprintf(os.Stderr, `{"level":"error","msg":"failed to encode log message"}%s`, "\n")
|
|
} else {
|
|
fmt.Fprintf(os.Stderr, "%s\n", b)
|
|
}
|
|
}
|
|
|
|
func defaultIsLevelEnabled(level Level) bool {
|
|
return true
|
|
}
|
|
|
|
func defaultCustomMultiLog(lvl []Level, msg string, fields ...Field) {
|
|
for _, level := range lvl {
|
|
defaultLog(level, msg, fields...)
|
|
}
|
|
}
|
|
|
|
// shouldQuote returns true if val contains any characters that require quotations.
|
|
func shouldQuote(val string) bool {
|
|
for _, c := range val {
|
|
if !((c >= '0' && c <= '9') ||
|
|
(c >= 'a' && c <= 'z') ||
|
|
(c >= 'A' && c <= 'Z') ||
|
|
c == '-' || c == '.' || c == '_' || c == '/' || c == '@' || c == '^' || c == '+') {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|