You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@logging.apache.org by "M Sazzadul Hoque (JIRA)" <ji...@apache.org> on 2017/07/01 11:20:00 UTC

[jira] [Created] (LOG4J2-1963) Usage of braces in filePattern creates unexpected behaviors

M Sazzadul Hoque created LOG4J2-1963:
----------------------------------------

             Summary: 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)