[
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 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]