You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4php-dev@logging.apache.org by "Maciej Mazur (JIRA)" <ji...@apache.org> on 2010/05/23 21:15:24 UTC

[jira] Issue Comment Edited: (LOG4PHP-117) LoggerConfiguratorIni::configure() and unexptected results from error_get_last()

    [ https://issues.apache.org/jira/browse/LOG4PHP-117?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12870444#action_12870444 ] 

Maciej Mazur edited comment on LOG4PHP-117 at 5/23/10 3:15 PM:
---------------------------------------------------------------

Actually i don't think it should be thrown anything if there is no file, or file contains no properties. A warning or notice could be printed (to stderr), but there is no need to throw an exception (I belive log4j behaves like this). 


      was (Author: mamciek):
    Actually i don't think it should be thrown anything if there is no file, or file contains no properties. A warning or notice could be printed (to stdout), but there is no need to throw an exception (I belive log4j behaves like this). 

  
> LoggerConfiguratorIni::configure() and unexptected results from error_get_last()
> --------------------------------------------------------------------------------
>
>                 Key: LOG4PHP-117
>                 URL: https://issues.apache.org/jira/browse/LOG4PHP-117
>             Project: Log4php
>          Issue Type: Bug
>          Components: Code
>    Affects Versions: 2.0
>            Reporter: Maciej Mazur
>             Fix For: 2.1
>
>         Attachments: error_get_last_patch
>
>
> This apply to src/main/php/configurators/LoggerConfiguratorIni.php
> If you invoke LoggerConfiguratorIni::configure() after there was any notice or warning in your PHP script, then LoggerConfiguratorIni will throw an exception even if there is no need (propably terminating execution)
> 284	        public function configure(LoggerHierarchy $hierarchy, $url = '') {
> 285	                $properties = @parse_ini_file($url);
> 286	                if ($properties === false || count($properties) == 0) {
> 287	                        $error = error_get_last();
> 288	                    throw new LoggerException("LoggerConfiguratorIni: ".$error['message']);
> 289	                }
> 290	                return $this->doConfigureProperties($properties, $hierarchy);
> 291	        }
> In line 287 it is checked if there was any error triggered by function parse_ini_file(). Unfortunately function error_get_last() doesn't return an error triggered by execution of the last function. It returnes an error that is most recent in global, even if it was already catched and taken care of. This is because there is no way to reset the state of the last error. It returns always the last triggered error. (http://www.php.net/manual/en/function.error-get-last.php#83608)
> I attached the patch that "solves" this by triggering an empty error before parse_ini_file(), and the it is checked if the error has an empty message:
>         public function configure(LoggerHierarchy $hierarchy, $url = '') {
>                 @trigger_error('');
>                 $properties = @parse_ini_file($url);
>                 if ($properties === false || count($properties) == 0) {
>                         $error = error_get_last();
>                         if ($error['message'] != '') {
>                                 throw new LoggerException("LoggerConfiguratorIni: ".$error['message']);
>                         }
>                 }
>                 return $this->doConfigureProperties($properties, $hierarchy);
>         }
> This not very pretty but it works

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.