From 63b6a5e7b5350af349fc00de79031a47bd845072 Mon Sep 17 00:00:00 2001 From: sven Date: Tue, 16 Apr 2024 07:02:26 +0200 Subject: [PATCH] File logging: stdout and stderr (#105) Use the OS stdout and stderr for /dev/stdout and /dev/stderr. I case of systemd stdout and stderr might be redirected to a unix socket and the file open fails. Using the OS stdout and stderr avoids that problem. Signed-off-by: Sven Auhagen --- internal/spoa.go | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/internal/spoa.go b/internal/spoa.go index d2a7f37..841758f 100644 --- a/internal/spoa.go +++ b/internal/spoa.go @@ -9,6 +9,7 @@ import ( "os" "strings" "time" + "io" "github.com/bluele/gcache" "github.com/corazawaf/coraza-spoa/config" @@ -161,10 +162,21 @@ func New(conf *config.Config) (*SPOA, error) { if err != nil { level = zap.InfoLevel } - f, err := os.OpenFile(cfg.LogFile, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666) - if err != nil { - return nil, err + + var f io.Writer + switch cfg.LogFile { + case "/dev/stdout": + f = os.Stdout + case "/dev/stderr": + f = os.Stderr + default: + ff, err := os.OpenFile(cfg.LogFile, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666) + if err != nil { + return nil, err + } + f = ff } + core := zapcore.NewTee( zapcore.NewCore(fileEncoder, zapcore.AddSync(f), level), )