mirror of
https://github.com/yusing/godoxy.git
synced 2026-02-25 03:44:54 +01:00
Major refactoring of the access logging infrastructure to improve code organization and add proper console/stdout logging support. - Renamed `Writer` interface to `File` and consolidated with `SupportRotate` - Renamed `Log(req, res)` to `LogRequest(req, res)` for clarity - Added new `ConsoleLogger` with zerolog console writer for formatted stdout output - Moved type definitions to new `types.go` file - Changed buffer handling from `[]byte` returns to `*bytes.Buffer` parameters - Renamed internal files for clarity (`access_logger.go` → `file_access_logger.go`) - Fixed fileserver access logging timing: moved logging after handler execution with defer - Correct response handling in Fileserver - Remove deprecated field `buffer_size` - Simplify and removed unnecessary code All callers have been updated to use the new APIs.
74 lines
1.6 KiB
Go
74 lines
1.6 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) {
|
|
ConsoleACLFormatter{}.LogACLZeroLog(stdoutLogger, info, blocked)
|
|
}
|
|
|
|
func (l *ConsoleLogger) Flush() {
|
|
// No-op for console logger
|
|
}
|
|
|
|
func (l *ConsoleLogger) Close() error {
|
|
// No-op for console logger
|
|
return nil
|
|
}
|