/
handler_redis.go
83 lines (72 loc) 路 1.54 KB
/
handler_redis.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
// +build h_redis !h_clean
package logit
import (
"fmt"
"time"
"github.com/BurntSushi/toml"
logredis "github.com/rogierlommers/logrus-redis-hook"
)
type RedisHandler struct {
BaseHandler
Host string
Port int
Password string
Key string
Format string
App string
SourceHost string `toml:"source_host"`
Database int
TTL string
}
func NewRedisHandler() RedisHandler {
return RedisHandler{
BaseHandler: NewBaseHandler(),
Host: "localhost",
Port: 6379,
TTL: "1h",
Key: "logit",
}
}
func (config RedisHandler) Parse() (Handler, error) {
ttl, err := time.ParseDuration(config.TTL)
if err != nil {
return nil, fmt.Errorf("cannot parse ttl: %v", err)
}
hook, err := logredis.NewHook(logredis.HookConfig{
Hostname: config.SourceHost,
Port: config.Port,
Password: config.Password,
Key: config.Key,
Format: config.Format,
App: config.App,
Host: config.Host,
DB: config.Database,
TTL: int(ttl.Seconds()),
})
if err != nil {
return nil, err
}
h, err := config.BaseHandler.Parse()
if err != nil {
return nil, err
}
h.SetHook(hook)
return h, nil
}
func init() {
RegisterParser("redis", func(
meta toml.MetaData,
primitive toml.Primitive,
) (Handler, error) {
fconf := NewRedisHandler()
err := meta.PrimitiveDecode(primitive, &fconf)
if err != nil {
return nil, fmt.Errorf("parse: %v", err)
}
handler, err := fconf.Parse()
if err != nil {
return nil, fmt.Errorf("init: %v", err)
}
return handler, nil
})
}