@@ -17,8 +17,10 @@ package main
17
17
18
18
import (
19
19
"fmt"
20
+ "io/ioutil"
20
21
"os"
21
22
"path"
23
+ "path/filepath"
22
24
"syscall"
23
25
24
26
loads "github.com/go-openapi/loads"
@@ -31,6 +33,7 @@ import (
31
33
"github.com/haproxytech/dataplaneapi"
32
34
"github.com/haproxytech/dataplaneapi/configuration"
33
35
"github.com/haproxytech/dataplaneapi/operations"
36
+ "github.com/haproxytech/dataplaneapi/syslog"
34
37
)
35
38
36
39
// GitRepo ...
@@ -140,10 +143,6 @@ func startServer(cfg *configuration.Configuration) (reload configuration.AtomicB
140
143
log .Fatalln (err )
141
144
}
142
145
143
- log .Infof ("HAProxy Data Plane API %s %s%s" , GitTag , GitCommit , GitDirty )
144
- log .Infof ("Build from: %s" , GitRepo )
145
- log .Infof ("Build date: %s" , BuildTime )
146
-
147
146
configuration .HandlePIDFile (cfg .HAProxy )
148
147
149
148
if cfg .Mode .Load () == "cluster" {
@@ -173,6 +172,12 @@ func startServer(cfg *configuration.Configuration) (reload configuration.AtomicB
173
172
}
174
173
}
175
174
175
+ setupLogging (cfg )
176
+
177
+ log .Infof ("HAProxy Data Plane API %s %s%s" , GitTag , GitCommit , GitDirty )
178
+ log .Infof ("Build from: %s" , GitRepo )
179
+ log .Infof ("Build date: %s" , BuildTime )
180
+
176
181
err = cfg .Save ()
177
182
if err != nil {
178
183
log .Fatalln (err )
@@ -226,3 +231,67 @@ func startServer(cfg *configuration.Configuration) (reload configuration.AtomicB
226
231
227
232
return reload
228
233
}
234
+
235
+ func setupLogging (cfg * configuration.Configuration ) {
236
+ appLogger := log .StandardLogger ()
237
+ configureLogger (appLogger , cfg .Logging , func (opts configuration.SyslogOptions ) configuration.SyslogOptions {
238
+ opts .SyslogMsgID = "app"
239
+ return opts
240
+ }(cfg .Syslog ))
241
+
242
+ accLogger := log .StandardLogger ()
243
+ configureLogger (accLogger , cfg .Logging , func (opts configuration.SyslogOptions ) configuration.SyslogOptions {
244
+ opts .SyslogMsgID = "accesslog"
245
+ return opts
246
+ }(cfg .Syslog ))
247
+
248
+ dataplaneapi .AppLogger = appLogger
249
+ dataplaneapi .AccLogger = accLogger
250
+ }
251
+
252
+ func configureLogger (logger * log.Logger , loggingOptions configuration.LoggingOptions , syslogOptions configuration.SyslogOptions ) {
253
+ switch loggingOptions .LogFormat {
254
+ case "text" :
255
+ logger .SetFormatter (& log.TextFormatter {
256
+ FullTimestamp : true ,
257
+ DisableColors : true ,
258
+ })
259
+ case "JSON" :
260
+ logger .SetFormatter (& log.JSONFormatter {})
261
+ }
262
+
263
+ switch loggingOptions .LogTo {
264
+ case "stdout" :
265
+ logger .SetOutput (os .Stdout )
266
+ case "file" :
267
+ dir := filepath .Dir (loggingOptions .LogFile )
268
+ if err := os .MkdirAll (dir , os .ModePerm ); err != nil {
269
+ log .Warning ("Error opening log file, no logging implemented: " + err .Error ())
270
+ }
271
+ //nolint:govet
272
+ logFile , err := os .OpenFile (loggingOptions .LogFile , os .O_APPEND | os .O_CREATE | os .O_RDWR , 0666 )
273
+ if err != nil {
274
+ log .Warning ("Error opening log file, no logging implemented: " + err .Error ())
275
+ }
276
+ log .SetOutput (logFile )
277
+ case "syslog" :
278
+ logger .SetOutput (ioutil .Discard )
279
+ hook , err := syslog .NewRFC5424Hook (syslogOptions )
280
+ if err != nil {
281
+ log .Warningf ("Error configuring Syslog logging: %s" , err .Error ())
282
+ break
283
+ }
284
+ logger .AddHook (hook )
285
+ }
286
+
287
+ switch loggingOptions .LogLevel {
288
+ case "debug" :
289
+ logger .SetLevel (log .DebugLevel )
290
+ case "info" :
291
+ logger .SetLevel (log .InfoLevel )
292
+ case "warning" :
293
+ logger .SetLevel (log .WarnLevel )
294
+ case "error" :
295
+ logger .SetLevel (log .ErrorLevel )
296
+ }
297
+ }
0 commit comments