[ 
https://issues.apache.org/jira/browse/LOG4J2-1589?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Dmitriy Neretin updated LOG4J2-1589:
------------------------------------
    Description: 
There is already a good description what "default value nesting" is: 
http://logback.qos.ch/manual/configuration.html#nestedSubst

It is partially implemented in the log4j but it can still be improved.

The problem appears if your default value is a variable too.

*Example:* We have a glassfish project. Our log files must be placed to the 
<some_log_root>/application/logfiles directory on the server and if we work 
locally somewhere on our computer in the glassfish root 
<glassfish_root>/application/logfiles.

The <some_log_root> and <glassfish_root> will be set as a java system variables:
* <some_log_root>: -Dpath.configured.by.provisioning=/some/path/onserver/
* <glassfish_root>: 
-Dcom.sun.aas.instanceRoot=/glassfishroot/application/logfiles

At the moment we must have two log4j2.xml config files with different paths and 
it's not so great. So the target is to have only one config files that can 
handle thwo different paths.

For example:

{code:xml}
...
<Properties>
       
   <Property 
name="path">${sys:path.configured.by.provisioning:-${sys:com.sun.aas.instanceRoot}}/application/logfiles/application/logfiles</Property>
       
</Properties>
...
{code}

If we deploy to the server and the value of path.configured.by.provisioning is 
the directory named 'master' the substitution result of StrSubstitutor is 
'master}' then. But it works if we set this property as default value!:

${sys:com.sun.aas.instanceRoot:-${sys:path.configured.by.provisioning}}

So the default value will be properly substituted, but not the first property. 
The value of the first property is always: <dirname>}

  was:
There is already a good description what "default value nesting" is: 
http://logback.qos.ch/manual/configuration.html#nestedSubst

It is partially implemented in the log4j but it can still be improved.

Example from that page above: 
- "${id:-${userid}}" If the *id* variable is not set, *userid* will be used.

At the moment it works only if the default value is a concrete value:
- ${path:-/only/concrete/path/can/be/used/here}


> Value nesting during property substitution
> ------------------------------------------
>
>                 Key: LOG4J2-1589
>                 URL: https://issues.apache.org/jira/browse/LOG4J2-1589
>             Project: Log4j 2
>          Issue Type: Wish
>          Components: Configurators
>    Affects Versions: 2.5
>            Reporter: Dmitriy Neretin
>            Priority: Minor
>              Labels: features
>
> There is already a good description what "default value nesting" is: 
> http://logback.qos.ch/manual/configuration.html#nestedSubst
> It is partially implemented in the log4j but it can still be improved.
> The problem appears if your default value is a variable too.
> *Example:* We have a glassfish project. Our log files must be placed to the 
> <some_log_root>/application/logfiles directory on the server and if we work 
> locally somewhere on our computer in the glassfish root 
> <glassfish_root>/application/logfiles.
> The <some_log_root> and <glassfish_root> will be set as a java system 
> variables:
> * <some_log_root>: -Dpath.configured.by.provisioning=/some/path/onserver/
> * <glassfish_root>: 
> -Dcom.sun.aas.instanceRoot=/glassfishroot/application/logfiles
> At the moment we must have two log4j2.xml config files with different paths 
> and it's not so great. So the target is to have only one config files that 
> can handle thwo different paths.
> For example:
> {code:xml}
> ...
> <Properties>
>        
>    <Property 
> name="path">${sys:path.configured.by.provisioning:-${sys:com.sun.aas.instanceRoot}}/application/logfiles/application/logfiles</Property>
>        
> </Properties>
> ...
> {code}
> If we deploy to the server and the value of path.configured.by.provisioning 
> is the directory named 'master' the substitution result of StrSubstitutor is 
> 'master}' then. But it works if we set this property as default value!:
> ${sys:com.sun.aas.instanceRoot:-${sys:path.configured.by.provisioning}}
> So the default value will be properly substituted, but not the first 
> property. The value of the first property is always: <dirname>}



--
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