nvidia-container-toolkit/vendor/github.com/tsaikd/KDGoLib/errutil/ConsoleFormatter.go

89 lines
2.2 KiB
Go
Raw Normal View History

package errutil
import (
"bytes"
"time"
)
// NewConsoleFormatter create JSONErrorFormatter instance
func NewConsoleFormatter(seperator string) *ConsoleFormatter {
return &ConsoleFormatter{
Seperator: seperator,
}
}
// ConsoleFormatter used to format error object in console readable
type ConsoleFormatter struct {
// seperator between errors, e.g. "; " will output "err1; err2; err3"
Seperator string
// output timestamp for prefix, e.g. "2006-01-02 15:04:05 "
TimeFormat string
// show error position with long filename
LongFile bool
// show error position with short filename
ShortFile bool
// show error position with line number, work with LongFile or ShortFile
Line bool
// replace package name for securify
ReplacePackages map[string]string
}
// Format error object
func (t *ConsoleFormatter) Format(errin error) (errtext string, err error) {
return t.FormatSkip(errin, 1)
}
// FormatSkip trace error line and format object
func (t *ConsoleFormatter) FormatSkip(errin error, skip int) (errtext string, err error) {
errobj := castErrorObject(nil, skip+1, errin)
if errobj == nil {
return "", nil
}
buffer := &bytes.Buffer{}
if t.TimeFormat != "" {
if _, errio := buffer.WriteString(time.Now().Format(t.TimeFormat)); errio != nil {
return buffer.String(), errio
}
}
if t.LongFile || t.ShortFile {
if _, errio := WriteCallInfo(buffer, errobj, t.LongFile, t.Line, t.ReplacePackages); errio != nil {
return buffer.String(), errio
}
if _, errio := buffer.WriteString(" "); errio != nil {
return buffer.String(), errio
}
}
if t.Seperator == "" {
if _, errio := buffer.WriteString(getErrorText(errin)); errio != nil {
return buffer.String(), errio
}
return buffer.String(), nil
}
firstError := true
if walkerr := WalkErrors(errobj, func(errloop ErrorObject) (stop bool, walkerr error) {
if !firstError {
if _, errio := buffer.WriteString(t.Seperator); errio != nil {
return true, errio
}
}
firstError = false
if _, errio := buffer.WriteString(getErrorText(errloop)); errio != nil {
return true, errio
}
return false, nil
}); walkerr != nil {
return buffer.String(), walkerr
}
return buffer.String(), nil
}
var _ ErrorFormatter = &ConsoleFormatter{}
var _ TraceFormatter = &ConsoleFormatter{}