54 lines
1.1 KiB
Go
54 lines
1.1 KiB
Go
|
package syslog
|
||
|
|
||
|
import (
|
||
|
"gopkg.in/mcuadros/go-syslog.v2"
|
||
|
|
||
|
"github.com/genofire/logmania/lib"
|
||
|
"github.com/genofire/logmania/log"
|
||
|
"github.com/genofire/logmania/receive"
|
||
|
)
|
||
|
|
||
|
type Receiver struct {
|
||
|
channel syslog.LogPartsChannel
|
||
|
exportChannel chan *log.Entry
|
||
|
server *syslog.Server
|
||
|
receive.Receiver
|
||
|
}
|
||
|
|
||
|
func Init(config *lib.ReceiveConfig, exportChannel chan *log.Entry) receive.Receiver {
|
||
|
channel := make(syslog.LogPartsChannel)
|
||
|
handler := syslog.NewChannelHandler(channel)
|
||
|
|
||
|
server := syslog.NewServer()
|
||
|
server.SetFormat(syslog.RFC5424)
|
||
|
server.SetHandler(handler)
|
||
|
server.ListenUDP(config.Syslog.Bind)
|
||
|
|
||
|
log.Info("syslog binded to: ", config.Syslog.Bind)
|
||
|
|
||
|
return &Receiver{
|
||
|
channel: channel,
|
||
|
server: server,
|
||
|
exportChannel: exportChannel,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (rc *Receiver) Listen() {
|
||
|
rc.server.Boot()
|
||
|
log.Info("boot syslog")
|
||
|
go func(channel syslog.LogPartsChannel) {
|
||
|
for logParts := range channel {
|
||
|
rc.exportChannel <- toLogEntry(logParts)
|
||
|
}
|
||
|
}(rc.channel)
|
||
|
}
|
||
|
|
||
|
func (rc *Receiver) Close() {
|
||
|
rc.server.Kill()
|
||
|
rc.server.Wait()
|
||
|
}
|
||
|
|
||
|
func init() {
|
||
|
receive.AddReceiver("syslog", Init)
|
||
|
}
|