[ 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