# Logrotate configuration for TimeTracker logs # # Installation on Linux: # 1. Copy this file to /etc/logrotate.d/timetracker # 2. Adjust the path to match your installation # 3. Test: sudo logrotate -d /etc/logrotate.d/timetracker # 4. Force rotation: sudo logrotate -f /etc/logrotate.d/timetracker # # For Docker deployments: # - Mount logs directory: -v ./logs:/app/logs # - This config applies to the host logs directory /path/to/TimeTracker/logs/*.jsonl { # Rotate daily daily # Keep 7 days of logs rotate 7 # Compress old logs compress # Delay compression until next rotation delaycompress # Don't error if log file is missing missingok # Don't rotate if log is empty notifempty # Copy and truncate instead of moving (allows app to keep writing) copytruncate # Set permissions on rotated logs create 0640 root root # Maximum age of logs (30 days) maxage 30 # Rotate if larger than 100MB size 100M # Shared scripts section for all log files sharedscripts # Optional: Run a command after rotation postrotate # Example: Send logs to long-term storage # aws s3 sync /path/to/TimeTracker/logs/ s3://your-bucket/logs/ # Example: Clear old archives # find /path/to/TimeTracker/logs/ -name "*.gz" -mtime +90 -delete endscript } # Separate config for standard logs /path/to/TimeTracker/logs/timetracker.log { daily rotate 14 compress delaycompress missingok notifempty copytruncate create 0640 root root } # Configuration for error logs (if separate) /path/to/TimeTracker/logs/error.log { # Rotate more frequently for error logs daily rotate 30 compress delaycompress missingok notifempty copytruncate create 0640 root root # Alert if error log is too large size 50M postrotate # Optional: Send alert if error log is rotated frequently # echo "TimeTracker error log rotated" | mail -s "Error log alert" admin@example.com endscript } # Alternative: More aggressive rotation for high-traffic installations # /path/to/TimeTracker/logs/*.jsonl { # hourly # rotate 168 # Keep 1 week of hourly logs # compress # delaycompress # missingok # notifempty # copytruncate # dateext # dateformat -%Y%m%d-%H # }