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

M Sazzadul Hoque updated LOG4J2-1963:
-------------------------------------
    Description: 
Consider my following code:

{quote}{code:java}
import org.apache.logging.log4j.LogManager;

public class TestClass {
    public static void main(String[] args) {
        LogManager.getLogger().info("message(1)");
        LogManager.getLogger().info("message(2)");
        LogManager.getLogger().info("message(3)");
        LogManager.getLogger().info("message(4)");
    }
}
{code}{quote}

If I use following log4j2.xml

{quote}{code:xml}
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn">
    <Appenders>
        <RollingFile name="ROLLING" fileName="test/Log.log" 
                     filePattern="test/Log-%i.log" >
            <PatternLayout pattern="%d %-5p %C %t (%F:%L) - %m%n" />
            <SizeBasedTriggeringPolicy size="1B" />
        </RollingFile>
    </Appenders>
    <Loggers>
        <Root level="all">
            <AppenderRef ref="ROLLING" />
        </Root>
    </Loggers>
</Configuration>
{code}{quote}

I get following 4 files (as expected) containing all logs:
{quote}Log-1.log  Log-2.log  Log-3.log  Log.log{quote}

However, if I use either parentheses "()" or square braces "[]" in filePattern, 
I get only 2 file containing last two logs and first two logs are lost.

filePattern="test/Log(%i).log" generates:
{quote}Log(1).log  Log.log{quote}

filePattern="test/(Log)%i.log" generates:
{quote}(Log)1.log  Log.log{quote}

filePattern="test/Log[%i].log" generates:
{quote}Log[1].log  Log.log{quote}

filePattern="test/[Log]%i.log" generates:
{quote}[Log]1.log  Log.log{quote}

Moreover, usage of curly braces creates error.

filePattern="test/Log{%i}.log" creates following error 4 times:
{quote}2017-07-01 17:17:04,477 main ERROR An exception occurred processing 
Appender ROLLING java.util.regex.PatternSyntaxException: Illegal repetition 
near index 2
Log\{(\d+)\}.log
  ^
        at java.util.regex.Pattern.error(Pattern.java:1924)
        at java.util.regex.Pattern.closure(Pattern.java:3104)
        at java.util.regex.Pattern.sequence(Pattern.java:2101)
        at java.util.regex.Pattern.expr(Pattern.java:1964)
        at java.util.regex.Pattern.compile(Pattern.java:1665)
        at java.util.regex.Pattern.<init>(Pattern.java:1337)
        at java.util.regex.Pattern.compile(Pattern.java:1022)
        at 
org.apache.logging.log4j.core.appender.rolling.AbstractRolloverStrategy.getEligibleFiles(AbstractRolloverStrategy.java:124)
        at 
org.apache.logging.log4j.core.appender.rolling.AbstractRolloverStrategy.getEligibleFiles(AbstractRolloverStrategy.java:98)
        at 
org.apache.logging.log4j.core.appender.rolling.AbstractRolloverStrategy.getEligibleFiles(AbstractRolloverStrategy.java:90)
        at 
org.apache.logging.log4j.core.appender.rolling.DefaultRolloverStrategy.purgeAscending(DefaultRolloverStrategy.java:212)
        at 
org.apache.logging.log4j.core.appender.rolling.DefaultRolloverStrategy.purge(DefaultRolloverStrategy.java:199)
        at 
org.apache.logging.log4j.core.appender.rolling.DefaultRolloverStrategy.rollover(DefaultRolloverStrategy.java:326)
        at 
org.apache.logging.log4j.core.appender.rolling.RollingFileManager.rollover(RollingFileManager.java:362)
        at 
org.apache.logging.log4j.core.appender.rolling.RollingFileManager.rollover(RollingFileManager.java:278)
        at 
org.apache.logging.log4j.core.appender.rolling.RollingFileManager.checkRollover(RollingFileManager.java:218)
        at 
org.apache.logging.log4j.core.appender.RollingFileAppender.append(RollingFileAppender.java:267)
        at 
org.apache.logging.log4j.core.config.AppenderControl.tryCallAppender(AppenderControl.java:156)
        at 
org.apache.logging.log4j.core.config.AppenderControl.callAppender0(AppenderControl.java:129)
        at 
org.apache.logging.log4j.core.config.AppenderControl.callAppenderPreventRecursion(AppenderControl.java:120)
        at 
