Repository navigation
Closed
Description
Discovered because a windows user had a home folder ala "c:/users/Michael(Financ" likely due to a truncated user name. This is an issue for all log file paths that are not valid regex patterns.
Issue seen on logback version 1.5.9.
Stack trace:
Exception in thread "main" java.util.regex.PatternSyntaxException: Unclosed group near index 38
log.orphan(paren.\d{4}-\d{2}-\d{2}.log
at java.base/java.util.regex.Pattern.error(Pattern.java:2204)
at java.base/java.util.regex.Pattern.accept(Pattern.java:2054)
at java.base/java.util.regex.Pattern.group0(Pattern.java:3232)
at java.base/java.util.regex.Pattern.sequence(Pattern.java:2300)
at java.base/java.util.regex.Pattern.expr(Pattern.java:2245)
at java.base/java.util.regex.Pattern.compile(Pattern.java:1945)
at java.base/java.util.regex.Pattern.<init>(Pattern.java:1576)
at java.base/java.util.regex.Pattern.compile(Pattern.java:1101)
at java.base/java.util.regex.Pattern.matches(Pattern.java:1220)
at java.base/java.lang.String.matches(String.java:2965)
at ch.qos.logback.core.rolling.RollingFileAppender.checkForFileAndPatternCollisions(RollingFileAppender.java:113)
at ch.qos.logback.core.rolling.RollingFileAppender.start(RollingFileAppender.java:84)
at LogbackInvalidRegexPathCheck.main(LogbackInvalidRegexPathCheck.java:23)
Code example:
import org.slf4j.LoggerFactory;
import ch.qos.logback.classic.Logger;
import ch.qos.logback.core.rolling.RollingFileAppender;
import ch.qos.logback.core.rolling.TimeBasedRollingPolicy;
public class LogbackInvalidRegexPathCheck {
public static void main(String[] args) throws Exception {
Logger logger = (Logger) LoggerFactory.getLogger("invalid-regex");
RollingFileAppender<Object> rollingFileAppender = new RollingFileAppender<>();
rollingFileAppender.setFile("log.log");
TimeBasedRollingPolicy<Object> rollingPolicy = new TimeBasedRollingPolicy<>();
rollingPolicy.setFileNamePattern("log.orphan(paren.%d{yyyy-MM-dd}.log");
rollingPolicy.setParent(rollingFileAppender);
rollingPolicy.setContext(logger.getLoggerContext());
rollingPolicy.start();
rollingFileAppender.setRollingPolicy(rollingPolicy);
rollingFileAppender.setTriggeringPolicy(rollingPolicy);
rollingFileAppender.setContext(logger.getLoggerContext());
rollingFileAppender.start();
}
}
logback.xml example:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration>
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%kvp- %msg%n</pattern>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>log.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>log.orphan(paren.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxHistory>5</maxHistory>
<maxFileSize>10MB</maxFileSize>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%date %level [%thread] %logger{10} [%file:%line] -%kvp- %msg%n</pattern>
</encoder>
</appender>
<root level="debug">
<appender-ref ref="STDOUT"/>
<appender-ref ref="FILE"/>
</root>
</configuration>
Metadata
Metadata
Assignees
Labels
No labels
Activity
Escape regex metacharacters of literal text in FileNamePattern regexes
Escape regex metacharacters of literal text in FileNamePattern regexes