[ 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)