Files
Charon/ISSUE_10_LOGGING_IMPLEMENTATION.md
2025-11-20 13:20:06 -05:00

1.6 KiB

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).