mirror of
https://github.com/yusing/godoxy.git
synced 2026-01-11 22:30:47 +01:00
3.7 KiB
3.7 KiB
Logging Package
Structured logging capabilities for GoDoxy, including application logging, HTTP access logging, and in-memory log streaming.
Overview
This package provides structured logging for GoDoxy with three distinct subsystems:
- Application Logger: Zerolog-based console logger with level-aware formatting
- Access Logger: HTTP request/response logging with configurable formats, filters, and destinations
- In-Memory Logger: Circular buffer with WebSocket streaming for real-time log viewing
Primary Consumers
internal/api/- HTTP request logginginternal/route/- Route-level access logging- WebUI - Real-time log streaming via WebSocket
Non-goals
- Log aggregation across multiple GoDoxy instances
- Persistent storage of application logs (access logs only)
- Structured logging output to external systems (Datadog, etc.)
Stability
Internal package with stable APIs. Exported interfaces (AccessLogger, MemLogger) are stable.
Packages
accesslog/
HTTP request/response logging with configurable formats, filters, and destinations.
See accesslog/README.md for full documentation.
memlogger/
In-memory circular buffer with WebSocket streaming for real-time log viewing.
See memlogger/README.md for full documentation.
Architecture
graph TB
subgraph "Application Logger"
L[logging.go] --> Z[zerolog.Logger]
Z --> CW[ConsoleWriter]
end
subgraph "Access Log Pipeline"
R[HTTP Request] --> M[Middleware]
M --> RR[ResponseRecorder]
RR --> F[Formatter]
F --> B[BufferedWriter]
B --> W[Writer]
W --> F1[File]
W --> S[Stdout]
end
subgraph "In-Memory Logger"
WB[Write Buffer]
WB --> RB[Circular Buffer<br/>16KB max]
RB --> WS[WebSocket]
WS --> C[Client]
end
Configuration Surface
Access Log Configuration
See accesslog/README.md for configuration options.
In-Memory Logger
See memlogger/README.md for configuration options.
Dependency and Integration Map
Internal Dependencies
internal/task/task.go- Lifetime managementinternal/maxmind/- IP geolocation for ACL loggingpkg/gperr- Error handling
External Dependencies
github.com/rs/zerolog- Structured logginggithub.com/puzpuzpuz/xsync/v4- Concurrent mapsgolang.org/x/time/rate- Error rate limiting
Observability
Logs
| Level | When |
|---|---|
Debug |
Buffer size adjustments, rotation checks |
Info |
Log rotation events, file opens/closes |
Error |
Write failures (rate-limited) |
Failure Modes and Recovery
| Failure Mode | Impact | Recovery |
|---|---|---|
| File write failure | Log entries dropped | Rate-limited error logging; task termination after 5 errors |
| Disk full | Rotation fails | Continue logging until space available |
| WebSocket client disconnect | Client misses logs | Client reconnects to receive new logs |
| Buffer overflow (memlogger) | Oldest entries truncated | Automatic truncation at 50% threshold |
Testing Notes
access_logger_test.go- Integration tests with mock file systemfile_logger_test.go- Reference counting testsback_scanner_test.go- Rotation boundary tests