From 792bb2cdafca7d5b39baff545a561e07ea9b67fb Mon Sep 17 00:00:00 2001 From: OneOfOne Date: Thu, 30 May 2024 19:11:46 -0500 Subject: [PATCH] log filtering --- log.go | 31 +++++++++++++++++++++++++++++++ server.go | 1 + server_test.go | 6 ++++-- 3 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 log.go diff --git a/log.go b/log.go new file mode 100644 index 0000000..c09ebf8 --- /dev/null +++ b/log.go @@ -0,0 +1,31 @@ +package gserv + +import ( + "bytes" + "io" + "log" + "os" +) + +type filteredLogger struct { + matches [][]byte + w io.Writer +} + +func (fl *filteredLogger) Write(p []byte) (n int, err error) { + for _, m := range fl.matches { + if bytes.Contains(p, m) { + return + } + } + return fl.w.Write(p) +} + +func FilteredLogger(flags int, msgs ...string) *log.Logger { + var fl = &filteredLogger{w: os.Stderr} + for _, m := range msgs { + fl.matches = append(fl.matches, []byte(m)) + } + + return log.New(fl, "gserv: ", flags) +} diff --git a/server.go b/server.go index c83d643..046c449 100644 --- a/server.go +++ b/server.go @@ -199,6 +199,7 @@ func (s *Server) Logf(f string, args ...any) { func (s *Server) logfStack(n int, f string, args ...any) { lg := s.opts.Logger + log.Println(lg) if lg == nil { lg = log.Default() } diff --git a/server_test.go b/server_test.go index 336d272..68547fe 100644 --- a/server_test.go +++ b/server_test.go @@ -21,6 +21,8 @@ func init() { log.SetFlags(0) } +var setErrLogger = SetErrLogger(FilteredLogger(log.Lshortfile, "/panic")) + var testData = []struct { path string *JSONResponse @@ -42,7 +44,7 @@ func newServerAndWait(t *testing.T, addr string) *Server { if testing.Verbose() { s = New() } else { - s = New(SetErrLogger(nil)) // don't need the spam with panics for the /panic handler + s = New(setErrLogger) // don't need the spam with panics for the /panic handler } if addr == "" { addr = "127.0.0.1:0" @@ -98,7 +100,7 @@ func TestServer(t *testing.T) { if testing.Verbose() { srv = New(SetCatchPanics(true)) } else { - srv = New(SetCatchPanics(true), SetErrLogger(nil)) // don't need the spam with panics for the /panic handler + srv = New(SetCatchPanics(true), setErrLogger) // don't need the spam with panics for the /panic handler } // srv.PanicHandler = func(ctx *Context, v any) {