45 lines
1012 B
Go
45 lines
1012 B
Go
package hws
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"net/url"
|
|
|
|
"github.com/rs/zerolog"
|
|
)
|
|
|
|
type logger struct {
|
|
logger *zerolog.Logger
|
|
ignoredPaths []string
|
|
}
|
|
|
|
// Server.AddLogger adds a logger to the server to use for request logging.
|
|
func (server *Server) AddLogger(zlogger *zerolog.Logger) error {
|
|
if zlogger == nil {
|
|
return errors.New("Unable to add logger, no logger provided")
|
|
}
|
|
server.logger = &logger{
|
|
logger: zlogger,
|
|
}
|
|
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
|
|
}
|