/
logger.go
115 lines (98 loc) · 2.1 KB
/
logger.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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
package logger
import (
"log"
"os"
"strings"
"time"
)
const project = "go-autobuilder"
// Bash color macros for logging messages.
const reset = "\033[0m"
const (
err = "\033[38;5;196m"
info = "\033[38;5;266m"
warn = "\033[38;5;214m"
flag = "\033[38;5;8m"
name = "\033[38;5;157m"
msg = "\033[38;5;243m"
)
// Bash color macros for command types.
const (
modify = "\033[38;5;10m"
build = "\033[38;5;3m"
run = "\033[38;5;6m"
watch = "\033[38;5;7m"
export = "\033[38;5;7m"
interrupt = "\033[2;31m"
)
// Log struct.
type Log struct {
lvl string
cmd string
msg string
}
var bl = log.New(os.Stdout, join(name, project, flag), 0)
// Info returns new logger with logging level info.
func Info() *Log {
return &Log{lvl: "info"}
}
// Warn returns new logger with logging level warn.
func Warn() *Log {
return &Log{lvl: "warn"}
}
// Error returns new logger with logging level error.
func Error() *Log {
return &Log{lvl: "error"}
}
// Message set new logging message.
func (l *Log) Message(msg ...string) *Log {
l.msg = strings.Join(msg, " ")
return l
}
// Command set cmd for logging.
func (l *Log) Command(cmd, code string) *Log {
switch code {
case "M":
l.cmd = join(modify, code, reset, " ")
case "B":
l.cmd = join(build, code, reset, " ")
case "R":
l.cmd = join(run, code, reset, " ")
case "I":
l.cmd = join(interrupt, code, reset, " ")
case "W":
l.cmd = join(watch, code, reset, " ")
case "E":
l.cmd = join(export, code, reset, " ")
}
return l
}
// Log build new logging message and display.
func (l *Log) Log() {
out := join("[", time.Now().Format("15:04:05"), "]")
// Logging command.
if l.cmd != "" {
out = join(out, l.cmd)
}
// Logging level.
switch l.lvl {
case "error":
out = join(out, err)
case "info":
out = join(out, info)
case "warn":
out = join(out, warn)
}
// Logging message.
if l.msg != "" {
out = join(out, l.msg)
}
bl.Print(join(out, reset))
}
// FormattedMsg format logging message.
func FormattedMsg(message string) string {
return join(msg, "[", message, "]")
}
func join(msg ...string) string {
return strings.Join(msg, "")
}