Edit report at https://bugs.php.net/bug.php?id=55129&edit=1
ID: 55129
Comment by: panman at traileyes dot com
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:
FYI, just wanted to add that the SimpleSAMLphp project uses these constants as
well for their logger.
Previous Comments:
------------------------------------------------------------------------
[2011-07-08 18:18:10] [email protected]
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.
------------------------------------------------------------------------
[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