[
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:
{code:text}
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)
{code}
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:
{code:text}
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)
{code}
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:
> {code:text}
> 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)
> {code}
> filePattern="test/\{Log\}%i.log" does the same.
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)