/
log.go
71 lines (59 loc) · 1.45 KB
/
log.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
// Package log initialize and configure a logrus logger.
package log
import (
"io"
"io/ioutil"
"os"
"log/syslog"
"github.com/sirupsen/logrus"
ls "github.com/sirupsen/logrus/hooks/syslog"
"github.com/sirupsen/logrus/hooks/test"
)
// New initialize logrus and return a new logger.
func New(logLevel string, logServer string, logOutput string) *logrus.Logger {
level, err := logrus.ParseLevel(logLevel)
if err != nil {
level = logrus.InfoLevel
}
output, hook := getOutput(logServer, logOutput)
formatter := &logrus.TextFormatter{
FullTimestamp: true,
TimestampFormat: "2006-01-02 15:04:05",
}
log := &logrus.Logger{
Out: output,
Formatter: formatter,
Hooks: make(logrus.LevelHooks),
Level: level,
}
if logOutput == "syslog" || logOutput == "test" {
log.Hooks.Add(hook)
}
return log
}
func getOutput(logServer string, logOutput string) (io.Writer, logrus.Hook) {
var output io.Writer
var hook logrus.Hook
var err error
switch logOutput {
case "stdout":
output = os.Stdout
case "stderr":
output = os.Stderr
case "test":
output = ioutil.Discard
_, hook = test.NewNullLogger()
case "syslog":
output = os.Stderr // does not matter ?
if logServer == "" {
panic("syslog output needs a log server (ie. 127.0.0.1:514)")
}
hook, err = ls.NewSyslogHook("udp", logServer, syslog.LOG_INFO, "kube-deployments-notifier")
if err != nil {
panic(err)
}
default:
output = os.Stderr
}
return output, hook
}