org.apache.logging.log4j.core.config.AppenderControl.callAppender(AppenderControl.java:84)
        at 
org.apache.logging.log4j.core.config.LoggerConfig.callAppenders(LoggerConfig.java:448)
        at 
org.apache.logging.log4j.core.config.LoggerConfig.processLogEvent(LoggerConfig.java:433)
        at 
org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:417)
        at 
org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:403)
        at 
org.apache.logging.log4j.core.config.AwaitCompletionReliabilityStrategy.log(AwaitCompletionReliabilityStrategy.java:63)
        at org.apache.logging.log4j.core.Logger.logMessage(Logger.java:146)
        at 
org.apache.logging.log4j.spi.AbstractLogger.logMessageSafely(AbstractLogger.java:2091)
        at 
org.apache.logging.log4j.spi.AbstractLogger.logMessage(AbstractLogger.java:1988)
        at 
org.apache.logging.log4j.spi.AbstractLogger.logIfEnabled(AbstractLogger.java:1960)
        at 
org.apache.logging.log4j.spi.AbstractLogger.info(AbstractLogger.java:1297)
        at test.TestClass.main(TestClass.java:54){quote}

filePattern="test/\{Log\}%i.log" does the same.

  was:
Consider my following code:

{quote}{code:java}
import org.apache.logging.log4j.LogManager;

public class TestClass {
    public static void main(String[] args) {
        LogManager.getLogger().info("message(1)");
        LogManager.getLogger().info("message(2)");
        LogManager.getLogger().info("message(3)");
        LogManager.getLogger().info("message(4)");
    }
}
{code}{quote}

If I use following log4j2.xml

{quote}{code:xml}
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn">
    <Appenders>
        <RollingFile name="ROLLING" fileName="test/Log.log" 
                     filePattern="test/Log-%i.log" >
            <PatternLayout pattern="%d %-5p %C %t (%F:%L) - %m%n" />
            <SizeBasedTriggeringPolicy size="1B" />
        </RollingFile>
    </Appenders>
    <Loggers>
        <Root level="all">
            <AppenderRef ref="ROLLING" />
        </Root>
    </Loggers>
</Configuration>
{code}{quote}

I get following 4 files (as expected) containing all logs:
{quote}Log-1.log  Log-2.log  Log-3.log  Log.log{quote}

However, if I use either parentheses "()" or square braces "[]" in filePattern, 
I get only 2 file containing last two logs and first two logs are lost.

filePattern="test/Log(%i).log" generates:
{quote}Log(1).log  Log.log{quote}

filePattern="test/(Log)%i.log" generates:
{quote}(Log)1.log  Log.log{quote}

filePattern="test/Log[%i].log" generates:
{quote}Log[1].log  Log.log{quote}

filePattern="test/[Log]%i.log" generates:
{quote}[Log]1.log  Log.log{quote}

Moreover, usage of curly braces creates error.

filePattern="test/Log{%i}.log" creates following error 4 times:
{quote}2017-07-01 17:17:04,477 main ERROR An exception occurred processing 
Appender ROLLING java.util.regex.PatternSyntaxException: Illegal repetition 
near index 2
Log\{(\d+)\}.log
  ^
        at java.util.regex.Pattern.error(Pattern.java:1924)
        at java.util.regex.Pattern.closure(Pattern.java:3104)
        at java.util.regex.Pattern.sequence(Pattern.java:2101)
        at java.util.regex.Pattern.expr(Pattern.java:1964)
        at java.util.regex.Pattern.compile(Pattern.java:1665)
        at java.util.regex.Pattern.<init>(Pattern.java:1337)
        at java.util.regex.Pattern.compile(Pattern.java:1022)
        at 
org.apache.logging.log4j.core.appender.rolling.AbstractRolloverStrategy.getEligibleFiles(AbstractRolloverStrategy.java:124)
        at 
org.apache.logging.log4j.core.appender.rolling.AbstractRolloverStrategy.getEligibleFiles(AbstractRolloverStrategy.java:98)
        at 
org.apache.logging.log4j.core.appender.rolling.AbstractRolloverStrategy.getEligibleFiles(AbstractRolloverStrategy.java:90)
        at 
org.apache.logging.log4j.core.appender.rolling.DefaultRolloverStrategy.purgeAscending(DefaultRolloverStrategy.java:212)
        at 
