This repository has been archived by the owner on Aug 23, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathclog.go
130 lines (113 loc) · 2.86 KB
/
clog.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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
// clog
// a super simple go logging library
// github.com/kenellorando/clog
// Log Levels: Debug (5), Info (4), Warn (3), Error (2), Fatal (1), Disabled (0)
// The default is 5 (debug) unless verbosity is set with clog.Level
// args for Debug, Info, Warn: (module string, message string)
// args for Error, Fatal: (module string, message string, err error)
// All log messages are printed to stdout
package clog
import (
"fmt"
"os"
"strings"
"time"
)
// Default verbosity, unless Level is called
var verbosity = 5
var err error
// LogData - Data contained within a log message
// 'Err' is only utilized in Error and Fatal level messages
type LogData struct {
Time string
Level string
Module string
Message string
Err error
}
// Level - Receives and sets a logging level
// Valid log levels are [0-5]
func Level(logLevel int) int {
// Sets the verbosity level to the given init value
// and returns a good status
if logLevel < 0 || logLevel > 5 {
// Default to 0 (disabled) if a bad value was received
verbosity = 0
} else {
verbosity = logLevel
}
return verbosity
}
// Debug - lowest level log
func Debug(module string, message string) {
if verbosity == 5 {
setLogData(timeNow(), "Debug", module, message, err)
}
}
// Info - functional information level log
func Info(module string, message string) {
if verbosity >= 4 {
setLogData(timeNow(), "Info", module, message, err)
}
}
// Warn - functional warning level log
func Warn(module string, message string) {
if verbosity >= 3 {
setLogData(timeNow(), "Warn", module, message, err)
}
}
// Error - functional error level log
func Error(module string, message string, err error) {
if verbosity >= 2 {
setLogData(timeNow(), "Error", module, message, err)
}
}
// Fatal - application failure level log
// Calls Exit
func Fatal(module string, message string, err error) {
if verbosity >= 1 {
setLogData(timeNow(), "Fatal", module, message, err)
}
os.Exit(1)
}
// Returns the date-time in specified format
func timeNow() string {
dt := time.Now()
return dt.Format("2006/01/02 15:04:05")
}
// Set data passed by log level methods
func setLogData(time string, level string, module string, message string, err error) {
logData := LogData{
Time: time,
Level: level,
Module: module,
Message: message,
Err: err,
}
printLogMessage(logData)
}
// Print the formatted log message to stdout
func printLogMessage(ld LogData) {
// If there is an error set in logData,
// Print the error with the log message
if ld.Err != nil {
logMessage := fmt.Sprintf(
"%v [%5v][%s] %s\n%v\n",
ld.Time,
strings.ToUpper(ld.Level),
strings.ToUpper(ld.Module),
ld.Message,
ld.Err,
)
fmt.Printf(logMessage)
} else {
logMessage := fmt.Sprintf(
"%v [%-5v][%s] %s\n",
ld.Time,
strings.ToUpper(ld.Level),
strings.ToUpper(ld.Module),
ld.Message,
)
fmt.Printf(logMessage)
}
}