Edit report at https://bugs.php.net/bug.php?id=55129&edit=1
ID: 55129 Updated by: ka...@php.net Reported by: sun at unleashedmind dot com Summary: LOG_ level constants don't comply with RFC 3164 on Windows Status: Open Type: Feature/Change Request Package: Win32API related Operating System: Windows PHP Version: Irrelevant Block user comment: N Private report: N New Comment: Hi 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. Previous Comments: ------------------------------------------------------------------------ [2011-07-04 11:51:21] sun at unleashedmind dot com Description: ------------ 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. Test script: --------------- <?php var_dump(LOG_EMERG, LOG_ALERT, LOG_CRIT, LOG_ERR, LOG_WARNING, LOG_NOTICE, LOG_INFO, LOG_DEBUG); ?> Expected result: ---------------- int(0) int(1) int(2) int(3) int(4) int(5) int(6) int(7) Actual result: -------------- int(1) int(1) int(1) int(4) int(5) int(6) int(6) int(6) ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=55129&edit=1