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

ASF GitHub Bot commented on LOG4J2-1842:
----------------------------------------

GitHub user mihhail-lapushkin opened a pull request:

    https://github.com/apache/logging-log4j2/pull/64

    [LOG4J2-1842] Expand SystemPropertiesLookup syntax

    The table in **Property Substitution** needs to be updated:
    https://logging.apache.org/log4j/2.x/manual/configuration.html
    
    Next to **sys** change the contents of **Context** column to:
    > System properties. Can be either a simple property key for <a 
class="javadoc" 
href="http://docs.oracle.com/javase/6/docs/api/java/lang/System.html#getProperty(java.lang.String)">System.getProperty(key)</a>
 or a series of pipe-separated property keys followed by a default value 
<tt>key<sub>1</sub>|key<sub>2</sub>|...|key<sub>n</sub>|defaultValue</tt>. 
Either the first existing property or the default value is used.

You can merge this pull request into a Git repository by running:

    $ git pull https://github.com/mihhail-lapushkin/logging-log4j2 master

Alternatively you can review and apply these changes as the patch at:

    https://github.com/apache/logging-log4j2/pull/64.patch

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

    This closes #64
    
----
commit 6998bb8882c749d9ace1a86429836431910e9e21
Author: Mihhail Lapushkin <m...@mihhails-mbp.lan>
Date:   2017-03-09T18:08:13Z

    [LOG4J2-1842] Expand SystemPropertiesLookup syntax:
    - Implemented the proposal
    - Refactored test and added new test cases

----


> Expand SystemPropertiesLookup syntax
> ------------------------------------
>
>                 Key: LOG4J2-1842
>                 URL: https://issues.apache.org/jira/browse/LOG4J2-1842
>             Project: Log4j 2
>          Issue Type: Improvement
>          Components: Lookups
>            Reporter: Mihhail Lapushkin
>            Priority: Minor
>
> I've been using a modified version of {{SystemPropertiesLookup}} in my 
> project. Maybe it could be part of the library.
> The idea is to allow a series of property keys to be specified. If one of the 
> properties is present, then it is used. If none are present, then the default 
> value is used. For example:
> {code}
> <Logger name="com.myapp.dao" 
> level="${sys:myapp.log.level|myapp.log.level.dao|warn}"/>
> <Logger name="com.myapp.service" 
> level="${sys:myapp.log.level|myapp.log.level.service|warn}"/>
> <Logger name="com.myapp.controller" 
> level="${sys:myapp.log.level|myapp.log.level.controller|warn}"/>
> {code}
> This allows me to quickly rerun the app with different log levels without 
> fiddling with the configuration file or JConsole. Defaults represent 
> production settings, so that nothing extra needs to be specified to run the 
> app.
> This work nice in other places as well:
> {code}
> <PatternLayout disableAnsi="${sys:myapp.log.nocolor|true}">
> {code}
> Disables colors by default (for production build), but leaves an easy way to 
> turn them on for development.
> When no pipes are present in the expression, then the standard property 
> lookup is used, so the change is backwards-compatible.
> Can be a separate lookup if needed.
> Here is the possible implementation:
> {code}
> @Plugin(name = "sys", category = StrLookup.CATEGORY)
> public class SystemPropertiesLookup extends AbstractLookup {
>     private static final Logger LOGGER = StatusLogger.getLogger();
>     private static final Marker LOOKUP = MarkerManager.getMarker("LOOKUP");
>     /**
>      * @param event The current LogEvent.
>      * @param expression the expression to be looked up.
>      * @return The value resolved by expression.
>      */
>     @Override
>     public String lookup(final LogEvent event, final String expression) {
>         try {
>             if (expression.indexOf('|') < 0) {
>                 return System.getProperty(expression);
>             }
>             String[] expressionElements = expression.split("\\|");
>             for (int i = 0; i < expressionElements.length - 1; i++) {
>                 String propertyValue = 
> System.getProperty(expressionElements[i]);
>                 if (propertyValue != null) {
>                     return propertyValue;
>                 }
>             }
>             return expressionElements[expressionElements.length - 1];
>         } catch (final Exception ex) {
>             LOGGER.warn(LOOKUP, "Error while resolving system property by 
> expression [{}].", expression, ex);
>             return null;
>         }
>     }
> }
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

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