[ 
https://issues.apache.org/jira/browse/LOG4J2-1313?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15480877#comment-15480877
 ] 

Remko Popma edited comment on LOG4J2-1313 at 9/11/16 3:19 AM:
--------------------------------------------------------------

The current logic in 
[PluginValueVisitor|https://github.com/apache/logging-log4j2/blob/master/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginValueVisitor.java#L39]
 is
 
{code}
final String rawValue = Strings.isNotEmpty(node.getValue()) // check if null or 
""
        ? node.getValue()
        : removeAttributeValue(node.getAttributes(), "value"); // remove the 
property altogether
{code}

So, if there is no value, the property is removed. 

As Leon indicated, this means that when the property is defined as {{<Property 
name="additionalProp"></Property>}}, references like $\{sys:additionalProp\} 
don't get resolved and remain as literal $\{sys:additionalProp\}. 

I've committed a failing test demonstrating the issue. 
(org.apache.logging.log4j.core.config.PropertyTest)

I tried to stop removing the attributes if the value is empty. Depending on the 
return value I get different incorrect results:

{code}
<Properties>
  <Property name="elementKey">elementValue</Property>
  <Property name="emptyElementKey"></Property>
  <Property name="attributeKey" value="attributeValue" />
  <Property name="attributeWithEmptyElementKey" 
value="attributeValue2"></Property>
  <Property name="bothElementAndAttributeKey" 
value="attributeValue3">elementValue3</Property>
--------
// option 1: replace "" values with null
final String rawValue = Strings.isBlank(node.getValue()) ? null : 
node.getValue();

Test fails like this:
Expected 
:1=elementValue,2=,3=attributeValue,4=attributeValue2,5=attributeValue3,m=msg
Actual   
:1=elementValue,2=${sys:emptyElementKey},3=${sys:attributeKey},4=${sys:attributeWithEmptyElementKey},5=elementValue3,m=msg

---------------
// option 2: allow "" attributes 
final String rawValue = node.getValue();

Test fails like this:
Expected 
:1=elementValue,2=,3=attributeValue,4=attributeValue2,5=attributeValue3,m=msg
Actual   :1=elementValue,2=,3=,4=,5=elementValue3,m=msg

{code}

The second failure is a more promising avenue but still has issues. This 
requires more plugin-fu than I can command at the moment.
Any plugin expert willing to take a further look?


was (Author: rem...@yahoo.com):
The current logic in 
[PluginValueVisitor|https://github.com/apache/logging-log4j2/blob/master/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginValueVisitor.java#L39]
 is
 
{code}
final String rawValue = Strings.isNotEmpty(node.getValue()) // check if null or 
""
        ? node.getValue()
        : removeAttributeValue(node.getAttributes(), "value"); // remove the 
property altogether
{code}

So, if there is no value, the property is removed. 

As Leon indicated, this means that when the property is defined as {{<Property 
name="additionalProp"></Property>}}, references like $\{sys:additionalProp\} 
don't get resolved and remain as literal $\{sys:additionalProp\}. 

I've committed a failing test demonstrating the issue. 
(org.apache.logging.log4j.core.config.PropertyTest)

I tried to stop removing the attributes if the value is empty. Depending on the 
return value I get different incorrect results:

{code}
// option 1: replace "" values with null
final String rawValue = Strings.isBlank(node.getValue()) ? null : 
node.getValue();

Test fails like this:
Expected 
:1=elementValue,2=,3=attributeValue,4=attributeValue2,5=attributeValue3,m=msg
Actual   
:1=elementValue,2=${sys:emptyElementKey},3=${sys:attributeKey},4=${sys:attributeWithEmptyElementKey},5=elementValue3,m=msg

---------------
// option 2: allow "" attributes 
final String rawValue = node.getValue();

Test fails like this:
Expected 
:1=elementValue,2=,3=attributeValue,4=attributeValue2,5=attributeValue3,m=msg
Actual   :1=elementValue,2=,3=,4=,5=elementValue3,m=msg

{code}

The second failure is a more promising avenue but still has issues. This 
requires more plugin-fu than I can command at the moment.
Any plugin expert willing to take a further look?

> <Property name="" value="" /> not working
> -----------------------------------------
>
>                 Key: LOG4J2-1313
>                 URL: https://issues.apache.org/jira/browse/LOG4J2-1313
>             Project: Log4j 2
>          Issue Type: Bug
>    Affects Versions: 2.5
>            Reporter: Philipp Knobel
>            Assignee: Remko Popma
>             Fix For: 2.7
>
>
> The documentation shows examples of the property tag like this 
> ([http://logging.apache.org/log4j/2.x/manual/configuration.html#ConfigurationSyntax]):
> {noformat}
> <Properties>
>     <Property name="name1">value</property>
>     <Property name="name2" value="value2"/>
>   </Properties>
> {noformat}
> When using the later one with the value attribute you'll get on startup this 
> error:
> {noformat}
> ERROR Property contains an invalid element or attribute "value"
> {noformat}
> It would be good to have the attribute support working as well, as otherwise 
> it might happen that IDE auto formatting is line breaking an attribute. If 
> this isn't possible please update the documentation.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-dev-unsubscr...@logging.apache.org
For additional commands, e-mail: log4j-dev-h...@logging.apache.org

Reply via email to