Log4net
  1. Log4net
  2. LOG4NET-34

Allow xml config values to be set via XmlNodeType.CDATA or XmlNodeType.Text rather than just value="foo"

    Details

    • Type: Improvement Improvement
    • Status: Resolved
    • Priority: Trivial Trivial
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: 1.2.10
    • Component/s: None
    • Labels:
      None

      Description

      Currently values for xml config nodes must be passed in via the value attribute:

      <conversionPattern value="%5p %d

      {yyyy-MM-dd hh:mm:ss tt}

      (%c:%L) - %m%n" />

      Why isn't this syntax supported?

      <conversionPattern>%5p %d

      {yyyy-MM-dd hh:mm:ss tt}

      (%c:%L) - %m%n</conversionPattern>

      If the above syntax were supported, a possible solution to this question:

      http://www.mail-archive.com/log4net-user%40logging.apache.org/msg01791.html

      would be:

      <conversionPattern>
      <![CDATA[<header>%n <date>%d</date>%n <user>%u</user>%n <info>%m</info>%n</header>%n]]>
      </conversionPattern>

        Activity

        Ron Grabowski created issue -
        Hide
        Ron Grabowski added a comment -

        If a value attribute is not found, loop through the child node to find the first CDATA or Text node and use its InnerText as the value.

        Show
        Ron Grabowski added a comment - If a value attribute is not found, loop through the child node to find the first CDATA or Text node and use its InnerText as the value.
        Ron Grabowski made changes -
        Field Original Value New Value
        Attachment XmlHierarchyConfigurator.cs.patch [ 12310769 ]
        Hide
        Nicko Cadell added a comment -

        It is possible to embed < and > in the current attribute value, just escape using < and >

        I will have a look at the impact of your patch and see if it can be easily integraged - on first look it looks ok. I think we should probably concatenate any text or CDATA node text rather than taking the last one, but apart from that it looks ok.

        Show
        Nicko Cadell added a comment - It is possible to embed < and > in the current attribute value, just escape using < and > I will have a look at the impact of your patch and see if it can be easily integraged - on first look it looks ok. I think we should probably concatenate any text or CDATA node text rather than taking the last one, but apart from that it looks ok.
        Hide
        Ron Grabowski added a comment -

        The code actually takes the first text or CDATA. That allows a comment to come before the text.

        Another general benefit of being able to use CDATA is that you don't have squeeze potentially long marksup all on one line:

        <conversionPattern>
        <!-- Hello World -->
        <![CDATA[
        <header>
        <date>
        <hour>
        %d

        {h}

        </hour>
        </date>
        <user>
        %u
        </user>
        <info>
        %m
        </info>
        </header>
        ]]>
        </conversionPattern>

        I quicklyt tried inserting tabs into the layout using \t,
        t, and '\t' but they always rendered as a literal. I didn't see a %tab pattern or a %space

        {5}

        pattern.

        If the text were concatenated, would this appear on one line in the output file?

        <conversionPattern>
        <!-- this text is ignored -->
        <![CDATA[%m ]]>
        <!-- this text is ignored -->
        <![CDATA[%d ]]>
        <!-- this text is ignored -->
        <![CDATA[%n ]]>
        </conversionPattern>

        It looks a little messy but I can think of some cases where it could be useful. Especially with describing custom patterns.

        Show
        Ron Grabowski added a comment - The code actually takes the first text or CDATA. That allows a comment to come before the text. Another general benefit of being able to use CDATA is that you don't have squeeze potentially long marksup all on one line: <conversionPattern> <!-- Hello World --> <![CDATA[ <header> <date> <hour> %d {h} </hour> </date> <user> %u </user> <info> %m </info> </header> ]]> </conversionPattern> I quicklyt tried inserting tabs into the layout using \t, t, and '\t' but they always rendered as a literal. I didn't see a %tab pattern or a %space {5} pattern. If the text were concatenated, would this appear on one line in the output file? <conversionPattern> <!-- this text is ignored --> <![CDATA [%m ] ]> <!-- this text is ignored --> <![CDATA [%d ] ]> <!-- this text is ignored --> <![CDATA [%n ] ]> </conversionPattern> It looks a little messy but I can think of some cases where it could be useful. Especially with describing custom patterns.
        Hide
        Nicko Cadell added a comment -

        Multiple CDATA sections will be concatenated together on a single line. Empty text nodes will be ignored (by the parser).

        To embed a tab in the config file you need to use the XML numberic character reference

        Show
        Nicko Cadell added a comment - Multiple CDATA sections will be concatenated together on a single line. Empty text nodes will be ignored (by the parser). To embed a tab in the config file you need to use the XML numberic character reference
        Hide
        Nicko Cadell added a comment -

        I have applied the patch with mods and all is well

        Show
        Nicko Cadell added a comment - I have applied the patch with mods and all is well
        Nicko Cadell made changes -
        Resolution Fixed [ 1 ]
        Status Open [ 1 ] Resolved [ 5 ]
        Fix Version/s 1.2.10 [ 11128 ]

          People

          • Assignee:
            Unassigned
            Reporter:
            Ron Grabowski
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development