|
4 | 4 |
|
5 | 5 | package net.sourceforge.pmd.eclipse.logging.internal; |
6 | 6 |
|
| 7 | +import java.lang.reflect.Method; |
| 8 | + |
7 | 9 | import org.eclipse.core.runtime.ILog; |
8 | 10 | import org.eclipse.core.runtime.IStatus; |
9 | 11 | import org.eclipse.core.runtime.Status; |
|
22 | 24 | import ch.qos.logback.core.rolling.FixedWindowRollingPolicy; |
23 | 25 | import ch.qos.logback.core.rolling.RollingFileAppender; |
24 | 26 | import ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy; |
| 27 | +import ch.qos.logback.core.util.FileSize; |
25 | 28 |
|
26 | 29 | public class LogbackConfiguration { |
27 | 30 | public static final String ROOT_LOG_ID = "net.sourceforge.pmd"; |
28 | 31 | private static final String PMD_ECLIPSE_APPENDER_NAME = "PMDEclipseAppender"; |
29 | 32 |
|
| 33 | + private static final String DEFAULT_PMD_LOG_MAX_FILE_SIZE = "10MB"; |
| 34 | + |
30 | 35 | private ILog getLog() { |
31 | 36 | return PMDPlugin.getDefault().getLog(); |
32 | 37 | } |
@@ -81,7 +86,34 @@ private void configureLogs(String logFileName, String logLevel) { |
81 | 86 | appender.setName(PMD_ECLIPSE_APPENDER_NAME); |
82 | 87 | SizeBasedTriggeringPolicy<ILoggingEvent> triggeringPolicy = new SizeBasedTriggeringPolicy<>(); |
83 | 88 | 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 | + |
85 | 117 | triggeringPolicy.start(); |
86 | 118 | appender.setTriggeringPolicy(triggeringPolicy); |
87 | 119 |
|
|
0 commit comments