-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathlogging.go
52 lines (44 loc) · 1020 Bytes
/
logging.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
package main
import (
"io"
"io/ioutil"
"log/syslog"
"os"
log "github.com/Sirupsen/logrus"
logrus_syslog "github.com/Sirupsen/logrus/hooks/syslog"
)
type writerHook struct {
out io.Writer
}
func (hook *writerHook) Fire(entry *log.Entry) error {
line, _ := entry.String()
io.WriteString(hook.out, line)
return nil
}
func (hook *writerHook) Levels() []log.Level {
return log.AllLevels
}
type programFormat struct{}
func (f *programFormat) Format(e *log.Entry) ([]byte, error) {
buf := []byte(e.Message)
buf = append(buf, byte('\n'))
return buf, nil
}
func pickHook(out logoutput) log.Hook {
switch out {
case sysLog:
hook, err := logrus_syslog.NewSyslogHook("", "", syslog.LOG_DAEMON, "awslogs")
if err != nil {
log.Fatal("Unable to connect to local syslog daemon")
}
return hook
case stdOut:
return &writerHook{out: os.Stdout}
case stdErr:
return &writerHook{out: os.Stderr}
case null:
return &writerHook{out: ioutil.Discard}
default:
return &writerHook{out: os.Stderr}
}
}