import ch.qos.logback.core.rolling.FixedWindowRollingPolicy;
import ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy;
import ch.qos.logback.core.rolling.TimeBasedRollingPolicy;
+import ch.qos.logback.core.util.FileSize;
import com.google.common.base.Optional;
import com.google.common.base.Preconditions;
import com.google.common.collect.Sets;
}
SizeBasedTriggeringPolicy<ILoggingEvent> triggeringPolicy = new SizeBasedTriggeringPolicy<>();
triggeringPolicy.setContext(context);
- triggeringPolicy.setMaxFileSize(appender.getMaxFileSize());
+ triggeringPolicy.setMaxFileSize(FileSize.valueOf(appender.getMaxFileSize()));
triggeringPolicy.start();
app.setTriggeringPolicy(triggeringPolicy);
app.setName(appender.getName());
import ch.qos.logback.core.rolling.FixedWindowRollingPolicy;
import ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy;
import ch.qos.logback.core.rolling.TimeBasedRollingPolicy;
+import ch.qos.logback.core.util.FileSize;
+import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Preconditions;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
+import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
}
SizeBasedTriggeringPolicy<ILoggingEvent> triggeringPolicy = (SizeBasedTriggeringPolicy<ILoggingEvent>) rollingApp
.getTriggeringPolicy();
- app.setMaxFileSize(triggeringPolicy.getMaxFileSize());
+ app.setMaxFileSize(getMaxFileSize(triggeringPolicy).toString());
app.setName(rollingApp.getName());
this.rollingDTOs.put(rollingApp.getName(), app);
} else if (appender instanceof ch.qos.logback.core.FileAppender<?>) {
return defaultModules;
}
+ // Ugly hack to deal with logback changing its api
+ private static final Field MAX_FILE_SIZE_FIELD;
+ static {
+ Field f;
+ try {
+ f = SizeBasedTriggeringPolicy.class.getDeclaredField("maxFileSize");
+ f.setAccessible(true);
+ } catch (NoSuchFieldException | SecurityException e) {
+ throw new ExceptionInInitializerError(e);
+ }
+
+ MAX_FILE_SIZE_FIELD = f;
+ }
+
+ @VisibleForTesting
+ static FileSize getMaxFileSize(SizeBasedTriggeringPolicy<?> policy) {
+ try {
+ return (FileSize) MAX_FILE_SIZE_FIELD.get(policy);
+ } catch (IllegalArgumentException | IllegalAccessException e) {
+ throw new IllegalStateException("Cannot get maxFileSize field", e);
+ }
+ }
}
rollingApp.setMinIndex(rollingPolicy.getMinIndex());
SizeBasedTriggeringPolicy<ILoggingEvent> triggeringPolicy = (SizeBasedTriggeringPolicy<ILoggingEvent>) fileAppender
.getTriggeringPolicy();
- rollingApp.setMaxFileSize(triggeringPolicy.getMaxFileSize());
+ rollingApp.setMaxFileSize(LogbackModuleFactory.getMaxFileSize(triggeringPolicy).toString());
rollingApp.setName(fileAppender.getName());
rollingApp.setFileNamePattern(rollingPolicy.getFileNamePattern());
rollingAppenders.add(rollingApp);
- assertEquals(rollingApp.getFileName(), "target/osgi.log");
- assertEquals(rollingApp.getMaxFileSize(), "50MB");
- assertEquals(rollingApp.getName(), "VARLOGFILE");
+ assertEquals("target/osgi.log", rollingApp.getFileName());
+ assertEquals("50 MB", rollingApp.getMaxFileSize());
+ assertEquals("VARLOGFILE", rollingApp.getName());
List<ConsoleAppenderTO> consoleAppenders = new ArrayList<>();
ConsoleAppenderTO consoleApp = new ConsoleAppenderTO();