org.apache.logging.log4j.core.appender.rolling.DefaultRolloverStrategy.purge(DefaultRolloverStrategy.java:199)
        at 
org.apache.logging.log4j.core.appender.rolling.DefaultRolloverStrategy.rollover(DefaultRolloverStrategy.java:326)
        at 
org.apache.logging.log4j.core.appender.rolling.RollingFileManager.rollover(RollingFileManager.java:362)
        at 
org.apache.logging.log4j.core.appender.rolling.RollingFileManager.rollover(RollingFileManager.java:278)
        at 
org.apache.logging.log4j.core.appender.rolling.RollingFileManager.checkRollover(RollingFileManager.java:218)
        at 
org.apache.logging.log4j.core.appender.RollingFileAppender.append(RollingFileAppender.java:267)
        at 
org.apache.logging.log4j.core.config.AppenderControl.tryCallAppender(AppenderControl.java:156)
        at 
org.apache.logging.log4j.core.config.AppenderControl.callAppender0(AppenderControl.java:129)
        at 
org.apache.logging.log4j.core.config.AppenderControl.callAppenderPreventRecursion(AppenderControl.java:120)
        at 
org.apache.logging.log4j.core.config.AppenderControl.callAppender(AppenderControl.java:84)
        at 
org.apache.logging.log4j.core.config.LoggerConfig.callAppenders(LoggerConfig.java:448)
        at 
org.apache.logging.log4j.core.config.LoggerConfig.processLogEvent(LoggerConfig.java:433)
        at 
org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:417)
        at 
org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:403)
        at 
org.apache.logging.log4j.core.config.AwaitCompletionReliabilityStrategy.log(AwaitCompletionReliabilityStrategy.java:63)
        at org.apache.logging.log4j.core.Logger.logMessage(Logger.java:146)
        at 
org.apache.logging.log4j.spi.AbstractLogger.logMessageSafely(AbstractLogger.java:2091)
        at 
org.apache.logging.log4j.spi.AbstractLogger.logMessage(AbstractLogger.java:1988)
        at 
org.apache.logging.log4j.spi.AbstractLogger.logIfEnabled(AbstractLogger.java:1960)
        at 
org.apache.logging.log4j.spi.AbstractLogger.info(AbstractLogger.java:1297)
        at test.TestClass.main(TestClass.java:54){quote}

filePattern="test/{Log}%i.log" does the same.


