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

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

Github user wangzhongkuo commented on the issue:

    https://github.com/apache/logging-log4j2/pull/145
  
    I'm puzzled why the all checks failed...
    `
    $ ./mvnw --toolchains=./.travis-toolchains.xml install -DskipTests=true 
-Dmaven.javadoc.skip=true -B -V
    Error: JAVA_HOME is not defined correctly.
      We cannot execute /usr/lib/jvm/java-7-oracle/bin/java
    The command "./mvnw --toolchains=./.travis-toolchains.xml install 
-DskipTests=true -Dmaven.javadoc.skip=true -B -V" failed and exited with 1 
during .
    Your build has been stopped.
    `
    zhongkuo


> MainMapLookup ${main:--file} placeholder doesn't work
> -----------------------------------------------------
>
>                 Key: LOG4J2-2211
>                 URL: https://issues.apache.org/jira/browse/LOG4J2-2211
>             Project: Log4j 2
>          Issue Type: Bug
>          Components: Lookups
>    Affects Versions: 2.10.0
>         Environment: java: 1.7
> log4j: 2.10.0
> os : windows
>            Reporter: wangzhongkuo
>            Priority: Blocker
>              Labels: newbie
>
> I use the MainMapLookup like the 
> documentation([http://logging.apache.org/log4j/2.x/manual/lookups.html#AppMainArgsLookup),b|http://logging.apache.org/log4j/2.x/manual/lookups.html#AppMainArgsLookup),i]ut
>  the "${main:–file}" doesn't work, it replace the placeholder by default 
> value "-file".
> log4j2.xml(log4j2 2.10.0)
>  
> {code:java}
> <?xml version="1.0" encoding="UTF-8"?>
> <Configuration status="INFO">
> <Appenders>
> <Console name="Console" target="SYSTEM_OUT">
> <PatternLayout
> pattern="%d [%t] [${main:--file}] %-5level: %msg%n%throwable" />
> </Console>
> </Appenders>
> <Loggers>
> <Logger name="org.foo" level="DEBUG" />
> <Root level="TRACE">
> <AppenderRef ref="Console" />
> </Root>
> </Loggers>
> </Configuration>
> {code}
> im sure i have written the code: MainMapLookup.setMainArguments(args);
>  
> my program arguments are : --file foo.txt --verbose -x bar
> so i traced the source code, in StrSubstitutor.class line 958, it changes my 
> varName "main:–file" to "main". i can't understand the code : "varName = 
> varNameExpr.substring(0, i);"
> {code:java}
> if (valueDelimiterMatcher != null) {
> final char [] varNameExprChars = varNameExpr.toCharArray();
> int valueDelimiterMatchLen = 0;
> for (int i = 0; i < varNameExprChars.length; i++) {
> // if there's any nested variable when nested variable substitution disabled, 
> then stop resolving name and default value.
> if (!substitutionInVariablesEnabled
> && prefixMatcher.isMatch(varNameExprChars, i, i, varNameExprChars.length) != 
> 0) {
> break;
> }
> if ((valueDelimiterMatchLen = valueDelimiterMatcher.isMatch(varNameExprChars, 
> i)) != 0) {
> varName = varNameExpr.substring(0, i);
> varDefaultValue = varNameExpr.substring(i + valueDelimiterMatchLen);
> break;
> }
> }
> }
> {code}
> then org.apache.logging.log4j.core.lookup.Interpolator.class
>  
> {code:java}
> @Override
> public String lookup(final LogEvent event, String var) {
> if (var == null) {
> return null;
> }
> final int prefixPos = var.indexOf(PREFIX_SEPARATOR);
> if (prefixPos >= 0) {
> final String prefix = var.substring(0, prefixPos).toLowerCase(Locale.US);
> final String name = var.substring(prefixPos + 1);
> final StrLookup lookup = lookups.get(prefix);
> if (lookup instanceof ConfigurationAware) {
> ((ConfigurationAware) lookup).setConfiguration(configuration);
> }
> String value = null;
> if (lookup != null) {
> value = event == null ? lookup.lookup(name) : lookup.lookup(event, name);
> }
> if (value != null) {
> return value;
> }
> var = var.substring(prefixPos + 1);
> }
> if (defaultLookup != null) {
> return event == null ? defaultLookup.lookup(var) : 
> defaultLookup.lookup(event, var);
> }
> return null;
> }
> {code}
> in the red mark, var="main" and prefixPos=-1. so it return the default value 
> "-file";
>  
>  



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to