Skip to main content
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

sudo log -mysql=error

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:
sudo log -le
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:
sudo log -syslog

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

Monitor Cache Performance

# 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:
  1. Check if logging is enabled:
    grep "access_log" /etc/nginx/sites-available/example.com
    
  2. Verify permissions:
    ls -la /var/log/nginx/
    
  3. Test Nginx configuration:
    sudo nginx -t
    

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

  1. Regular Monitoring: Check logs daily for errors and anomalies
  2. Log Retention: Keep 30-90 days of logs, purge older archives
  3. Performance Impact: Disable access logs for high-traffic sites or use buffering
  4. Security: Monitor auth logs for unauthorized access attempts
  5. Debug Sparingly: Enable WordPress and MySQL debug logs only when troubleshooting
  6. Centralization: Consider shipping logs to a central logging service for analysis

Build docs developers (and LLMs) love