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)