mirror of
https://github.com/yusing/godoxy.git
synced 2026-03-12 05:11:35 +01:00
75 lines
1.7 KiB
Go
75 lines
1.7 KiB
Go
package accesslog
|
|
|
|
import (
|
|
"net/http"
|
|
"os"
|
|
|
|
"github.com/rs/zerolog"
|
|
maxmind "github.com/yusing/godoxy/internal/maxmind/types"
|
|
)
|
|
|
|
type ConsoleLogger struct {
|
|
cfg *Config
|
|
|
|
formatter ConsoleFormatter
|
|
}
|
|
|
|
var stdoutLogger = func() *zerolog.Logger {
|
|
l := zerolog.New(zerolog.NewConsoleWriter(func(w *zerolog.ConsoleWriter) {
|
|
w.Out = os.Stdout
|
|
w.TimeFormat = zerolog.TimeFieldFormat
|
|
w.FieldsOrder = []string{
|
|
"uri", "protocol", "type", "size",
|
|
"useragent", "query", "headers", "cookies",
|
|
"error", "iso_code", "time_zone",
|
|
}
|
|
})).With().Str("level", zerolog.InfoLevel.String()).Timestamp().Logger()
|
|
return &l
|
|
}()
|
|
|
|
// placeholder for console logger
|
|
var stdout File = &sharedFileHandle{}
|
|
|
|
func NewConsoleLogger(cfg *Config) AccessLogger {
|
|
if cfg == nil {
|
|
panic("accesslog: NewConsoleLogger called with nil config")
|
|
}
|
|
l := &ConsoleLogger{
|
|
cfg: cfg,
|
|
}
|
|
if cfg.req != nil {
|
|
l.formatter = ConsoleFormatter{cfg: &cfg.req.Fields}
|
|
}
|
|
return l
|
|
}
|
|
|
|
func (l *ConsoleLogger) Config() *Config {
|
|
return l.cfg
|
|
}
|
|
|
|
func (l *ConsoleLogger) LogRequest(req *http.Request, res *http.Response) {
|
|
if !l.cfg.ShouldLogRequest(req, res) {
|
|
return
|
|
}
|
|
|
|
l.formatter.LogRequestZeroLog(stdoutLogger, req, res)
|
|
}
|
|
|
|
func (l *ConsoleLogger) LogError(req *http.Request, err error) {
|
|
log := stdoutLogger.With().Err(err).Logger()
|
|
l.formatter.LogRequestZeroLog(&log, req, internalErrorResponse)
|
|
}
|
|
|
|
func (l *ConsoleLogger) LogACL(info *maxmind.IPInfo, blocked bool, reason string) {
|
|
ConsoleACLFormatter{}.LogACLZeroLog(stdoutLogger, info, blocked, reason)
|
|
}
|
|
|
|
func (l *ConsoleLogger) Flush() {
|
|
// No-op for console logger
|
|
}
|
|
|
|
func (l *ConsoleLogger) Close() error {
|
|
// No-op for console logger
|
|
return nil
|
|
}
|