mirror of
https://github.com/yusing/godoxy.git
synced 2026-01-16 16:36:50 +01:00
64 lines
1.6 KiB
Go
64 lines
1.6 KiB
Go
package accesslog
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
maxmind "github.com/yusing/godoxy/internal/maxmind/types"
|
|
"github.com/yusing/goutils/task"
|
|
)
|
|
|
|
type MultiAccessLogger struct {
|
|
accessLoggers []AccessLogger
|
|
}
|
|
|
|
// NewMultiAccessLogger creates a new AccessLogger that writes to multiple writers.
|
|
//
|
|
// If there is only one writer, it will return a single AccessLogger.
|
|
// Otherwise, it will return a MultiAccessLogger that writes to all the writers.
|
|
func NewMultiAccessLogger(parent task.Parent, cfg AnyConfig, writers []Writer) AccessLogger {
|
|
if len(writers) == 1 {
|
|
return NewAccessLoggerWithIO(parent, writers[0], cfg)
|
|
}
|
|
|
|
accessLoggers := make([]AccessLogger, len(writers))
|
|
for i, writer := range writers {
|
|
accessLoggers[i] = NewAccessLoggerWithIO(parent, writer, cfg)
|
|
}
|
|
return &MultiAccessLogger{accessLoggers}
|
|
}
|
|
|
|
func (m *MultiAccessLogger) Config() *Config {
|
|
return m.accessLoggers[0].Config()
|
|
}
|
|
|
|
func (m *MultiAccessLogger) Log(req *http.Request, res *http.Response) {
|
|
for _, accessLogger := range m.accessLoggers {
|
|
accessLogger.Log(req, res)
|
|
}
|
|
}
|
|
|
|
func (m *MultiAccessLogger) LogError(req *http.Request, err error) {
|
|
for _, accessLogger := range m.accessLoggers {
|
|
accessLogger.LogError(req, err)
|
|
}
|
|
}
|
|
|
|
func (m *MultiAccessLogger) LogACL(info *maxmind.IPInfo, blocked bool) {
|
|
for _, accessLogger := range m.accessLoggers {
|
|
accessLogger.LogACL(info, blocked)
|
|
}
|
|
}
|
|
|
|
func (m *MultiAccessLogger) Flush() {
|
|
for _, accessLogger := range m.accessLoggers {
|
|
accessLogger.Flush()
|
|
}
|
|
}
|
|
|
|
func (m *MultiAccessLogger) Close() error {
|
|
for _, accessLogger := range m.accessLoggers {
|
|
accessLogger.Close()
|
|
}
|
|
return nil
|
|
}
|