Log4php
  1. Log4php
  2. LOG4PHP-81

Boolean values in .properties files and incorrectly parsed by LoggerConfiguratorIni

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: 2.0.0
    • Component/s: Code
    • Labels:
      None

      Description

      Currently boolean values in log4php.properties have to be written as "true" and "false", i.e. as strings because they do not get parsed correctly else.

      This is quite irritating as the ini file format as well as the name of the configurator suggests that this file does behave like a PHP .ini file where true/false/on/off etc. can be used.
      Moreover it is no problem with log4j and the properties files should be interchangeable if possible.

      As I was bitten by this bug myself for the third time now I tried to fix it

      The patch currently only fixes LoggerLayoutTTCC and most probably breaks a whole lot of other stuff but it shows the right way, I guess.

      bye,

      christian

      1. BooleansInProperties.diff
        6 kB
        Christian Hammers
      2. layout_ttcc.properties
        0.3 kB
        Christian Hammers
      3. layout_ttcc.php
        0.2 kB
        Christian Hammers
      4. LoggerOptionConverterTest.php
        2 kB
        Christian Hammers

        Activity

        Hide
        Christian Hammers added a comment -

        fixed in svn

        Show
        Christian Hammers added a comment - fixed in svn
        Hide
        Christian Hammers added a comment -

        The patch. Basically it does three things:

        1. LoggerOptionConvert::findAndSubst() no longer tries to be clever and skips settings where empty($value)==true because PHPs parse_ini_file() already converts a false without quotes to an empty string.

        2. As the generic options parser cannot distinguish if the user has written the number 0 or the boolean false (both is converted to string(1)"0" by parse_ini_file()) etc. the conversion has to be done in the setter methods because only they know if they want numbers or booleans for their attributes.

        3. Those setter methods can use the already existing toBoolean() method. Although until now it did not handle all cases that parse_ini_file() mangles correctly.

        Show
        Christian Hammers added a comment - The patch. Basically it does three things: 1. LoggerOptionConvert::findAndSubst() no longer tries to be clever and skips settings where empty($value)==true because PHPs parse_ini_file() already converts a false without quotes to an empty string. 2. As the generic options parser cannot distinguish if the user has written the number 0 or the boolean false (both is converted to string(1)"0" by parse_ini_file()) etc. the conversion has to be done in the setter methods because only they know if they want numbers or booleans for their attributes. 3. Those setter methods can use the already existing toBoolean() method. Although until now it did not handle all cases that parse_ini_file() mangles correctly.
        Hide
        Christian Hammers added a comment -

        example properties

        Show
        Christian Hammers added a comment - example properties
        Hide
        Christian Hammers added a comment -

        example php

        Show
        Christian Hammers added a comment - example php
        Hide
        Christian Hammers added a comment -

        phpunit test

        Show
        Christian Hammers added a comment - phpunit test

          People

          • Assignee:
            Christian Hammers
            Reporter:
            Christian Hammers
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development