TLS support for TCP logger

This commit is contained in:
Christian Schwarz
2017-09-24 14:34:50 +02:00
parent 0cb5ffb48b
commit c1a5b04065
9 changed files with 171 additions and 2 deletions
+10 -1
View File
@@ -2,6 +2,7 @@ package cmd
import (
"context"
"crypto/tls"
"github.com/pkg/errors"
"github.com/zrepl/zrepl/logger"
"io"
@@ -29,6 +30,7 @@ type TCPOutlet struct {
Formatter EntryFormatter
Net, Address string
Dialer net.Dialer
TLS *tls.Config
RetryInterval time.Duration
conn net.Conn
retry time.Time
@@ -46,8 +48,14 @@ func (h *TCPOutlet) WriteEntry(ctx context.Context, e logger.Entry) error {
return nil // this is not an error toward the logger
//return errors.New("TCP hook reconnect prohibited by retry interval")
}
h.conn, err = h.Dialer.DialContext(ctx, h.Net, h.Address)
if h.TLS != nil {
h.conn, err = tls.DialWithDialer(&h.Dialer, h.Net, h.Address, h.TLS)
} else {
h.conn, err = h.Dialer.DialContext(ctx, h.Net, h.Address)
}
if err != nil {
h.conn = nil
h.retry = time.Now()
return errors.Wrap(err, "cannot dial")
}
@@ -55,6 +63,7 @@ func (h *TCPOutlet) WriteEntry(ctx context.Context, e logger.Entry) error {
_, err = h.conn.Write(b)
if err != nil {
return errors.Wrap(err, "cannot write")
h.conn.Close()
h.conn = nil
return err