-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathsysloger.go
92 lines (75 loc) · 2.61 KB
/
sysloger.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
// Copyright 2020-2024 NGR Softlab
package sysloger
import (
"crypto/tls"
"errors"
"fmt"
"net"
"time"
syslog "github.com/RackSec/srslog"
)
// SyslogParams syslog dial params
type SyslogParams struct {
Level int `json:"level"` // syslog level info/error/fatal
Host string `json:"host"` // host to send
Port int `json:"port"` // port to send
Protocol string `json:"protocol"` // tcp\udp
Priority syslog.Priority
Tag string `json:"tag"` // syslog tag
NeedTls bool
TlsConf *tls.Config
}
// NewSyslogWriter create new syslog writer with params and custom formatter
func NewSyslogWriter(params SyslogParams, formatter syslog.Formatter) (*syslog.Writer, error) {
var sysLogger *syslog.Writer
var err error
if params.NeedTls {
if params.TlsConf == nil {
logger.Error("ERROR nil TlsConf")
return nil, errors.New("nil TlsConf")
}
sysLogger, err = syslog.DialWithTLSConfig(params.Protocol,
fmt.Sprintf("%s:%d", params.Host, params.Port), params.Priority, params.Tag, params.TlsConf)
} else {
sysLogger, err = syslog.Dial(params.Protocol,
fmt.Sprintf("%s:%d", params.Host, params.Port), params.Priority, params.Tag)
}
if err != nil {
logger.Errorf("ERROR failed to dial syslog: %s", err.Error())
return nil, err
}
sysLogger.SetFormatter(formatter)
return sysLogger, nil
}
// NewSyslogWriterWithTimeout create new syslog writer with params and custom formatter + timeout
func NewSyslogWriterWithTimeout(params SyslogParams, formatter syslog.Formatter, timeout time.Duration) (*syslog.Writer, error) {
var sysLogger *syslog.Writer
var err error
var dial func(network, addr string) (net.Conn, error)
netDialer := new(net.Dialer)
netDialer.Timeout = timeout
if params.NeedTls {
if params.TlsConf == nil {
logger.Error("ERROR nil TlsConf")
return nil, errors.New("nil TlsConf")
}
dial = func(network, addr string) (net.Conn, error) {
// cannot use "network" here as it'll simply be "custom" which will fail
return tls.DialWithDialer(netDialer, params.Protocol, addr, params.TlsConf)
}
} else {
dial = func(network, addr string) (net.Conn, error) {
// cannot use "network" here as it'll simply be "custom" which will fail
return net.DialTimeout(params.Protocol, addr, timeout)
}
}
// param 'network' is contained in dial function (params.Protocol)
sysLogger, err = syslog.DialWithCustomDialer("custom", fmt.Sprintf("%s:%d", params.Host, params.Port),
params.Priority, params.Tag, dial)
if err != nil {
logger.Errorf("ERROR failed to dial syslog: %s", err.Error())
return nil, err
}
sysLogger.SetFormatter(formatter)
return sysLogger, nil
}