-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathformatter.go
95 lines (69 loc) · 1.79 KB
/
formatter.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
package consolus
import (
"bytes"
"github.com/sirupsen/logrus"
"golang.org/x/crypto/ssh/terminal"
"io"
"os"
"sync"
"strings"
"fmt"
)
type ConsoleFormatter struct {
// Set to true to bypass checking for a TTY before outputting colors.
ForceColors bool
// Force disabling colors. For a TTY colors are enabled by default.
DisableColors bool
// Force formatted layout, even for non-TTY output.
ForceFormatting bool
// Whether the logger's out is to a terminal.
isTerminal bool
// Timestamp format to use for display when a full timestamp is printed.
TimestampFormat string
// The fields are sorted by default for a consistent output. For applications
// that log extremely frequently and don't use the JSON formatter this may not
// be desired.
DisableSorting bool
sync.Once
}
func (f *ConsoleFormatter) init(entry *logrus.Entry) {
if entry.Logger != nil {
f.isTerminal = f.checkIfTerminal(entry.Logger.Out)
}
}
func (f *ConsoleFormatter) checkIfTerminal(w io.Writer) bool {
switch v := w.(type) {
case *os.File:
return terminal.IsTerminal(int(v.Fd()))
default:
return false
}
}
func (f *ConsoleFormatter) Format(entry *logrus.Entry) ([]byte, error) {
var b *bytes.Buffer
if entry.Buffer != nil {
b = entry.Buffer
} else {
b = &bytes.Buffer{}
}
f.Do(func() { f.init(entry) })
isFormatted := f.ForceFormatting || !f.isTerminal
timestampFormat := f.TimestampFormat
if timestampFormat == "" {
timestampFormat = defaultTimestampFormat
}
if isFormatted {
f.printFormatted(b, entry)
} else {
f.printConsole(b, entry)
}
b.WriteByte('\n')
return b.Bytes(), nil
}
func (f *ConsoleFormatter) printFormatted(b *bytes.Buffer, entry * logrus.Entry)
{
printConsole(b, formattedEntry)
}
func (f *ConsoleFormatter) printConsole(b *bytes.Buffer, entry * logrus.Entry)
{
}