diff --git a/logback-classic/src/test/java/ch/qos/logback/classic/joran/JoranConfiguratorTest.java b/logback-classic/src/test/java/ch/qos/logback/classic/joran/JoranConfiguratorTest.java index 0958ab33b3..3a843fa97f 100755 --- a/logback-classic/src/test/java/ch/qos/logback/classic/joran/JoranConfiguratorTest.java +++ b/logback-classic/src/test/java/ch/qos/logback/classic/joran/JoranConfiguratorTest.java @@ -427,4 +427,12 @@ public void packageDataEnabledByConfigAttribute() throws JoranException { configure(configFileAsStr); assertTrue(loggerContext.isPackagingDataEnabled()); } + + + @Test + public void valueOfConvetion() throws JoranException { + String configFileAsStr = ClassicTestConstants.JORAN_INPUT_PREFIX + "valueOfConvention.xml"; + configure(configFileAsStr); + checker.assertIsWarningOrErrorFree(); + } } diff --git a/logback-core/src/main/java/ch/qos/logback/core/joran/action/NestedBasicPropertyIA.java b/logback-core/src/main/java/ch/qos/logback/core/joran/action/NestedBasicPropertyIA.java index 114bd00b0c..6769c95cf9 100644 --- a/logback-core/src/main/java/ch/qos/logback/core/joran/action/NestedBasicPropertyIA.java +++ b/logback-core/src/main/java/ch/qos/logback/core/joran/action/NestedBasicPropertyIA.java @@ -96,6 +96,8 @@ public void body(InterpretationContext ec, String body) { break; case AS_BASIC_PROPERTY_COLLECTION: actionData.parentBean.addBasicProperty(actionData.propertyName, finalBody); + default: + addError("Unexpected aggregationType " + actionData.aggregationType); } } diff --git a/logback-core/src/main/java/ch/qos/logback/core/joran/action/NestedComplexPropertyIA.java b/logback-core/src/main/java/ch/qos/logback/core/joran/action/NestedComplexPropertyIA.java index f3933b7d83..af784adc48 100644 --- a/logback-core/src/main/java/ch/qos/logback/core/joran/action/NestedComplexPropertyIA.java +++ b/logback-core/src/main/java/ch/qos/logback/core/joran/action/NestedComplexPropertyIA.java @@ -46,10 +46,11 @@ public class NestedComplexPropertyIA extends ImplicitAction { // be followed by a corresponding pop. Stack actionDataStack = new Stack(); - private final BeanDescriptionCache beanDescriptionCache; - public NestedComplexPropertyIA(BeanDescriptionCache beanDescriptionCache) { - this.beanDescriptionCache=beanDescriptionCache; - } + private final BeanDescriptionCache beanDescriptionCache; + + public NestedComplexPropertyIA(BeanDescriptionCache beanDescriptionCache) { + this.beanDescriptionCache = beanDescriptionCache; + } public boolean isApplicable(ElementPath elementPath, Attributes attributes, InterpretationContext ic) { @@ -61,7 +62,7 @@ public boolean isApplicable(ElementPath elementPath, Attributes attributes, Inte } Object o = ic.peekObject(); - PropertySetter parentBean = new PropertySetter(beanDescriptionCache,o); + PropertySetter parentBean = new PropertySetter(beanDescriptionCache, o); parentBean.setContext(context); AggregationType aggregationType = parentBean.computeAggregationType(nestedElementTagName); @@ -145,7 +146,7 @@ public void end(InterpretationContext ec, String tagName) { return; } - PropertySetter nestedBean = new PropertySetter(beanDescriptionCache,actionData.getNestedComplexProperty()); + PropertySetter nestedBean = new PropertySetter(beanDescriptionCache, actionData.getNestedComplexProperty()); nestedBean.setContext(context); // have the nested element point to its parent if possible @@ -174,8 +175,9 @@ public void end(InterpretationContext ec, String tagName) { break; case AS_COMPLEX_PROPERTY_COLLECTION: actionData.parentBean.addComplexProperty(tagName, actionData.getNestedComplexProperty()); - break; + default: + addError("Unexpected aggregationType " + actionData.aggregationType); } } } diff --git a/logback-core/src/main/java/ch/qos/logback/core/rolling/TimeBasedRollingPolicy.java b/logback-core/src/main/java/ch/qos/logback/core/rolling/TimeBasedRollingPolicy.java index 1d78fc3e33..96590a231a 100644 --- a/logback-core/src/main/java/ch/qos/logback/core/rolling/TimeBasedRollingPolicy.java +++ b/logback-core/src/main/java/ch/qos/logback/core/rolling/TimeBasedRollingPolicy.java @@ -29,6 +29,7 @@ import ch.qos.logback.core.rolling.helper.FileFilterUtil; import ch.qos.logback.core.rolling.helper.FileNamePattern; import ch.qos.logback.core.rolling.helper.RenameUtil; +import ch.qos.logback.core.util.FileSize; /** * TimeBasedRollingPolicy is both easy to configure and quite @@ -51,7 +52,7 @@ public class TimeBasedRollingPolicy extends RollingPolicyBase implements Trig Future cleanUpFuture; private int maxHistory = UNBOUND_HISTORY; - private long totalSizeCap = UNBOUND_TOTAL_SIZE; + private FileSize totalSizeCap = new FileSize(UNBOUND_TOTAL_SIZE); private ArchiveRemover archiveRemover; @@ -104,13 +105,13 @@ public void start() { if (maxHistory != UNBOUND_HISTORY) { archiveRemover = timeBasedFileNamingAndTriggeringPolicy.getArchiveRemover(); archiveRemover.setMaxHistory(maxHistory); - archiveRemover.setTotalSizeCap(totalSizeCap); + archiveRemover.setTotalSizeCap(totalSizeCap.getSize()); if (cleanHistoryOnStart) { addInfo("Cleaning on start up"); Date now = new Date(timeBasedFileNamingAndTriggeringPolicy.getCurrentTime()); cleanUpFuture = archiveRemover.cleanAsynchronously(now); } - } else if (totalSizeCap != UNBOUND_TOTAL_SIZE) { + } else if (totalSizeCap.getSize() != UNBOUND_TOTAL_SIZE) { addWarn("'maxHistory' is not set, ignoring 'totalSizeCap' option with value ["+totalSizeCap+"]"); } @@ -255,8 +256,7 @@ public String toString() { return "c.q.l.core.rolling.TimeBasedRollingPolicy@"+this.hashCode(); } - public void setTotalSizeCap(long totalSizeCap) { + public void setTotalSizeCap(FileSize totalSizeCap) { this.totalSizeCap = totalSizeCap; - } } diff --git a/logback-core/src/main/java/ch/qos/logback/core/status/StatusUtil.java b/logback-core/src/main/java/ch/qos/logback/core/status/StatusUtil.java index eb10120e14..cb77d02490 100755 --- a/logback-core/src/main/java/ch/qos/logback/core/status/StatusUtil.java +++ b/logback-core/src/main/java/ch/qos/logback/core/status/StatusUtil.java @@ -103,6 +103,10 @@ public boolean isErrorFree(long threshold) { return Status.ERROR > getHighestLevel(threshold); } + public boolean isWarningOrErrorFree(long threshold) { + return Status.WARN > getHighestLevel(threshold); + } + public boolean containsMatch(long threshold, int level, String regex) { List filteredList = filterStatusListByTimeThreshold(sm.getCopyOfStatusList(), threshold); Pattern p = Pattern.compile(regex); diff --git a/logback-core/src/test/java/ch/qos/logback/core/rolling/TimeBasedRollingWithArchiveRemoval_Test.java b/logback-core/src/test/java/ch/qos/logback/core/rolling/TimeBasedRollingWithArchiveRemoval_Test.java index 19e9a0fc17..7b1e84a1eb 100755 --- a/logback-core/src/test/java/ch/qos/logback/core/rolling/TimeBasedRollingWithArchiveRemoval_Test.java +++ b/logback-core/src/test/java/ch/qos/logback/core/rolling/TimeBasedRollingWithArchiveRemoval_Test.java @@ -41,6 +41,7 @@ import ch.qos.logback.core.pattern.SpacePadder; import ch.qos.logback.core.rolling.helper.RollingCalendar; import ch.qos.logback.core.status.StatusChecker; +import ch.qos.logback.core.util.FileSize; import ch.qos.logback.core.util.FixedRateInvocationGate; import ch.qos.logback.core.util.StatusPrinter; @@ -411,7 +412,7 @@ void buildRollingFileAppender(ConfigParameters cp, boolean cleanHistoryOnStart) tbrp.setContext(context); tbrp.setFileNamePattern(cp.fileNamePattern); tbrp.setMaxHistory(cp.maxHistory); - tbrp.setTotalSizeCap(cp.sizeCap); + tbrp.setTotalSizeCap(new FileSize(cp.sizeCap)); tbrp.setParent(rfa); tbrp.setCleanHistoryOnStart(cleanHistoryOnStart); tbrp.timeBasedFileNamingAndTriggeringPolicy = tbfnatp; diff --git a/logback-core/src/test/java/ch/qos/logback/core/status/StatusChecker.java b/logback-core/src/test/java/ch/qos/logback/core/status/StatusChecker.java index f7e618defc..466d7cc9ff 100644 --- a/logback-core/src/test/java/ch/qos/logback/core/status/StatusChecker.java +++ b/logback-core/src/test/java/ch/qos/logback/core/status/StatusChecker.java @@ -51,4 +51,7 @@ public void assertIsErrorFree() { assertTrue(isErrorFree(0)); } + public void assertIsWarningOrErrorFree() { + assertTrue(isWarningOrErrorFree(0)); + } }