Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use io.Discard instead of /dev/null for discarding output #354

Merged
merged 8 commits into from
Aug 31, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 8 additions & 4 deletions loggers/concurrent_writer.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,15 +29,19 @@ type concurrentWriter struct {
}

func (cl *concurrentWriter) Init(c types.Config) error {
fileName := c.Get("auditlog_file", "/dev/null").(string)
cl.auditFileMode = c.Get("auditlog_file_mode", fs.FileMode(0644)).(fs.FileMode)
cl.auditDir = c.Get("auditlog_dir", "").(string)
cl.auditDirMode = c.Get("auditlog_dir_mode", fs.FileMode(0755)).(fs.FileMode)
cl.formatter = c.Get("auditlog_formatter", nativeFormatter).(LogFormatter)
cl.mux = &sync.RWMutex{}
faudit, err := os.OpenFile(fileName, os.O_CREATE|os.O_WRONLY|os.O_APPEND, cl.auditFileMode)
if err != nil {
return err

faudit := io.Discard
if fileName := c.Get("auditlog_file", "").(string); fileName != "" {
f, err := os.OpenFile(fileName, os.O_CREATE|os.O_WRONLY|os.O_APPEND, cl.auditFileMode)
if err != nil {
return err
}
faudit = f
}
mw := io.MultiWriter(faudit)
cl.auditlogger = log.New(mw, "", 0)
Expand Down
32 changes: 25 additions & 7 deletions loggers/serial_writer.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
package loggers

import (
"io"
"io/fs"
"log"
"os"
Expand All @@ -16,22 +17,31 @@ import (

// serialWriter is used to store logs in a single file
type serialWriter struct {
file *os.File
file io.Closer
log log.Logger
formatter LogFormatter
}

func (sl *serialWriter) Init(c types.Config) error {
fileName := c.Get("auditlog_file", "/dev/null").(string)
fileMode := c.Get("auditlog_file_mode", fs.FileMode(0644)).(fs.FileMode)
sl.formatter = c.Get("auditlog_formatter", nativeFormatter).(LogFormatter)
var err error
sl.file, err = os.OpenFile(fileName, os.O_APPEND|os.O_CREATE|os.O_WRONLY, fileMode)
if err != nil {
return err

fileName := c.Get("auditlog_file", "").(string)
var file io.Writer
if fileName != "" {
f, err := os.OpenFile(fileName, os.O_APPEND|os.O_CREATE|os.O_WRONLY, fileMode)
if err != nil {
return err
}
file = f
sl.file = f
} else {
file = io.Discard
// Nothing to close so just set a no-op
sl.file = noopCloser{}
}
sl.log.SetFlags(0)
sl.log.SetOutput(sl.file)
sl.log.SetOutput(file)
return nil
}

Expand All @@ -50,3 +60,11 @@ func (sl *serialWriter) Close() error {
}

var _ LogWriter = (*serialWriter)(nil)

type noopCloser struct{}

var _ io.Closer = (*noopCloser)(nil)

jcchavezs marked this conversation as resolved.
Show resolved Hide resolved
func (nc noopCloser) Close() error {
return nil
}
6 changes: 4 additions & 2 deletions waf.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ package coraza
import (
"context"
"fmt"
"io"
"io/fs"
"log"
"os"
Expand Down Expand Up @@ -416,6 +417,7 @@ func (w *Waf) NewTransaction(ctx context.Context) *Transaction {
// note: this is not thread safe
func (w *Waf) SetDebugLogPath(path string) error {
if path == "" {
w.Logger.SetOutput(io.Discard)
fzipi marked this conversation as resolved.
Show resolved Hide resolved
return nil
}
f, err := os.OpenFile(path, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
Expand Down Expand Up @@ -453,11 +455,11 @@ func NewWaf() *Waf {
RequestBodyAccess: false,
Logger: logger,
}
// We initialize a basic audit log writer to /dev/null
// We initialize a basic audit log writer that discards output
if err := logWriter.Init(types.Config{}); err != nil {
fmt.Println(err)
}
if err := waf.SetDebugLogPath("/dev/null"); err != nil {
if err := waf.SetDebugLogPath(""); err != nil {
fmt.Println(err)
}
waf.Logger.Debug("a new waf instance was created")
Expand Down