package hws import ( "errors" "fmt" "net/url" "git.haelnorr.com/h/golib/hlog" ) type logger struct { logger *hlog.Logger ignoredPaths []string } // TODO: add tests to make sure all the fields are correctly set func (s *Server) LogError(err HWSError) { if s.logger == nil { return } switch err.Level { case ErrorDEBUG: s.logger.logger.Debug().Err(err.Error).Msg(err.Message) return case ErrorINFO: s.logger.logger.Info().Err(err.Error).Msg(err.Message) return case ErrorWARN: s.logger.logger.Warn().Err(err.Error).Msg(err.Message) return case ErrorERROR: s.logger.logger.Error().Err(err.Error).Msg(err.Message) return case ErrorFATAL: s.logger.logger.Fatal().Err(err.Error).Msg(err.Message) return case ErrorPANIC: s.logger.logger.Panic().Err(err.Error).Msg(err.Message) return default: s.logger.logger.Error().Err(err.Error).Msg(err.Message) } } func (server *Server) LogFatal(err error) { if err == nil { err = errors.New("LogFatal was called with a nil error") } if server.logger == nil { fmt.Printf("FATAL - %s: %s", "A fatal error has occured", err.Error()) return } server.logger.logger.Fatal().Err(err).Msg("A fatal error has occured") } // Server.AddLogger adds a logger to the server to use for request logging. func (server *Server) AddLogger(hlogger *hlog.Logger) error { if hlogger == nil { return errors.New("Unable to add logger, no logger provided") } server.logger = &logger{ logger: hlogger, } return nil } // Server.LoggerIgnorePaths sets a list of URL paths to ignore logging for. // Path should match the url.URL.Path field, see https://pkg.go.dev/net/url#URL // Useful for ignoring requests to CSS files or favicons func (server *Server) LoggerIgnorePaths(paths ...string) error { for _, path := range paths { u, err := url.Parse(path) valid := err == nil && u.Scheme == "" && u.Host == "" && u.RawQuery == "" && u.Fragment == "" if !valid { return fmt.Errorf("Invalid path: '%s'", path) } } server.logger.ignoredPaths = paths return nil }