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

Reply via email to