Webinoly provides comprehensive logging capabilities for monitoring your web server, applications, and services. This guide covers all log types and management options.
View Logs in Real-Time
Access Logs
View Nginx access logs:
# Global access log
sudo log
# Specific site access log
sudo log example.com
Error Logs
# Global error logs
sudo log -error
# Site-specific error logs
sudo log example.com -error
Custom Line Count
Control how many lines to display:
# Show last 50 lines
sudo log example.com -lines=50
# Default is 10 lines (configurable)
Set a custom default line count: sudo webinoly -config=log-lines:25
WordPress Debug Logs
Enable WordPress Debug Mode
# Enable debug logging
sudo log example.com -wp=on
# Disable display of errors (log only)
sudo log example.com -wp=on -display=off
This modifies wp-config.php to enable:
WP_DEBUG - Enable debug mode
WP_DEBUG_LOG - Log to wp-content/debug.log
WP_DEBUG_DISPLAY - Display errors on screen
Disable WordPress Debug Mode
sudo log example.com -wp=off
View WordPress Debug Log
# View debug.log in real-time
sudo log example.com -wp
Log location: /var/www/example.com/htdocs/wp-content/debug.log
WordPress Subfolder Support
sudo log example.com -wp=on -subfolder=/blog
sudo log example.com -wp -subfolder=/blog
Disable debug mode in production environments to prevent sensitive information exposure.
PHP-FPM Logs
Monitor PHP errors and warnings:
sudo log -php
# or
sudo log -fpm
Log location: /var/log/php[version]-fpm.log
MySQL/MariaDB Logs
Error Log
General Query Log
Enable and view all database queries:
# Enable general log
sudo log -mysql=general -enable
# View general log
sudo log -mysql=general
# Disable general log
sudo log -mysql=general -disable
General query log impacts performance. Use only for debugging and disable when done.
Slow Query Log
Identify slow database queries:
# Enable slow query log (default threshold: 10s)
sudo log -mysql=slow -enable
# Enable with custom threshold (5 seconds)
sudo log -mysql=slow -enable -long-query-time=5
# View slow queries
sudo log -mysql=slow
# Disable slow query log
sudo log -mysql=slow -disable
Binary Log
For database replication and point-in-time recovery:
# Enable binary logging
sudo log -mysql=binary -enable
# Set log expiration (30 days)
sudo log -mysql=binary -enable -expire-logs=2592000
# View binary log
sudo log -mysql=binary
# Disable binary logging
sudo log -mysql=binary -disable
SSL/TLS Logs (Let’s Encrypt)
View certificate generation and renewal logs:
Log location: /var/log/letsencrypt/letsencrypt.log
Email/SMTP Logs
Monitor Postfix mail server logs:
sudo log -mail
# or
sudo log -email
Views both:
/var/log/mail.log - General mail log
/var/log/mail.err - Mail errors
SSH Authentication Logs
Monitor SSH access attempts:
sudo log -ssh
# or
sudo log -auth
Log location: /var/log/auth.log
System Logs
View general system logs:
Access Log Management
Disable Access Logs
# Disable globally
sudo log -access-log=off
# Disable for specific site
sudo log example.com -access-log=off
Enable Access Logs
# Enable globally
sudo log -access-log=on
# Enable for specific site
sudo log example.com -access-log=on
Buffer and Flush Settings
Optimize logging performance:
# Enable with buffer (32KB) and flush (5 minutes)
sudo log -access-log=on -buffer=[32,5]
# For high-traffic sites
sudo log example.com -access-log=on -buffer=[64,10]
Format: -buffer=[size_in_KB,flush_time_in_minutes]
Buffering reduces disk I/O but may delay log visibility. Adjust based on traffic and monitoring needs.
Purge Old Logs
Remove compressed log archives:
# Purge all GZ log files
sudo log -purge=all
# Purge specific service logs
sudo log -purge=nginx
sudo log -purge=mysql
sudo log -purge=letsencrypt
sudo log -purge=redis
# Purge systemd journal (keep last 7 days)
sudo log -purge=journal
# Force purge without confirmation
sudo log -purge=all -delete-all=force
Purge operations permanently delete compressed logs. Ensure backups exist before purging.
Log File Locations
Nginx:
- Global access:
/var/log/nginx/access.log
- Global error:
/var/log/nginx/error.log
- Site access:
/var/log/nginx/[domain].access.log
- Site error:
/var/log/nginx/[domain].error.log
PHP-FPM:
/var/log/php/[version]-fpm.log
MySQL/MariaDB:
- Error:
/var/log/mysql/error.log
- General:
/var/log/mysql/mysql.log
- Slow query:
/var/log/mysql/mariadb-slow.log
- Binary:
/var/log/mysql/mariadb-bin*
WordPress:
- Debug:
/var/www/[domain]/htdocs/wp-content/debug.log
SSL/Let’s Encrypt:
/var/log/letsencrypt/letsencrypt.log
Mail/SMTP:
/var/log/mail.log
/var/log/mail.err
System:
- Auth:
/var/log/auth.log
- Syslog:
/var/log/syslog
Log Analysis
Common Patterns
# Count 404 errors
grep " 404 " /var/log/nginx/example.com.access.log | wc -l
# Top 10 IP addresses
awk '{print $1}' /var/log/nginx/example.com.access.log | sort | uniq -c | sort -nr | head -10
# Check for WordPress login attempts
grep "wp-login.php" /var/log/nginx/example.com.access.log
# Find slow PHP requests
grep "max-execution-time" /var/log/php/8.3-fpm.log
# Check cache hit ratio
grep -o "X-Cache: [A-Z]*" /var/log/nginx/example.com.access.log | sort | uniq -c
Automated Monitoring
Log Rotation
Webinoly uses Ubuntu’s logrotate for automatic log rotation:
# View logrotate configuration
cat /etc/logrotate.d/nginx
cat /etc/logrotate.d/mysql-server
Real-Time Alerts
Monitor logs for specific patterns:
# Alert on 500 errors
sudo log example.com -error | grep " 500 " --line-buffered | while read line; do
echo "ERROR: $line" | mail -s "500 Error Alert" [email protected]
done
Troubleshooting
Log Not Found
If logs are empty or missing:
-
Check if logging is enabled:
grep "access_log" /etc/nginx/sites-available/example.com
-
Verify permissions:
-
Test Nginx configuration:
High Disk Usage
If logs consume too much space:
# Check log sizes
sudo du -sh /var/log/nginx/*
# Purge old compressed logs
sudo log -purge=all
# Adjust logrotate settings
sudo nano /etc/logrotate.d/nginx
Best Practices
- Regular Monitoring: Check logs daily for errors and anomalies
- Log Retention: Keep 30-90 days of logs, purge older archives
- Performance Impact: Disable access logs for high-traffic sites or use buffering
- Security: Monitor auth logs for unauthorized access attempts
- Debug Sparingly: Enable WordPress and MySQL debug logs only when troubleshooting
- Centralization: Consider shipping logs to a central logging service for analysis