[logback-dev] [JIRA] (LOGBACK-1393) The ch.qos.logback.core.rolling.helper.FileFilterUtil.afterLastSlash function may caused NPE problem
QOS.CH (JIRA)
noreply-jira at qos.ch
Tue Mar 27 11:39:00 CEST 2018
Jiang Biao created LOGBACK-1393:
-----------------------------------
Summary: The ch.qos.logback.core.rolling.helper.FileFilterUtil.afterLastSlash function may caused NPE problem
Key: LOGBACK-1393
URL: https://jira.qos.ch/browse/LOGBACK-1393
Project: logback
Issue Type: Bug
Components: logback-core
Affects Versions: 1.1.1
Environment: Java 1.8.0
Intellij idea
Spring-boot
logback-core
Reporter: Jiang Biao
Assignee: Logback dev list
Priority: Critical
Attachments: Capture.PNG
I debug the logback codes and found the afterLastSlash function may caused NullPointException . Because of the function as follows.
public static String afterLastSlash(String sregex) \{
{color:#ff0000}int i = sregex.lastIndexOf('/');{color}
if (i == -1) \{
return sregex;
} else \{
return sregex.substring(i + 1);
}
}
if the "sregex" is a null String . The function will throw the exception and the program logic will be interrupted .
I will show your this case how to happed .
I create the a spring-boot project use the logback as log framework . The logback configuration is
-----
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<property name="LOG_HOME" value="log" />
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d\{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger\{50} - %msg%n</pattern>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>$\{LOG_HOME}/connectivi.log.%d\{yyyy-MM-dd}.log</FileNamePattern>
<MaxHistory>6</MaxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d\{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger\{50} - %msg%n</pattern>
<immediateFlush>true</immediateFlush>
</encoder>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</MaxFileSize>
</triggeringPolicy>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>TRACE</level>
</filter>
</appender>
<logger name="com.mindsphere.china.poc.connectivity" level="DEBUG" additivity="false">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</logger>
<root level="ERROR">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</root>
</configuration>
------
The program write the log into the file until the file size is small than 10MB ,When the log file size is more than 10MB . The logback continue write log will trigger the SizeBasedTriggeringPolicy . The TimeBasedRollingPolicy class will call the rollover() function .
public void rollover() throws RolloverFailure \{
// when rollover is called the elapsed period's file has
// been already closed. This is a working assumption of this method.
{color:#ff0000}String elapsedPeriodsFileName = timeBasedFileNamingAndTriggeringPolicy.getElapsedPeriodsFileName();{color}
String elapsedPeriodStem = FileFilterUtil.afterLastSlash(elapsedPeriodsFileName);
but the function timeBasedFileNamingAndTriggeringPolicy.getElapsedPeriodsFileName() return null . So the program could be broken and lose the logs.
BTW
I have choose another way to configuration the logback.xml and get the right result .But I think this is still a issues .So if you still want to have more details can connect will me by emails jbjiangbiao at icloud.com
--
This message was sent by Atlassian JIRA
(v7.3.1#73012)
More information about the logback-dev
mailing list