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  }