mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
re-vendor syslog log driver
Signed-off-by: Brian Goff <cpuguy83@gmail.com>
(cherry picked from commit 00caf03132
)
Signed-off-by: Victor Vieux <victorvieux@gmail.com>
This commit is contained in:
parent
d99532f55d
commit
4da9f49339
3 changed files with 49 additions and 31 deletions
|
@ -61,7 +61,7 @@ clone git golang.org/x/sys eb2c74142fd19a79b3f237334c7384d5167b1b46 https://gith
|
|||
clone git github.com/docker/go-units 651fc226e7441360384da338d0fd37f2440ffbe3
|
||||
clone git github.com/docker/go-connections fa2850ff103453a9ad190da0df0af134f0314b3d
|
||||
clone git github.com/docker/engine-api 4eca04ae18f4f93f40196a17b9aa6e11262a7269
|
||||
clone git github.com/RackSec/srslog 365bf33cd9acc21ae1c355209865f17228ca534e
|
||||
clone git github.com/RackSec/srslog 456df3a81436d29ba874f3590eeeee25d666f8a5
|
||||
clone git github.com/imdario/mergo 0.2.1
|
||||
|
||||
#get libnetwork packages
|
||||
|
|
|
@ -77,10 +77,7 @@ func DialWithTLSConfig(network, raddr string, priority Priority, tag string, tls
|
|||
tlsConfig: tlsConfig,
|
||||
}
|
||||
|
||||
w.Lock()
|
||||
defer w.Unlock()
|
||||
|
||||
err := w.connect()
|
||||
_, err := w.connect()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
73
vendor/src/github.com/RackSec/srslog/writer.go
vendored
73
vendor/src/github.com/RackSec/srslog/writer.go
vendored
|
@ -8,8 +8,6 @@ import (
|
|||
|
||||
// A Writer is a connection to a syslog server.
|
||||
type Writer struct {
|
||||
sync.Mutex // guards conn
|
||||
|
||||
priority Priority
|
||||
tag string
|
||||
hostname string
|
||||
|
@ -19,28 +17,48 @@ type Writer struct {
|
|||
framer Framer
|
||||
formatter Formatter
|
||||
|
||||
mu sync.RWMutex // guards conn
|
||||
conn serverConn
|
||||
}
|
||||
|
||||
// getConn provides access to the internal conn, protected by a mutex. The
|
||||
// conn is threadsafe, so it can be used while unlocked, but we want to avoid
|
||||
// race conditions on grabbing a reference to it.
|
||||
func (w *Writer) getConn() serverConn {
|
||||
w.mu.RLock()
|
||||
conn := w.conn
|
||||
w.mu.RUnlock()
|
||||
return conn
|
||||
}
|
||||
|
||||
// setConn updates the internal conn, protected by a mutex.
|
||||
func (w *Writer) setConn(c serverConn) {
|
||||
w.mu.Lock()
|
||||
w.conn = c
|
||||
w.mu.Unlock()
|
||||
}
|
||||
|
||||
// connect makes a connection to the syslog server.
|
||||
// It must be called with w.mu held.
|
||||
func (w *Writer) connect() (err error) {
|
||||
if w.conn != nil {
|
||||
func (w *Writer) connect() (serverConn, error) {
|
||||
conn := w.getConn()
|
||||
if conn != nil {
|
||||
// ignore err from close, it makes sense to continue anyway
|
||||
w.conn.close()
|
||||
w.conn = nil
|
||||
conn.close()
|
||||
w.setConn(nil)
|
||||
}
|
||||
|
||||
var conn serverConn
|
||||
var hostname string
|
||||
var err error
|
||||
dialer := w.getDialer()
|
||||
conn, hostname, err = dialer.Call()
|
||||
if err == nil {
|
||||
w.conn = conn
|
||||
w.setConn(conn)
|
||||
w.hostname = hostname
|
||||
}
|
||||
|
||||
return
|
||||
return conn, nil
|
||||
} else {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
// SetFormatter changes the formatter function for subsequent messages.
|
||||
|
@ -59,14 +77,17 @@ func (w *Writer) Write(b []byte) (int, error) {
|
|||
return w.writeAndRetry(w.priority, string(b))
|
||||
}
|
||||
|
||||
// WriteWithPriority sends a log message with a custom priority
|
||||
func (w *Writer) WriteWithPriority(p Priority, b []byte) (int, error) {
|
||||
return w.writeAndRetry(p, string(b))
|
||||
}
|
||||
|
||||
// Close closes a connection to the syslog daemon.
|
||||
func (w *Writer) Close() error {
|
||||
w.Lock()
|
||||
defer w.Unlock()
|
||||
|
||||
if w.conn != nil {
|
||||
err := w.conn.close()
|
||||
w.conn = nil
|
||||
conn := w.getConn()
|
||||
if conn != nil {
|
||||
err := conn.close()
|
||||
w.setConn(nil)
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
|
@ -131,29 +152,29 @@ func (w *Writer) Debug(m string) (err error) {
|
|||
func (w *Writer) writeAndRetry(p Priority, s string) (int, error) {
|
||||
pr := (w.priority & facilityMask) | (p & severityMask)
|
||||
|
||||
w.Lock()
|
||||
defer w.Unlock()
|
||||
|
||||
if w.conn != nil {
|
||||
if n, err := w.write(pr, s); err == nil {
|
||||
conn := w.getConn()
|
||||
if conn != nil {
|
||||
if n, err := w.write(conn, pr, s); err == nil {
|
||||
return n, err
|
||||
}
|
||||
}
|
||||
if err := w.connect(); err != nil {
|
||||
|
||||
var err error
|
||||
if conn, err = w.connect(); err != nil {
|
||||
return 0, err
|
||||
}
|
||||
return w.write(pr, s)
|
||||
return w.write(conn, pr, s)
|
||||
}
|
||||
|
||||
// write generates and writes a syslog formatted string. It formats the
|
||||
// message based on the current Formatter and Framer.
|
||||
func (w *Writer) write(p Priority, msg string) (int, error) {
|
||||
func (w *Writer) write(conn serverConn, p Priority, msg string) (int, error) {
|
||||
// ensure it ends in a \n
|
||||
if !strings.HasSuffix(msg, "\n") {
|
||||
msg += "\n"
|
||||
}
|
||||
|
||||
err := w.conn.writeString(w.framer, w.formatter, p, w.hostname, w.tag, msg)
|
||||
err := conn.writeString(w.framer, w.formatter, p, w.hostname, w.tag, msg)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue