32 lines
1.6 KiB
Markdown
32 lines
1.6 KiB
Markdown
# Issue #10: Advanced Access Logging Implementation
|
|
|
|
## Overview
|
|
Implemented a comprehensive access logging system that parses Caddy's structured JSON logs, provides a searchable/filterable UI, and allows for log downloads.
|
|
|
|
## Backend Implementation
|
|
- **Model**: `CaddyAccessLog` struct in `internal/models/log_entry.go` matching Caddy's JSON format.
|
|
- **Service**: `LogService` in `internal/services/log_service.go` updated to:
|
|
- Parse JSON logs line-by-line.
|
|
- Support filtering by search term (request/host/client_ip), host, and status code.
|
|
- Support pagination.
|
|
- Handle legacy/plain text logs gracefully.
|
|
- **API**: `LogsHandler` in `internal/api/handlers/logs_handler.go` updated to:
|
|
- Accept query parameters (`page`, `limit`, `search`, `host`, `status`).
|
|
- Provide a `Download` endpoint for raw log files.
|
|
|
|
## Frontend Implementation
|
|
- **Components**:
|
|
- `LogTable.tsx`: Displays logs in a structured table with status badges and duration formatting.
|
|
- `LogFilters.tsx`: Provides search input and dropdowns for Host and Status filtering.
|
|
- **Page**: `Logs.tsx` updated to integrate the new components and manage state (pagination, filters).
|
|
- **Dependencies**: Added `date-fns` for date formatting.
|
|
|
|
## Verification
|
|
- **Backend Tests**: `go test ./internal/services/... ./internal/api/handlers/...` passed.
|
|
- **Frontend Build**: `npm run build` passed.
|
|
- **Manual Check**: Verified log parsing and filtering logic via unit tests.
|
|
|
|
## Next Steps
|
|
- Ensure Caddy is configured to output JSON logs (already done in previous phases).
|
|
- Monitor log file sizes and rotation (handled by `lumberjack` in previous phases).
|