PHP syslog function tutorial shows how to log messages to system logger in PHP. Learn syslog with practical examples for different logging scenarios.
last modified April 4, 2025
The PHP syslog function sends log messages to the system logger. It’s useful for centralized logging in applications and services.
syslog generates a system log message that gets handled by the system logger daemon. It follows the standard syslog protocol.
Syntax: syslog(int $priority, string $message): bool. Returns true on success, false on failure. Requires proper system permissions.
This example demonstrates the simplest way to log a message using syslog.
basic_logging.php
<?php
declare(strict_types=1);
// Open connection to system logger openlog(“myapp”, LOG_PID | LOG_PERROR, LOG_LOCAL0);
// Send a log message syslog(LOG_INFO, “Application started successfully”);
// Close connection closelog();
This code opens a connection to the system logger, sends an INFO level message, then closes the connection. The message appears in system logs.
This example shows how to use different priority levels for logging.
priority_levels.php
<?php
declare(strict_types=1);
openlog(“myapp”, LOG_PID, LOG_USER);
syslog(LOG_EMERG, “System is unusable”); syslog(LOG_ALERT, “Immediate action required”); syslog(LOG_CRIT, “Critical conditions”); syslog(LOG_ERR, “Error conditions”); syslog(LOG_WARNING, “Warning conditions”); syslog(LOG_NOTICE, “Normal but significant”); syslog(LOG_INFO, “Informational message”); syslog(LOG_DEBUG, “Debug-level message”);
closelog();
Each priority level indicates message severity. System administrators can filter logs based on these priorities for better monitoring.
This example demonstrates using a custom logging facility for categorization.
custom_facility.php
<?php
declare(strict_types=1);
// Using local7 facility typically reserved for local use openlog(“customapp”, LOG_PID | LOG_ODELAY, LOG_LOCAL7);
syslog(LOG_NOTICE, “Custom application initialized”); syslog(LOG_WARNING, “Configuration file missing”);
closelog();
Facilities help categorize logs by their source. Different facilities can have different log file destinations and handling rules.
This example shows how to log PHP errors to the system logger.
error_handling.php
<?php
declare(strict_types=1);
function logError($errno, $errstr, $errfile, $errline) { openlog(“phperrors”, LOG_PID, LOG_LOCAL0); $priority = match($errno) { E_ERROR, E_USER_ERROR => LOG_ERR, E_WARNING, E_USER_WARNING => LOG_WARNING, E_NOTICE, E_USER_NOTICE => LOG_NOTICE, default => LOG_INFO }; syslog($priority, “[$errno] $errstr in $errfile on line $errline”); closelog(); }
set_error_handler(“logError”);
// Trigger different error types trigger_error(“Test warning”, E_USER_WARNING); trigger_error(“Test notice”, E_USER_NOTICE);
This sets up a custom error handler that logs PHP errors to syslog. Errors are categorized by severity and include detailed context information.
This example demonstrates structured logging with additional metadata.
structured_logging.php
<?php
declare(strict_types=1);
function logEvent($message, $context = [], $priority = LOG_INFO) { openlog(“structuredapp”, LOG_PID, LOG_LOCAL0);
$structured = [
'message' => $message,
'timestamp' => date('c'),
'context' => $context
];
syslog($priority, json_encode($structured));
closelog();
}
logEvent(“User logged in”, [ ‘user_id’ => 42, ‘ip’ => ‘192.168.1.1’, ‘user_agent’ => $_SERVER[‘HTTP_USER_AGENT’] ?? ‘unknown’ ]);
Structured logging formats messages as JSON with additional context. This makes logs more machine-readable and enables better log analysis tools.
Facility Selection: Choose appropriate facility for your application
Message Format: Maintain consistent message format
Connection Handling: Open/close connections efficiently
Security: Sanitize log messages to prevent log injection
Performance: Consider impact on high-volume applications
This tutorial covered the PHP syslog function with practical examples for system logging in various scenarios.
My name is Jan Bodnar, and I am a passionate programmer with extensive programming experience. I have been writing programming articles since 2007. To date, I have authored over 1,400 articles and 8 e-books. I possess more than ten years of experience in teaching programming.