go to bug id or search bugs for
On Windows, the LOG_* constant values differ from the values defined in RFC 3164. The values are correct on Unix platforms.
Previously discussed in https://bugs.php.net/bug.php?id=18090 and closed as bogus back in 2002.
Over at Drupal, we replaced custom log level constants with PHP's native LOG_* constants: http://drupal.org/node/1136130 -- and had to learn the hard way that the constant values differ on Windows. (undocumented: http://php.net/manual/en/network.constants.php)
Drupal uses these severity levels for application-level logging. The logger is pluggable, so messages may be stored in a database, third-party system, or simply passed to syslog(). Depending on the logger implementation, messages may also be listed/read. Therefore, consistent log severity level constant values are required.
The question arose why PHP overrides the LOG_* constant values on Windows, kinda violating the RFC, and whether the reduction to values supported by Windows' event log could not happen in a Windows-specific syslog() implementation instead, not affecting the global run-time constants.
I understand that it's Windows that's to blame. However, I don't see why PHP has to follow Windows' bogus lead on not respecting the RFC. Conforming to industry standards would be a huge benefit for interoperability with other systems.
Concrete change request:
- Make PHP's LOG_* constant values always conform to RFC 3164.
- Move the platform-specific mapping/reduction into a syslog() implementation for Windows.
var_dump(LOG_EMERG, LOG_ALERT, LOG_CRIT, LOG_ERR, LOG_WARNING, LOG_NOTICE, LOG_INFO, LOG_DEBUG);
Add a Patch
Add a Pull Request
I like the idea, perhaps we should cook something like this up together with @fat's patch for multiple connections to syslog() and confront the RFC in and interoperability way in 5.4.
FYI, just wanted to add that the SimpleSAMLphp project uses these constants as well for their logger.
It's 2018 and this issue is still open!