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