Configuring Nginx Access Log and Error Log to STDOUT and STDERR

Nov 23, 2025 · Programming · 11 views · 7.8

Keywords: Nginx | Log Configuration | STDOUT | Docker | Container Deployment

Abstract: This technical article provides a comprehensive guide on redirecting Nginx access logs and error logs to standard output (STDOUT) and standard error streams (STDERR). It covers configuration methods using /dev/stdout and /dev/stderr device files, explains the daemon off directive's role in foreground process execution, and addresses Docker container-specific solutions through symbolic links. The article also discusses compatibility considerations across different environments and offers best practices for effective log management in modern deployment scenarios.

Nginx Logging Fundamentals

Nginx, as a high-performance web server, relies on its logging system for monitoring and troubleshooting. While traditional configurations write access and error logs to filesystems, redirecting logs to standard streams proves more convenient in containerized deployments and development environments.

Standard Stream Redirection Configuration

In Nginx configuration, log redirection to standard streams can be achieved by modifying the nginx.conf file. The core configuration is as follows:

daemon off;
error_log /dev/stdout info;

http {
  access_log /dev/stdout;
  ...
}

The daemon off directive ensures Nginx runs in foreground mode, which is crucial for container environments. When set to off, the Nginx master process remains in the foreground, facilitating monitoring by process managers and container runtimes.

error_log /dev/stdout info redirects error logs to the standard output stream with the log level set to info. Here, the /dev/stdout device file is used, representing the process's standard output stream in Unix-like systems.

Within the HTTP configuration block, access_log /dev/stdout similarly redirects access logs to standard output. This configuration ensures all log information is output through the standard output stream, making it easier for log collection systems to process.

Docker Environment Specific Handling

In certain Docker container environments, additional symbolic link setup may be required:

RUN ln -sf /proc/self/fd /dev/

This command creates a symbolic link from /dev/fd to /proc/self/fd, ensuring file descriptors are correctly available within the container. After setup, /dev/fd/1 (standard output) and /dev/fd/2 (standard error) can be used as log paths.

Configuration Example Analysis

The following complete configuration example demonstrates usage in a production environment:

# Main configuration file snippet
daemon off;
worker_processes auto;
error_log /dev/stderr warn;

http {
    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                    '$status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for"';
    
    access_log /dev/stdout main;
    
    server {
        listen 80;
        server_name localhost;
        
        location / {
            root /usr/share/nginx/html;
            index index.html;
        }
    }
}

In this configuration, error logs use /dev/stderr with a warning level, while access logs use the custom main format output to standard output. This separation helps distinguish between different types of log information.

Environment Compatibility Considerations

Support for standard stream devices may vary across different operating systems and environments:

Log Format Optimization

When outputting logs to standard streams, using structured log formats is recommended:

log_format json_combined escape=json
    '{'
    '"timestamp":"$time_iso8601",'
    '"remote_addr":"$remote_addr",'
    '"request":"$request",'
    '"status":"$status",'
    '"body_bytes_sent":"$body_bytes_sent",'
    '"http_referer":"$http_referer",'
    '"http_user_agent":"$http_user_agent"'
    '}';

access_log /dev/stdout json_combined;

This JSON-formatted logging is easier for log analysis tools to parse and process, particularly suited for containerized and cloud-native environments.

Performance and Stability

When outputting logs to standard streams, the following performance factors should be considered:

Through proper configuration and monitoring, Nginx's standard stream log output solution can provide stable and reliable logging services, meeting the needs of modern application deployments.

Copyright Notice: All rights in this article are reserved by the operators of DevGex. Reasonable sharing and citation are welcome; any reproduction, excerpting, or re-publication without prior permission is prohibited.