@@ -15,8 +15,9 @@ import (
1515 "bytes"
1616 "encoding/base64"
1717 "encoding/binary"
18- "github.com/tinylib/msgp/msgp"
1918 "math/rand"
19+
20+ "github.com/tinylib/msgp/msgp"
2021)
2122
2223const (
@@ -84,6 +85,7 @@ type msgToSend struct {
8485type Fluent struct {
8586 Config
8687
88+ dialer dialer
8789 stopRunning chan bool
8890 pending chan * msgToSend
8991 wg sync.WaitGroup
@@ -93,7 +95,20 @@ type Fluent struct {
9395}
9496
9597// New creates a new Logger.
96- func New (config Config ) (f * Fluent , err error ) {
98+ func New (config Config ) (* Fluent , error ) {
99+ if config .Timeout == 0 {
100+ config .Timeout = defaultTimeout
101+ }
102+ return newWithDialer (config , & net.Dialer {
103+ Timeout : config .Timeout ,
104+ })
105+ }
106+
107+ type dialer interface {
108+ Dial (string , string ) (net.Conn , error )
109+ }
110+
111+ func newWithDialer (config Config , d dialer ) (f * Fluent , err error ) {
97112 if config .FluentNetwork == "" {
98113 config .FluentNetwork = defaultNetwork
99114 }
@@ -106,9 +121,6 @@ func New(config Config) (f *Fluent, err error) {
106121 if config .FluentSocketPath == "" {
107122 config .FluentSocketPath = defaultSocketPath
108123 }
109- if config .Timeout == 0 {
110- config .Timeout = defaultTimeout
111- }
112124 if config .WriteTimeout == 0 {
113125 config .WriteTimeout = defaultWriteTimeout
114126 }
@@ -128,15 +140,20 @@ func New(config Config) (f *Fluent, err error) {
128140 fmt .Fprintf (os .Stderr , "fluent#New: AsyncConnect is now deprecated, please use Async instead" )
129141 config .Async = config .Async || config .AsyncConnect
130142 }
143+
131144 if config .Async {
132145 f = & Fluent {
133146 Config : config ,
147+ dialer : d ,
134148 pending : make (chan * msgToSend , config .BufferLimit ),
135149 }
136150 f .wg .Add (1 )
137151 go f .run ()
138152 } else {
139- f = & Fluent {Config : config }
153+ f = & Fluent {
154+ Config : config ,
155+ dialer : d ,
156+ }
140157 err = f .connect ()
141158 }
142159 return
@@ -340,12 +357,15 @@ func (f *Fluent) close(c net.Conn) {
340357
341358// connect establishes a new connection using the specified transport.
342359func (f * Fluent ) connect () (err error ) {
343-
344360 switch f .Config .FluentNetwork {
345361 case "tcp" :
346- f .conn , err = net .DialTimeout (f .Config .FluentNetwork , f .Config .FluentHost + ":" + strconv .Itoa (f .Config .FluentPort ), f .Config .Timeout )
362+ f .conn , err = f .dialer .Dial (
363+ f .Config .FluentNetwork ,
364+ f .Config .FluentHost + ":" + strconv .Itoa (f .Config .FluentPort ))
347365 case "unix" :
348- f .conn , err = net .DialTimeout (f .Config .FluentNetwork , f .Config .FluentSocketPath , f .Config .Timeout )
366+ f .conn , err = f .dialer .Dial (
367+ f .Config .FluentNetwork ,
368+ f .Config .FluentSocketPath )
349369 default :
350370 err = NewErrUnknownNetwork (f .Config .FluentNetwork )
351371 }
0 commit comments