Skip to content

Commit f7dd0c9

Browse files
committed
Merge branch 'pr-127'
Add compatibility for newer logback versions #127
2 parents 22d459b + 49069d6 commit f7dd0c9

File tree

2 files changed

+34
-1
lines changed

2 files changed

+34
-1
lines changed

ReleaseNotes.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ This is a minor release.
1717

1818
* [#123](https://github.com/pmd/pmd-eclipse-plugin/pull/123): Support external configuration changes
1919
* [#124](https://github.com/pmd/pmd-eclipse-plugin/issues/124): No repository found containing: osgi.bundle,org.slf4j.log4j,1.7.2.v20130115-1340
20+
* [#125](https://github.com/pmd/pmd-eclipse-plugin/issues/125): NoSuchMethodError SizeBasedTriggeringPolicy.setMaxFileSize(Ljava/lang/String;)V
2021

2122
### API Changes
2223

net.sourceforge.pmd.eclipse.plugin/src/main/java/net/sourceforge/pmd/eclipse/logging/internal/LogbackConfiguration.java

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
package net.sourceforge.pmd.eclipse.logging.internal;
66

7+
import java.lang.reflect.Method;
8+
79
import org.eclipse.core.runtime.ILog;
810
import org.eclipse.core.runtime.IStatus;
911
import org.eclipse.core.runtime.Status;
@@ -22,11 +24,14 @@
2224
import ch.qos.logback.core.rolling.FixedWindowRollingPolicy;
2325
import ch.qos.logback.core.rolling.RollingFileAppender;
2426
import ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy;
27+
import ch.qos.logback.core.util.FileSize;
2528

2629
public class LogbackConfiguration {
2730
public static final String ROOT_LOG_ID = "net.sourceforge.pmd";
2831
private static final String PMD_ECLIPSE_APPENDER_NAME = "PMDEclipseAppender";
2932

33+
private static final String DEFAULT_PMD_LOG_MAX_FILE_SIZE = "10MB";
34+
3035
private ILog getLog() {
3136
return PMDPlugin.getDefault().getLog();
3237
}
@@ -81,7 +86,34 @@ private void configureLogs(String logFileName, String logLevel) {
8186
appender.setName(PMD_ECLIPSE_APPENDER_NAME);
8287
SizeBasedTriggeringPolicy<ILoggingEvent> triggeringPolicy = new SizeBasedTriggeringPolicy<>();
8388
triggeringPolicy.setContext(logbackContext);
84-
triggeringPolicy.setMaxFileSize("10MB");
89+
90+
/*
91+
* SizeBaseTriggeringPolicy#setMaxFileSize changed between logback-core 1.1.7 and 1.1.7:
92+
*
93+
* https://github.com/qos-ch/logback/blob/v_1.1.7/logback-core/src/main/java/ch/qos/logback/core/rolling/SizeBasedTriggeringPolicy.java
94+
*
95+
* public void setMaxFileSize(String maxFileSize)
96+
*
97+
* https://github.com/qos-ch/logback/blob/v_1.1.8/logback-core/src/main/java/ch/qos/logback/core/rolling/SizeBasedTriggeringPolicy.java
98+
*
99+
* public void setMaxFileSize(FileSize aMaxFileSize)
100+
*/
101+
try {
102+
triggeringPolicy.setMaxFileSize(DEFAULT_PMD_LOG_MAX_FILE_SIZE);
103+
} catch (NoSuchMethodError e) {
104+
try {
105+
Method m = triggeringPolicy.getClass().getMethod("setMaxFileSize", FileSize.class);
106+
assert m != null;
107+
m.invoke(triggeringPolicy, FileSize.valueOf(DEFAULT_PMD_LOG_MAX_FILE_SIZE));
108+
} catch (IllegalArgumentException | ReflectiveOperationException | SecurityException e2) {
109+
// relying on the default max file size
110+
System.err.println("WARNING: Unable to configure max file size for SizeBasedTriggeringPolicy.");
111+
System.err.println("Falling back to default of " + SizeBasedTriggeringPolicy.DEFAULT_MAX_FILE_SIZE + " bytes");
112+
System.err.println("Reported exception:");
113+
e2.printStackTrace();
114+
}
115+
}
116+
85117
triggeringPolicy.start();
86118
appender.setTriggeringPolicy(triggeringPolicy);
87119

0 commit comments

Comments
 (0)