> Usage of braces in filePattern creates unexpected behaviors
> -----------------------------------------------------------
>
>                 Key: LOG4J2-1963
>                 URL: https://issues.apache.org/jira/browse/LOG4J2-1963
>             Project: Log4j 2
>          Issue Type: Bug
>          Components: Appenders
>    Affects Versions: 2.8.2
>            Reporter: M Sazzadul Hoque
>
> Consider my following code:
> {quote}{code:java}
> import org.apache.logging.log4j.LogManager;
> public class TestClass {
>     public static void main(String[] args) {
>         LogManager.getLogger().info("message(1)");
>         LogManager.getLogger().info("message(2)");
>         LogManager.getLogger().info("message(3)");
>         LogManager.getLogger().info("message(4)");
>     }
> }
> {code}{quote}
> If I use following log4j2.xml
> {quote}{code:xml}
> <?xml version="1.0" encoding="UTF-8"?>
> <Configuration status="warn">
>     <Appenders>
>         <RollingFile name="ROLLING" fileName="test/Log.log" 
>                      filePattern="test/Log-%i.log" >
>             <PatternLayout pattern="%d %-5p %C %t (%F:%L) - %m%n" />
>             <SizeBasedTriggeringPolicy size="1B" />
>         </RollingFile>
>     </Appenders>
>     <Loggers>
>         <Root level="all">
>             <AppenderRef ref="ROLLING" />
>         </Root>
>     </Loggers>
> </Configuration>
> {code}{quote}
> I get following 4 files (as expected) containing all logs:
> {quote}Log-1.log  Log-2.log  Log-3.log  Log.log{quote}
> However, if I use either parentheses "()" or square braces "[]" in 
> filePattern, I get only 2 file containing last two logs and first two logs 
> are lost.
> filePattern="test/Log(%i).log" generates:
> {quote}Log(1).log  Log.log{quote}
> filePattern="test/(Log)%i.log" generates:
> {quote}(Log)1.log  Log.log{quote}
> filePattern="test/Log[%i].log" generates:
> {quote}Log[1].log  Log.log{quote}
> filePattern="test/[Log]%i.log" generates:
> {quote}[Log]1.log  Log.log{quote}
> Moreover, usage of curly braces creates error.
> filePattern="test/Log{%i}.log" creates following error 4 times:
> {quote}2017-07-01 17:17:04,477 main ERROR An exception occurred processing 
> Appender ROLLING java.util.regex.PatternSyntaxException: Illegal repetition 
> near index 2
> Log\{(\d+)\}.log
>   ^
>       at java.util.regex.Pattern.error(Pattern.java:1924)
>       at java.util.regex.Pattern.closure(Pattern.java:3104)
>       at java.util.regex.Pattern.sequence(Pattern.java:2101)
>       at java.util.regex.Pattern.expr(Pattern.java:1964)
>       at java.util.regex.Pattern.compile(Pattern.java:1665)
>       at java.util.regex.Pattern.<init>(Pattern.java:1337)
>       at java.util.regex.Pattern.compile(Pattern.java:1022)
>       at 
> org.apache.logging.log4j.core.appender.rolling.AbstractRolloverStrategy.getEligibleFiles(AbstractRolloverStrategy.java:124)
>       at 
> org.apache.logging.log4j.core.appender.rolling.AbstractRolloverStrategy.getEligibleFiles(AbstractRolloverStrategy.java:98)
>       at 
> org.apache.logging.log4j.core.appender.rolling.AbstractRolloverStrategy.getEligibleFiles(AbstractRolloverStrategy.java:90)
>       at 
> org.apache.logging.log4j.core.appender.rolling.DefaultRolloverStrategy.purgeAscending(DefaultRolloverStrategy.java:212)
>       at 
> org.apache.logging.log4j.core.appender.rolling.DefaultRolloverStrategy.purge(DefaultRolloverStrategy.java:199)
>       at 
> org.apache.logging.log4j.core.appender.rolling.DefaultRolloverStrategy.rollover(DefaultRolloverStrategy.java:326)
>       at 
> org.apache.logging.log4j.core.appender.rolling.RollingFileManager.rollover(RollingFileManager.java:362)
>       at 
> org.apache.logging.log4j.core.appender.rolling.RollingFileManager.rollover(RollingFileManager.java:278)
>       at 
> org.apache.logging.log4j.core.appender.rolling.RollingFileManager.checkRollover(RollingFileManager.java:218)
>       at 
> org.apache.logging.log4j.core.appender.RollingFileAppender.append(RollingFileAppender.java:267)
>       at 
> org.apache.logging.log4j.core.config.AppenderControl.tryCallAppender(AppenderControl.java:156)
>       at 
> org.apache.logging.log4j.core.config.AppenderControl.callAppender0(AppenderControl.java:129)
>       at 
> org.apache.logging.log4j.core.config.AppenderControl.callAppenderPreventRecursion(AppenderControl.java:120)
>       at 
> org.apache.logging.log4j.core.config.AppenderControl.callAppender(AppenderControl.java:84)
>       at 
> org.apache.logging.log4j.core.config.LoggerConfig.callAppenders(LoggerConfig.java:448)
>       at 
> org.apache.logging.log4j.core.config.LoggerConfig.processLogEvent(LoggerConfig.java:433)
>       at 
> org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:417)
>       at 
> org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:403)
>       at 
> org.apache.logging.log4j.core.config.AwaitCompletionReliabilityStrategy.log(AwaitCompletionReliabilityStrategy.java:63)
>       at org.apache.logging.log4j.core.Logger.logMessage(Logger.java:146)
>       at 
> org.apache.logging.log4j.spi.AbstractLogger.logMessageSafely(AbstractLogger.java:2091)
>       at 
> org.apache.logging.log4j.spi.AbstractLogger.logMessage(AbstractLogger.java:1988)
>       at 
> org.apache.logging.log4j.spi.AbstractLogger.logIfEnabled(AbstractLogger.java:1960)
>       at 
> org.apache.logging.log4j.spi.AbstractLogger.info(AbstractLogger.java:1297)
>       at test.TestClass.main(TestClass.java:54){quote}
> filePattern="test/\{Log\}%i.log" does the same.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to