Skip to content

Commit 6150719

Browse files
committed
add code
1 parent 6bf7ca0 commit 6150719

File tree

3 files changed

+166
-0
lines changed

3 files changed

+166
-0
lines changed

logger.go

+79
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
package logger
2+
3+
import (
4+
"context"
5+
"os"
6+
7+
log "github.com/sirupsen/logrus"
8+
)
9+
10+
//LogConfig is a configuration for logger
11+
type LogConfig struct {
12+
Title string `yaml:"title" json:"title"`
13+
Type string `yaml:"type" json:"type"`
14+
NetworkType string `yaml:"network type" json:"network type"`
15+
Host string `yaml:"host" json:"host"`
16+
Severity string `yaml:"severity" json:"severity"`
17+
Facility string `yaml:"facility" json:"facility"`
18+
Port string `yaml:"port" json:"port"`
19+
FilePath string `yaml:"file path" json:"file path"`
20+
FileName string `yaml:"file name" json:"file name"`
21+
DebugMode bool `yaml:"debug mode" json:"debug mode"`
22+
}
23+
24+
type ctxlog struct{}
25+
26+
//WithLogger put logger to context
27+
func WithLogger(ctx context.Context, logger *log.Logger) context.Context {
28+
return context.WithValue(ctx, ctxlog{}, logger)
29+
}
30+
31+
//Logger get logger from context
32+
func Logger(ctx context.Context) *log.Logger {
33+
// l, _ := ctx.Value("logger").(*log.Logger)
34+
l, ok := ctx.Value(ctxlog{}).(*log.Logger)
35+
if !ok {
36+
//return DefaultLogger
37+
l = initLogger(LogConfig{Type: "stdout", Severity: "LOG_INFO"})
38+
}
39+
return l
40+
}
41+
42+
func cleateLogger(config LogConfig) *log.Logger {
43+
logger := initLogger(config)
44+
return logger
45+
}
46+
47+
func initLogger(config LogConfig) *log.Logger {
48+
logger := log.New()
49+
switch config.Type {
50+
case "syslog":
51+
logger = initSyslogger(config)
52+
case "logstash":
53+
logger = initLogstashlogger(config)
54+
case "stdout":
55+
logger.Out = os.Stdout
56+
return logger
57+
case "stderr":
58+
logger.Out = os.Stderr
59+
return logger
60+
default:
61+
}
62+
if config.DebugMode {
63+
logger.Out = os.Stdout
64+
}
65+
logger.Formatter = &log.TextFormatter{}
66+
logger.Level = logLevel[config.Severity]
67+
return logger
68+
}
69+
70+
var logLevel = map[string]log.Level{
71+
"LOG_EMERG": log.PanicLevel,
72+
"LOG_ALERT": log.PanicLevel,
73+
"LOG_CRIT": log.FatalLevel,
74+
"LOG_ERR": log.ErrorLevel,
75+
"LOG_WARNING": log.WarnLevel,
76+
"LOG_NOTICE": log.InfoLevel,
77+
"LOG_INFO": log.InfoLevel,
78+
"LOG_DEBUG": log.DebugLevel,
79+
}

logstash.go

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package logger
2+
3+
import (
4+
"net"
5+
"strings"
6+
7+
"github.com/bshuster-repo/logrus-logstash-hook"
8+
log "github.com/sirupsen/logrus"
9+
)
10+
11+
func initLogstashlogger(config LogConfig) *log.Logger {
12+
logger := log.New()
13+
conn, err := net.Dial(config.NetworkType, config.Host+":"+config.Port)
14+
if err != nil {
15+
log.Fatal(err)
16+
}
17+
hook := logrustash.New(conn, logrustash.DefaultFormatter(log.Fields{"type": strings.ToLower(config.Title)}))
18+
if err != nil {
19+
log.Fatal(err)
20+
}
21+
logger.Hooks.Add(hook)
22+
//logger.Out = ioutil.Discard
23+
return logger
24+
}

syslogger.go

+63
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package logger
2+
3+
import (
4+
"io/ioutil"
5+
"log/syslog"
6+
7+
log "github.com/sirupsen/logrus"
8+
logrus_syslog "github.com/sirupsen/logrus/hooks/syslog"
9+
)
10+
11+
func initSyslogger(config LogConfig) *log.Logger {
12+
var logSeverity = map[string]syslog.Priority{
13+
"LOG_EMERG": syslog.LOG_EMERG,
14+
"LOG_ALERT": syslog.LOG_ALERT,
15+
"LOG_CRIT": syslog.LOG_CRIT,
16+
"LOG_ERR": syslog.LOG_ERR,
17+
"LOG_WARNING": syslog.LOG_WARNING,
18+
"LOG_NOTICE": syslog.LOG_NOTICE,
19+
"LOG_INFO": syslog.LOG_INFO,
20+
"LOG_DEBUG": syslog.LOG_DEBUG,
21+
}
22+
var logFacility = map[string]syslog.Priority{
23+
"LOG_KERN": syslog.LOG_KERN,
24+
"LOG_USER": syslog.LOG_USER,
25+
"LOG_MAIL": syslog.LOG_MAIL,
26+
"LOG_DAEMON": syslog.LOG_DAEMON,
27+
"LOG_AUTH": syslog.LOG_AUTH,
28+
"LOG_SYSLOG": syslog.LOG_SYSLOG,
29+
"LOG_LPR": syslog.LOG_LPR,
30+
"LOG_NEWS": syslog.LOG_NEWS,
31+
"LOG_UUCP": syslog.LOG_UUCP,
32+
"LOG_CRON": syslog.LOG_CRON,
33+
"LOG_AUTHPRIV": syslog.LOG_AUTHPRIV,
34+
"LOG_FTP": syslog.LOG_FTP,
35+
36+
"LOG_LOCAL0": syslog.LOG_LOCAL0,
37+
"LOG_LOCAL1": syslog.LOG_LOCAL1,
38+
"LOG_LOCAL2": syslog.LOG_LOCAL2,
39+
"LOG_LOCAL3": syslog.LOG_LOCAL3,
40+
"LOG_LOCAL4": syslog.LOG_LOCAL4,
41+
"LOG_LOCAL5": syslog.LOG_LOCAL5,
42+
"LOG_LOCAL6": syslog.LOG_LOCAL6,
43+
"LOG_LOCAL7": syslog.LOG_LOCAL7,
44+
}
45+
logger := log.New()
46+
hook, err := logrus_syslog.NewSyslogHook(
47+
config.NetworkType,
48+
config.Host+":"+config.Port,
49+
logSeverity[config.Severity]|logFacility[config.Facility],
50+
config.Title)
51+
if err != nil {
52+
log.Errorln(err)
53+
hook, err = logrus_syslog.NewSyslogHook(
54+
"", "", logSeverity[config.Severity]|logFacility[config.Facility],
55+
config.Title)
56+
57+
} else {
58+
logger.Hooks.Add(hook)
59+
}
60+
61+
logger.Out = ioutil.Discard
62+
return logger
63+
}

0 commit comments

Comments
 (0)