github.com/maier/nomad@v0.4.1-0.20161110003312-a9e3d0b8549d/client/driver/executor/executor_unix.go (about) 1 // +build darwin dragonfly freebsd linux netbsd openbsd solaris windows 2 3 package executor 4 5 import ( 6 "fmt" 7 "io" 8 9 syslog "github.com/RackSec/srslog" 10 11 "github.com/hashicorp/nomad/client/driver/logging" 12 ) 13 14 func (e *UniversalExecutor) LaunchSyslogServer() (*SyslogServerState, error) { 15 // Ensure the context has been set first 16 if e.ctx == nil { 17 return nil, fmt.Errorf("SetContext must be called before launching the Syslog Server") 18 } 19 20 // configuring the task dir 21 if err := e.configureTaskDir(); err != nil { 22 return nil, err 23 } 24 25 e.syslogChan = make(chan *logging.SyslogMessage, 2048) 26 l, err := e.getListener(e.ctx.PortLowerBound, e.ctx.PortUpperBound) 27 if err != nil { 28 return nil, err 29 } 30 e.logger.Printf("[DEBUG] sylog-server: launching syslog server on addr: %v", l.Addr().String()) 31 if err := e.configureLoggers(); err != nil { 32 return nil, err 33 } 34 35 e.syslogServer = logging.NewSyslogServer(l, e.syslogChan, e.logger) 36 go e.syslogServer.Start() 37 go e.collectLogs(e.lre, e.lro) 38 syslogAddr := fmt.Sprintf("%s://%s", l.Addr().Network(), l.Addr().String()) 39 return &SyslogServerState{Addr: syslogAddr}, nil 40 } 41 42 func (e *UniversalExecutor) collectLogs(we io.Writer, wo io.Writer) { 43 for logParts := range e.syslogChan { 44 // If the severity of the log line is err then we write to stderr 45 // otherwise all messages go to stdout 46 if logParts.Severity == syslog.LOG_ERR { 47 e.lre.Write(logParts.Message) 48 e.lre.Write([]byte{'\n'}) 49 } else { 50 e.lro.Write(logParts.Message) 51 e.lro.Write([]byte{'\n'}) 52 } 53 } 54 }