From 2249bd7f6149d1ea516e0e3450e336002938e2b0 Mon Sep 17 00:00:00 2001 From: Ceki Gulcu Date: Wed, 10 Feb 2016 22:14:02 +0100 Subject: [PATCH] packaging data is disabled by default, various minor changes --- .travis.yml | 2 +- .../access/pattern/EnsureLineSeparation.java | 3 +- .../servlet/TeeHttpServletResponseTest.java | 2 +- logback-classic/pom.xml | 4 +- .../ch/qos/logback/classic/LoggerContext.java | 6 +- .../classic/joran/JoranConfigurator.java | 5 +- .../joran/action/ConfigurationAction.java | 10 +- .../pattern/EnsureExceptionHandling.java | 16 ++- .../pattern/ThrowableProxyConverter.java | 4 +- ...aEnabled.xml => packagingDataDisabled.xml} | 2 +- ...aDisabled.xml => packagingDataEnabled.xml} | 2 +- .../{lbclassic203.xml => logback_416.xml} | 2 +- .../logback/classic/issue/PackageTest.java | 3 +- .../lbclassic139/LB139_DeadlockTest.java | 2 +- .../lbclassic139/PackageTest.java | 23 ---- .../ConcurrentSiftingTest.java | 8 +- .../InstanceCountingAppender.java | 8 +- .../PackageTest.java | 2 +- .../classic/joran/EvaluatorJoranTest.java | 5 +- .../classic/joran/JoranConfiguratorTest.java | 115 ++++++++++-------- logback-core/pom.xml | 5 +- .../core/pattern/PatternLayoutBase.java | 2 +- .../core/pattern/PostCompileProcessor.java | 4 +- .../src/site/pages/manual/configuration.html | 94 +++++++------- logback-site/src/site/pages/news.html | 40 +++--- logback-site/src/site/pages/setup.html | 2 +- .../src/site/pages/templates/footer.js | 2 +- pom.xml | 4 +- release.sh | 5 +- 29 files changed, 205 insertions(+), 177 deletions(-) rename logback-classic/src/test/input/joran/{packageDataEnabled.xml => packagingDataDisabled.xml} (88%) rename logback-classic/src/test/input/joran/{packageDataDisabled.xml => packagingDataEnabled.xml} (87%) rename logback-classic/src/test/input/joran/sift/{lbclassic203.xml => logback_416.xml} (85%) delete mode 100644 logback-classic/src/test/java/ch/qos/logback/classic/issue/lbclassic135/lbclassic139/PackageTest.java rename logback-classic/src/test/java/ch/qos/logback/classic/issue/{lbclassic203 => logback416}/ConcurrentSiftingTest.java (89%) rename logback-classic/src/test/java/ch/qos/logback/classic/issue/{lbclassic203 => logback416}/InstanceCountingAppender.java (78%) rename logback-classic/src/test/java/ch/qos/logback/classic/issue/{lbclassic203 => logback416}/PackageTest.java (92%) diff --git a/.travis.yml b/.travis.yml index e341a389e..74f2ed9ae 100755 --- a/.travis.yml +++ b/.travis.yml @@ -1,4 +1,4 @@ language: java notifications: email: - - logback-dev@qos.ch + - notification@qos.ch diff --git a/logback-access/src/main/java/ch/qos/logback/access/pattern/EnsureLineSeparation.java b/logback-access/src/main/java/ch/qos/logback/access/pattern/EnsureLineSeparation.java index e6e964b50..9fd694e8d 100644 --- a/logback-access/src/main/java/ch/qos/logback/access/pattern/EnsureLineSeparation.java +++ b/logback-access/src/main/java/ch/qos/logback/access/pattern/EnsureLineSeparation.java @@ -14,6 +14,7 @@ package ch.qos.logback.access.pattern; import ch.qos.logback.access.spi.IAccessEvent; +import ch.qos.logback.core.Context; import ch.qos.logback.core.pattern.Converter; import ch.qos.logback.core.pattern.ConverterUtil; import ch.qos.logback.core.pattern.PostCompileProcessor; @@ -25,7 +26,7 @@ public class EnsureLineSeparation implements PostCompileProcessor * line. */ @Override - public void process(Converter head) { + public void process(Context context, Converter head) { if(head == null) throw new IllegalArgumentException("Empty converter chain"); diff --git a/logback-access/src/test/java/ch/qos/logback/access/servlet/TeeHttpServletResponseTest.java b/logback-access/src/test/java/ch/qos/logback/access/servlet/TeeHttpServletResponseTest.java index 1bdecf279..3fb079ffd 100644 --- a/logback-access/src/test/java/ch/qos/logback/access/servlet/TeeHttpServletResponseTest.java +++ b/logback-access/src/test/java/ch/qos/logback/access/servlet/TeeHttpServletResponseTest.java @@ -41,7 +41,7 @@ public class TeeHttpServletResponseTest { } @Parameterized.Parameters - public static Collection inputValues() { + public static Collection inputValues() { return Arrays.asList(new Object[][]{ { "utf-8", "Gülcü", new byte[] { (byte) 0x47, (byte) 0xC3, (byte) 0xBC, (byte) 0x6C, (byte) 0x63, (byte) 0xC3, (byte) 0xBC }}, { "iso-8859-1", "Gülcü", new byte[] { (byte) 0x47, (byte) 0xFC, (byte) 0x6C, (byte) 0x63, (byte) 0xFC }} diff --git a/logback-classic/pom.xml b/logback-classic/pom.xml index 2f1d97b33..ade77b94b 100755 --- a/logback-classic/pom.xml +++ b/logback-classic/pom.xml @@ -260,7 +260,9 @@ maven-surefire-plugin - once + + 1 + true plain false diff --git a/logback-classic/src/main/java/ch/qos/logback/classic/LoggerContext.java b/logback-classic/src/main/java/ch/qos/logback/classic/LoggerContext.java index 098231bb6..cdac5531a 100755 --- a/logback-classic/src/main/java/ch/qos/logback/classic/LoggerContext.java +++ b/logback-classic/src/main/java/ch/qos/logback/classic/LoggerContext.java @@ -45,8 +45,8 @@ import ch.qos.logback.core.status.WarnStatus; public class LoggerContext extends ContextBase implements ILoggerFactory, LifeCycle { - /** Default setting of stacktrace packaging detail */ - public static final boolean DEFAULT_PACKAGING_STATE = false; + /** Default setting of packaging data in stack traces */ + public static final boolean DEFAULT_PACKAGING_DATA = false; final Logger root; private int size; @@ -57,7 +57,7 @@ public class LoggerContext extends ContextBase implements ILoggerFactory, private LoggerContextVO loggerContextRemoteView; private final TurboFilterList turboFilterList = new TurboFilterList(); - private boolean packagingDataEnabled = DEFAULT_PACKAGING_STATE; + private boolean packagingDataEnabled = DEFAULT_PACKAGING_DATA; private int maxCallerDataDepth = ClassicConstants.DEFAULT_MAX_CALLEDER_DATA_DEPTH; diff --git a/logback-classic/src/main/java/ch/qos/logback/classic/joran/JoranConfigurator.java b/logback-classic/src/main/java/ch/qos/logback/classic/joran/JoranConfigurator.java index 78188677c..94a66fa57 100644 --- a/logback-classic/src/main/java/ch/qos/logback/classic/joran/JoranConfigurator.java +++ b/logback-classic/src/main/java/ch/qos/logback/classic/joran/JoranConfigurator.java @@ -15,6 +15,7 @@ package ch.qos.logback.classic.joran; import ch.qos.logback.classic.joran.action.*; import ch.qos.logback.classic.sift.SiftAction; +import ch.qos.logback.classic.spi.ILoggingEvent; import ch.qos.logback.classic.spi.PlatformInfo; import ch.qos.logback.classic.util.DefaultNestedComponentRules; import ch.qos.logback.core.joran.JoranConfiguratorBase; @@ -59,9 +60,9 @@ public class JoranConfigurator extends JoranConfiguratorBase { rs.addRule(new ElementSelector("configuration/root"), new RootLoggerAction()); rs.addRule(new ElementSelector("configuration/root/level"), new LevelAction()); rs.addRule(new ElementSelector("configuration/logger/appender-ref"), - new AppenderRefAction()); + new AppenderRefAction()); rs.addRule(new ElementSelector("configuration/root/appender-ref"), - new AppenderRefAction()); + new AppenderRefAction()); // add if-then-else support rs.addRule(new ElementSelector("*/if"), new IfAction()); diff --git a/logback-classic/src/main/java/ch/qos/logback/classic/joran/action/ConfigurationAction.java b/logback-classic/src/main/java/ch/qos/logback/classic/joran/action/ConfigurationAction.java index fa9369a42..87b996081 100644 --- a/logback-classic/src/main/java/ch/qos/logback/classic/joran/action/ConfigurationAction.java +++ b/logback-classic/src/main/java/ch/qos/logback/classic/joran/action/ConfigurationAction.java @@ -27,7 +27,7 @@ import ch.qos.logback.core.util.OptionHelper; public class ConfigurationAction extends Action { static final String INTERNAL_DEBUG_ATTR = "debug"; - static final String PACKAGING_INFO_ATTR = "packageTrace"; + static final String PACKAGING_DATA_ATTR = "packagingData"; static final String SCAN_ATTR = "scan"; static final String SCAN_PERIOD_ATTR = "scanPeriod"; static final String DEBUG_SYSTEM_PROPERTY_KEY = "logback.debug"; @@ -58,10 +58,10 @@ public class ConfigurationAction extends Action { contextUtil.addHostNameAsProperty(); LoggerContext lc = (LoggerContext) context; - boolean packageTraceEnabled = OptionHelper.toBoolean( - ic.subst(attributes.getValue(PACKAGING_INFO_ATTR)), - LoggerContext.DEFAULT_PACKAGING_STATE); - lc.setPackagingDataEnabled(packageTraceEnabled); + boolean packagingData = OptionHelper.toBoolean( + ic.subst(attributes.getValue(PACKAGING_DATA_ATTR)), + LoggerContext.DEFAULT_PACKAGING_DATA); + lc.setPackagingDataEnabled(packagingData); if (EnvUtil.isGroovyAvailable()) { contextUtil.addGroovyPackages(lc.getFrameworkPackages()); diff --git a/logback-classic/src/main/java/ch/qos/logback/classic/pattern/EnsureExceptionHandling.java b/logback-classic/src/main/java/ch/qos/logback/classic/pattern/EnsureExceptionHandling.java index 08c0c5333..a867105e2 100644 --- a/logback-classic/src/main/java/ch/qos/logback/classic/pattern/EnsureExceptionHandling.java +++ b/logback-classic/src/main/java/ch/qos/logback/classic/pattern/EnsureExceptionHandling.java @@ -13,7 +13,9 @@ */ package ch.qos.logback.classic.pattern; +import ch.qos.logback.classic.LoggerContext; import ch.qos.logback.classic.spi.ILoggingEvent; +import ch.qos.logback.core.Context; import ch.qos.logback.core.pattern.Converter; import ch.qos.logback.core.pattern.ConverterUtil; import ch.qos.logback.core.pattern.PostCompileProcessor; @@ -36,14 +38,20 @@ public class EnsureExceptionHandling implements * * */ - public void process(Converter head) { + public void process(Context context, Converter head) { if(head == null) { // this should never happen throw new IllegalArgumentException("cannot process empty chain"); } if (!chainHandlesThrowable(head)) { Converter tail = ConverterUtil.findTail(head); - Converter exConverter = new ThrowableProxyConverter(); + Converter exConverter = null; + LoggerContext loggerContext = (LoggerContext) context; + if(loggerContext.isPackagingDataEnabled()) { + exConverter = new ExtendedThrowableProxyConverter(); + } else { + exConverter = new ThrowableProxyConverter(); + } tail.setNext(exConverter); } } @@ -56,8 +64,8 @@ public class EnsureExceptionHandling implements * The first element of the chain * @return true if can handle throwables contained in logging events */ - public boolean chainHandlesThrowable(Converter head) { - Converter c = head; + public boolean chainHandlesThrowable(Converter head) { + Converter c = head; while (c != null) { if (c instanceof ThrowableHandlingConverter) { return true; diff --git a/logback-classic/src/main/java/ch/qos/logback/classic/pattern/ThrowableProxyConverter.java b/logback-classic/src/main/java/ch/qos/logback/classic/pattern/ThrowableProxyConverter.java index aa1fb6ef8..9861646b0 100644 --- a/logback-classic/src/main/java/ch/qos/logback/classic/pattern/ThrowableProxyConverter.java +++ b/logback-classic/src/main/java/ch/qos/logback/classic/pattern/ThrowableProxyConverter.java @@ -65,14 +65,14 @@ public class ThrowableProxyConverter extends ThrowableHandlingConverter { } } - final List optionList = getOptionList(); + final List optionList = getOptionList(); if (optionList != null && optionList.size() > 1) { final int optionListSize = optionList.size(); for (int i = 1; i < optionListSize; i++) { String evaluatorOrIgnoredStackTraceLine = (String) optionList.get(i); Context context = getContext(); - Map evaluatorMap = (Map) context.getObject(CoreConstants.EVALUATOR_MAP); + Map> evaluatorMap = (Map>) context.getObject(CoreConstants.EVALUATOR_MAP); EventEvaluator ee = (EventEvaluator) evaluatorMap .get(evaluatorOrIgnoredStackTraceLine); if (ee != null) { diff --git a/logback-classic/src/test/input/joran/packageDataEnabled.xml b/logback-classic/src/test/input/joran/packagingDataDisabled.xml similarity index 88% rename from logback-classic/src/test/input/joran/packageDataEnabled.xml rename to logback-classic/src/test/input/joran/packagingDataDisabled.xml index 9fb95b3a0..ce4414734 100644 --- a/logback-classic/src/test/input/joran/packageDataEnabled.xml +++ b/logback-classic/src/test/input/joran/packagingDataDisabled.xml @@ -1,7 +1,7 @@ - + diff --git a/logback-classic/src/test/input/joran/packageDataDisabled.xml b/logback-classic/src/test/input/joran/packagingDataEnabled.xml similarity index 87% rename from logback-classic/src/test/input/joran/packageDataDisabled.xml rename to logback-classic/src/test/input/joran/packagingDataEnabled.xml index bb0dde55f..c7218b329 100644 --- a/logback-classic/src/test/input/joran/packageDataDisabled.xml +++ b/logback-classic/src/test/input/joran/packagingDataEnabled.xml @@ -1,7 +1,7 @@ - + diff --git a/logback-classic/src/test/input/joran/sift/lbclassic203.xml b/logback-classic/src/test/input/joran/sift/logback_416.xml similarity index 85% rename from logback-classic/src/test/input/joran/sift/lbclassic203.xml rename to logback-classic/src/test/input/joran/sift/logback_416.xml index 646d6a244..868ad8e7a 100644 --- a/logback-classic/src/test/input/joran/sift/lbclassic203.xml +++ b/logback-classic/src/test/input/joran/sift/logback_416.xml @@ -14,7 +14,7 @@ + class="ch.qos.logback.classic.issue.logback416.InstanceCountingAppender" /> diff --git a/logback-classic/src/test/java/ch/qos/logback/classic/issue/PackageTest.java b/logback-classic/src/test/java/ch/qos/logback/classic/issue/PackageTest.java index eb92d8730..b30305d40 100644 --- a/logback-classic/src/test/java/ch/qos/logback/classic/issue/PackageTest.java +++ b/logback-classic/src/test/java/ch/qos/logback/classic/issue/PackageTest.java @@ -21,7 +21,6 @@ import ch.qos.logback.classic.issue.lbclassic135.lbclassic139.LB139_DeadlockTest @RunWith(Suite.class) @SuiteClasses({LB139_DeadlockTest.class, - ch.qos.logback.classic.issue.lbclassic135.lbclassic139.PackageTest.class, - ch.qos.logback.classic.issue.lbclassic203.PackageTest.class}) + ch.qos.logback.classic.issue.logback416.PackageTest.class}) public class PackageTest { } \ No newline at end of file diff --git a/logback-classic/src/test/java/ch/qos/logback/classic/issue/lbclassic135/lbclassic139/LB139_DeadlockTest.java b/logback-classic/src/test/java/ch/qos/logback/classic/issue/lbclassic135/lbclassic139/LB139_DeadlockTest.java index e99078dda..51ee72f73 100644 --- a/logback-classic/src/test/java/ch/qos/logback/classic/issue/lbclassic135/lbclassic139/LB139_DeadlockTest.java +++ b/logback-classic/src/test/java/ch/qos/logback/classic/issue/lbclassic135/lbclassic139/LB139_DeadlockTest.java @@ -32,7 +32,7 @@ public class LB139_DeadlockTest { @Test //(timeout=3000) public void test() throws Exception { Worker worker = new Worker(loggerContext); - Accessor accessor = new Accessor(worker, loggerContext); + Accessor accessor = new Accessor(worker, loggerContext); Thread workerThread = new Thread(worker, "WorkerThread"); Thread accessorThread = new Thread(accessor, "AccessorThread"); diff --git a/logback-classic/src/test/java/ch/qos/logback/classic/issue/lbclassic135/lbclassic139/PackageTest.java b/logback-classic/src/test/java/ch/qos/logback/classic/issue/lbclassic135/lbclassic139/PackageTest.java deleted file mode 100644 index 75e3dd865..000000000 --- a/logback-classic/src/test/java/ch/qos/logback/classic/issue/lbclassic135/lbclassic139/PackageTest.java +++ /dev/null @@ -1,23 +0,0 @@ -/** - * Logback: the reliable, generic, fast and flexible logging framework. - * Copyright (C) 1999-2015, QOS.ch. All rights reserved. - * - * This program and the accompanying materials are dual-licensed under - * either the terms of the Eclipse Public License v1.0 as published by - * the Eclipse Foundation - * - * or (per the licensee's choosing) - * - * under the terms of the GNU Lesser General Public License version 2.1 - * as published by the Free Software Foundation. - */ -package ch.qos.logback.classic.issue.lbclassic135.lbclassic139; - -import org.junit.runner.RunWith; -import org.junit.runners.Suite; -import org.junit.runners.Suite.SuiteClasses; - -@RunWith(Suite.class) -@SuiteClasses(LB139_DeadlockTest.class) -public class PackageTest { -} \ No newline at end of file diff --git a/logback-classic/src/test/java/ch/qos/logback/classic/issue/lbclassic203/ConcurrentSiftingTest.java b/logback-classic/src/test/java/ch/qos/logback/classic/issue/logback416/ConcurrentSiftingTest.java similarity index 89% rename from logback-classic/src/test/java/ch/qos/logback/classic/issue/lbclassic203/ConcurrentSiftingTest.java rename to logback-classic/src/test/java/ch/qos/logback/classic/issue/logback416/ConcurrentSiftingTest.java index 6d5f35597..cbbd506f4 100755 --- a/logback-classic/src/test/java/ch/qos/logback/classic/issue/lbclassic203/ConcurrentSiftingTest.java +++ b/logback-classic/src/test/java/ch/qos/logback/classic/issue/logback416/ConcurrentSiftingTest.java @@ -11,16 +11,18 @@ * under the terms of the GNU Lesser General Public License version 2.1 * as published by the Free Software Foundation. */ -package ch.qos.logback.classic.issue.lbclassic203; +package ch.qos.logback.classic.issue.logback416; import ch.qos.logback.classic.ClassicTestConstants; import ch.qos.logback.classic.Logger; import ch.qos.logback.classic.LoggerContext; import ch.qos.logback.classic.issue.lbclassic135.LoggingRunnable; +import ch.qos.logback.classic.issue.logback416.InstanceCountingAppender; import ch.qos.logback.classic.joran.JoranConfigurator; import ch.qos.logback.core.contention.MultiThreadedHarness; import ch.qos.logback.core.contention.RunnableWithCounterAndDone; import ch.qos.logback.core.joran.spi.JoranException; + import org.junit.Test; import static org.junit.Assert.assertEquals; @@ -54,8 +56,8 @@ public class ConcurrentSiftingTest { @Test public void concurrentAccess() throws JoranException, InterruptedException { - configure(FOLDER_PREFIX + "lbclassic203.xml"); + configure(FOLDER_PREFIX + "logback_416.xml"); harness.execute(runnableArray); - assertEquals(1, InstanceCountingAppender.INSTANCE_COUNT); + assertEquals(1, InstanceCountingAppender.INSTANCE_COUNT.get()); } } diff --git a/logback-classic/src/test/java/ch/qos/logback/classic/issue/lbclassic203/InstanceCountingAppender.java b/logback-classic/src/test/java/ch/qos/logback/classic/issue/logback416/InstanceCountingAppender.java similarity index 78% rename from logback-classic/src/test/java/ch/qos/logback/classic/issue/lbclassic203/InstanceCountingAppender.java rename to logback-classic/src/test/java/ch/qos/logback/classic/issue/logback416/InstanceCountingAppender.java index d3d0aba0d..dba9022c2 100644 --- a/logback-classic/src/test/java/ch/qos/logback/classic/issue/lbclassic203/InstanceCountingAppender.java +++ b/logback-classic/src/test/java/ch/qos/logback/classic/issue/logback416/InstanceCountingAppender.java @@ -11,17 +11,19 @@ * under the terms of the GNU Lesser General Public License version 2.1 * as published by the Free Software Foundation. */ -package ch.qos.logback.classic.issue.lbclassic203; +package ch.qos.logback.classic.issue.logback416; + +import java.util.concurrent.atomic.AtomicInteger; import ch.qos.logback.classic.spi.ILoggingEvent; import ch.qos.logback.core.AppenderBase; public class InstanceCountingAppender extends AppenderBase { - static public volatile int INSTANCE_COUNT = 0; + static public AtomicInteger INSTANCE_COUNT = new AtomicInteger(0); public InstanceCountingAppender() { - INSTANCE_COUNT++; + INSTANCE_COUNT.getAndIncrement(); } protected void append(ILoggingEvent e) { diff --git a/logback-classic/src/test/java/ch/qos/logback/classic/issue/lbclassic203/PackageTest.java b/logback-classic/src/test/java/ch/qos/logback/classic/issue/logback416/PackageTest.java similarity index 92% rename from logback-classic/src/test/java/ch/qos/logback/classic/issue/lbclassic203/PackageTest.java rename to logback-classic/src/test/java/ch/qos/logback/classic/issue/logback416/PackageTest.java index 80bc94f1c..8c932c4b7 100644 --- a/logback-classic/src/test/java/ch/qos/logback/classic/issue/lbclassic203/PackageTest.java +++ b/logback-classic/src/test/java/ch/qos/logback/classic/issue/logback416/PackageTest.java @@ -11,7 +11,7 @@ * under the terms of the GNU Lesser General Public License version 2.1 * as published by the Free Software Foundation. */ -package ch.qos.logback.classic.issue.lbclassic203; +package ch.qos.logback.classic.issue.logback416; import org.junit.runner.RunWith; import org.junit.runners.Suite; diff --git a/logback-classic/src/test/java/ch/qos/logback/classic/joran/EvaluatorJoranTest.java b/logback-classic/src/test/java/ch/qos/logback/classic/joran/EvaluatorJoranTest.java index 1e11bfa3f..5c2d0e5ca 100644 --- a/logback-classic/src/test/java/ch/qos/logback/classic/joran/EvaluatorJoranTest.java +++ b/logback-classic/src/test/java/ch/qos/logback/classic/joran/EvaluatorJoranTest.java @@ -32,6 +32,7 @@ import ch.qos.logback.classic.spi.ILoggingEvent; import ch.qos.logback.classic.spi.LoggingEvent; import ch.qos.logback.core.CoreConstants; import ch.qos.logback.core.boolex.EvaluationException; +import ch.qos.logback.core.boolex.EventEvaluator; import ch.qos.logback.core.joran.spi.JoranException; @@ -45,7 +46,7 @@ public class EvaluatorJoranTest { jc.doConfigure(ClassicTestConstants.JORAN_INPUT_PREFIX + "simpleEvaluator.xml"); - Map evalMap = (Map) loggerContext.getObject(CoreConstants.EVALUATOR_MAP); + Map> evalMap = (Map>) loggerContext.getObject(CoreConstants.EVALUATOR_MAP); assertNotNull(evalMap); JaninoEventEvaluator evaluator = (JaninoEventEvaluator) evalMap.get("msgEval"); assertNotNull(evaluator); @@ -65,7 +66,7 @@ public class EvaluatorJoranTest { jc.setContext(loggerContext); jc.doConfigure(ClassicTestConstants.JORAN_INPUT_PREFIX + "ignore.xml"); - Map evalMap = (Map) loggerContext.getObject(CoreConstants.EVALUATOR_MAP); + Map> evalMap = (Map>) loggerContext.getObject(CoreConstants.EVALUATOR_MAP); assertNotNull(evalMap); Logger logger = loggerContext.getLogger("xx"); 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 13e8c610c..c6ca21f9b 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 @@ -45,7 +45,6 @@ import ch.qos.logback.core.read.ListAppender; import ch.qos.logback.core.status.StatusChecker; import ch.qos.logback.core.testUtil.StringListAppender; - import static org.junit.Assert.*; public class JoranConfiguratorTest { @@ -69,7 +68,8 @@ public class JoranConfiguratorTest { Logger logger = loggerContext.getLogger(this.getClass().getName()); Logger root = loggerContext.getLogger(Logger.ROOT_LOGGER_NAME); - ListAppender listAppender = (ListAppender) root.getAppender("LIST"); + ListAppender listAppender = (ListAppender) root + .getAppender("LIST"); assertEquals(0, listAppender.list.size()); String msg = "hello world"; logger.debug(msg); @@ -81,7 +81,8 @@ public class JoranConfiguratorTest { @Test public void level() throws JoranException { configure(ClassicTestConstants.JORAN_INPUT_PREFIX + "simpleLevel.xml"); - ListAppender listAppender = (ListAppender) root.getAppender("LIST"); + ListAppender listAppender = (ListAppender) root + .getAppender("LIST"); assertEquals(0, listAppender.list.size()); String msg = "hello world"; logger.debug(msg); @@ -101,9 +102,10 @@ public class JoranConfiguratorTest { System.setProperty(propertyName, "INFO"); configure(ClassicTestConstants.JORAN_INPUT_PREFIX - + "rootLevelByProperty.xml"); + + "rootLevelByProperty.xml"); // StatusPrinter.print(loggerContext); - ListAppender listAppender = (ListAppender) root.getAppender("LIST"); + ListAppender listAppender = (ListAppender) root + .getAppender("LIST"); assertEquals(0, listAppender.list.size()); String msg = "hello world"; logger.debug(msg); @@ -116,9 +118,10 @@ public class JoranConfiguratorTest { String propertyName = "logback.level"; System.setProperty(propertyName, "DEBUG"); configure(ClassicTestConstants.JORAN_INPUT_PREFIX - + "loggerLevelByProperty.xml"); + + "loggerLevelByProperty.xml"); // StatusPrinter.print(loggerContext); - ListAppender listAppender = (ListAppender) root.getAppender("LIST"); + ListAppender listAppender = (ListAppender) root + .getAppender("LIST"); assertEquals(0, listAppender.list.size()); String msg = "hello world"; logger.debug(msg); @@ -131,10 +134,11 @@ public class JoranConfiguratorTest { final String propertyName = "logback.appenderRef"; System.setProperty(propertyName, "A"); configure(ClassicTestConstants.JORAN_INPUT_PREFIX - + "appenderRefByProperty.xml"); + + "appenderRefByProperty.xml"); final Logger logger = loggerContext - .getLogger("ch.qos.logback.classic.joran"); - final ListAppender listAppender = (ListAppender) logger.getAppender("A"); + .getLogger("ch.qos.logback.classic.joran"); + final ListAppender listAppender = (ListAppender) logger + .getAppender("A"); assertEquals(0, listAppender.list.size()); final String msg = "hello world"; logger.info(msg); @@ -163,7 +167,7 @@ public class JoranConfiguratorTest { logger.debug(msg); StringListAppender slAppender = (StringListAppender) loggerContext - .getLogger("root").getAppender("STR_LIST"); + .getLogger("root").getAppender("STR_LIST"); assertNotNull(slAppender); assertEquals(2, slAppender.strList.size()); assertTrue(slAppender.strList.get(0).contains(" DEBUG - toto")); @@ -209,9 +213,8 @@ public class JoranConfiguratorTest { logger.warn("hello"); logger.error("to be ignored"); - @SuppressWarnings("unchecked") - ListAppender listAppender = (ListAppender) root - .getAppender("LIST"); + ListAppender listAppender = (ListAppender) root + .getAppender("LIST"); assertNotNull(listAppender); assertEquals(1, listAppender.list.size()); @@ -229,9 +232,8 @@ public class JoranConfiguratorTest { logger.warn("hello"); logger.error("to be ignored"); - @SuppressWarnings("unchecked") - ListAppender listAppender = (ListAppender) root - .getAppender("LIST"); + ListAppender listAppender = (ListAppender) root + .getAppender("LIST"); assertNotNull(listAppender); assertEquals(1, listAppender.list.size()); @@ -243,9 +245,10 @@ public class JoranConfiguratorTest { @Test public void testTurboDynamicThreshold() throws JoranException { configure(ClassicTestConstants.JORAN_INPUT_PREFIX - + "turboDynamicThreshold.xml"); + + "turboDynamicThreshold.xml"); - ListAppender listAppender = (ListAppender) root.getAppender("LIST"); + ListAppender listAppender = (ListAppender) root + .getAppender("LIST"); assertEquals(0, listAppender.list.size()); // this one should be denied @@ -263,9 +266,10 @@ public class JoranConfiguratorTest { @Test public void testTurboDynamicThreshold2() throws JoranException { configure(ClassicTestConstants.JORAN_INPUT_PREFIX - + "turboDynamicThreshold2.xml"); + + "turboDynamicThreshold2.xml"); - ListAppender listAppender = (ListAppender) root.getAppender("LIST"); + ListAppender listAppender = (ListAppender) root + .getAppender("LIST"); assertEquals(0, listAppender.list.size()); // this one should log @@ -290,7 +294,7 @@ public class JoranConfiguratorTest { public void autoscanShouldReconfigureOnFileChange() throws Exception { String configFileAsStr = ClassicTestConstants.JORAN_INPUT_PREFIX - + "scan1.xml"; + + "scan1.xml"; configure(configFileAsStr); File file = new File(configFileAsStr); @@ -303,7 +307,8 @@ public class JoranConfiguratorTest { } loggerContext.getExecutorService().shutdown(); - loggerContext.getExecutorService().awaitTermination(1000, TimeUnit.MILLISECONDS); + loggerContext.getExecutorService().awaitTermination(1000, + TimeUnit.MILLISECONDS); StatusChecker checker = new StatusChecker(loggerContext); checker.assertIsErrorFree(); @@ -312,10 +317,10 @@ public class JoranConfiguratorTest { @Test public void timestamp() throws JoranException, IOException, - InterruptedException { + InterruptedException { String configFileAsStr = ClassicTestConstants.JORAN_INPUT_PREFIX - + "timestamp-context.xml"; + + "timestamp-context.xml"; configure(configFileAsStr); String r = loggerContext.getProperty("testTimestamp"); @@ -327,13 +332,13 @@ public class JoranConfiguratorTest { @Test public void timestampLocal() throws JoranException, IOException, - InterruptedException { + InterruptedException { String sysProp = "ch.qos.logback.classic.joran.JoranConfiguratorTest.timestampLocal"; System.setProperty(sysProp, ""); String configFileAsStr = ClassicTestConstants.JORAN_INPUT_PREFIX - + "timestamp-local.xml"; + + "timestamp-local.xml"; configure(configFileAsStr); // It's hard to test the local variable has been set, as it's not @@ -344,22 +349,25 @@ public class JoranConfiguratorTest { String r = loggerContext.getProperty("testTimestamp"); assertNull(r); - String expected = "today is " + new SimpleDateFormat("yyyy-MM").format(new Date()); + String expected = "today is " + + new SimpleDateFormat("yyyy-MM").format(new Date()); String sysPropValue = System.getProperty(sysProp); assertEquals(expected, sysPropValue); } @Test public void encoderCharset() throws JoranException, IOException, - InterruptedException { + InterruptedException { String configFileAsStr = ClassicTestConstants.JORAN_INPUT_PREFIX - + "encoderCharset.xml"; + + "encoderCharset.xml"; configure(configFileAsStr); - ConsoleAppender consoleAppender = (ConsoleAppender) root.getAppender("CONSOLE"); + ConsoleAppender consoleAppender = (ConsoleAppender) root + .getAppender("CONSOLE"); assertNotNull(consoleAppender); - LayoutWrappingEncoder encoder = (LayoutWrappingEncoder) consoleAppender.getEncoder(); + LayoutWrappingEncoder encoder = (LayoutWrappingEncoder) consoleAppender + .getEncoder(); assertEquals("UTF-8", encoder.getCharset().displayName()); @@ -377,16 +385,16 @@ public class JoranConfiguratorTest { assertEquals(JULHelper.asJULLevel(expectedLevel), julLevel); } - } @Test public void levelChangePropagator0() throws JoranException, IOException, - InterruptedException { + InterruptedException { String loggerName = "changePropagator0" + diff; - java.util.logging.Logger.getLogger(loggerName).setLevel(java.util.logging.Level.INFO); + java.util.logging.Logger.getLogger(loggerName).setLevel( + java.util.logging.Level.INFO); String configFileAsStr = ClassicTestConstants.JORAN_INPUT_PREFIX - + "/jul/levelChangePropagator0.xml"; + + "/jul/levelChangePropagator0.xml"; configure(configFileAsStr); StatusChecker checker = new StatusChecker(loggerContext); checker.assertIsErrorFree(); @@ -397,12 +405,13 @@ public class JoranConfiguratorTest { @Test public void levelChangePropagator1() throws JoranException, IOException, - InterruptedException { + InterruptedException { String loggerName = "changePropagator1" + diff; - java.util.logging.Logger.getLogger(loggerName).setLevel(java.util.logging.Level.INFO); + java.util.logging.Logger.getLogger(loggerName).setLevel( + java.util.logging.Level.INFO); verifyJULLevel(loggerName, Level.INFO); String configFileAsStr = ClassicTestConstants.JORAN_INPUT_PREFIX - + "/jul/levelChangePropagator1.xml"; + + "/jul/levelChangePropagator1.xml"; configure(configFileAsStr); StatusChecker checker = new StatusChecker(loggerContext); checker.assertIsErrorFree(); @@ -413,9 +422,10 @@ public class JoranConfiguratorTest { @Test @Ignore - public void onConsoleRetro() throws JoranException, IOException, InterruptedException { + public void onConsoleRetro() throws JoranException, IOException, + InterruptedException { String configFileAsStr = ClassicTestConstants.JORAN_INPUT_PREFIX - + "/onConsoleRetro.xml"; + + "/onConsoleRetro.xml"; configure(configFileAsStr); System.out.println("xxxxxxxxxxxxx"); Thread.sleep(400); @@ -426,18 +436,20 @@ public class JoranConfiguratorTest { @Test public void lbcore193() throws JoranException { - String configFileAsStr = ClassicTestConstants.ISSUES_PREFIX + "lbcore193.xml"; + String configFileAsStr = ClassicTestConstants.ISSUES_PREFIX + + "lbcore193.xml"; configure(configFileAsStr); checker.asssertContainsException(ScanException.class); - checker.assertContainsMatch(Status.ERROR, "Expecting RIGHT_PARENTHESIS token but got null"); - checker.assertContainsMatch(Status.ERROR, "See also " + Parser.MISSING_RIGHT_PARENTHESIS); + checker.assertContainsMatch(Status.ERROR, + "Expecting RIGHT_PARENTHESIS token but got null"); + checker.assertContainsMatch(Status.ERROR, "See also " + + Parser.MISSING_RIGHT_PARENTHESIS); } - @Test public void properties() throws JoranException { String configFileAsStr = ClassicTestConstants.JORAN_INPUT_PREFIX - + "properties.xml"; + + "properties.xml"; assertNull(loggerContext.getProperty(CoreConstants.HOSTNAME_KEY)); assertNull(System.getProperty("sys")); @@ -451,14 +463,15 @@ public class JoranConfiguratorTest { checker.assertIsErrorFree(); } - // see also http://jira.qos.ch/browse/LBCORE-254 @Test public void sysProps() throws JoranException { - System.setProperty("k.lbcore254", ClassicTestConstants.ISSUES_PREFIX + "lbcore254"); + System.setProperty("k.lbcore254", ClassicTestConstants.ISSUES_PREFIX + + "lbcore254"); JoranConfigurator configurator = new JoranConfigurator(); configurator.setContext(loggerContext); - configurator.doConfigure(ClassicTestConstants.ISSUES_PREFIX + "lbcore254.xml"); + configurator.doConfigure(ClassicTestConstants.ISSUES_PREFIX + + "lbcore254.xml"); checker.assertIsErrorFree(); } @@ -466,7 +479,7 @@ public class JoranConfiguratorTest { @Test public void packageDataDisabledByConfigAttribute() throws JoranException { String configFileAsStr = ClassicTestConstants.JORAN_INPUT_PREFIX - + "packageDataDisabled.xml"; + + "packagingDataDisabled.xml"; configure(configFileAsStr); assertFalse(loggerContext.isPackagingDataEnabled()); } @@ -474,7 +487,7 @@ public class JoranConfiguratorTest { @Test public void packageDataEnabledByConfigAttribute() throws JoranException { String configFileAsStr = ClassicTestConstants.JORAN_INPUT_PREFIX - + "packageDataEnabled.xml"; + + "packagingDataEnabled.xml"; configure(configFileAsStr); assertTrue(loggerContext.isPackagingDataEnabled()); } diff --git a/logback-core/pom.xml b/logback-core/pom.xml index 9f0e61e3b..5a6b74836 100755 --- a/logback-core/pom.xml +++ b/logback-core/pom.xml @@ -59,9 +59,10 @@ org.apache.maven.plugins maven-surefire-plugin - once + 1 + true + plain - false **/All*Test.java diff --git a/logback-core/src/main/java/ch/qos/logback/core/pattern/PatternLayoutBase.java b/logback-core/src/main/java/ch/qos/logback/core/pattern/PatternLayoutBase.java index 2686210b9..63499dee4 100644 --- a/logback-core/src/main/java/ch/qos/logback/core/pattern/PatternLayoutBase.java +++ b/logback-core/src/main/java/ch/qos/logback/core/pattern/PatternLayoutBase.java @@ -85,7 +85,7 @@ abstract public class PatternLayoutBase extends LayoutBase { Node t = p.parse(); this.head = p.compile(t, getEffectiveConverterMap()); if (postCompileProcessor != null) { - postCompileProcessor.process(head); + postCompileProcessor.process(context, head); } ConverterUtil.setContextForConverters(getContext(), head); ConverterUtil.startConverters(this.head); diff --git a/logback-core/src/main/java/ch/qos/logback/core/pattern/PostCompileProcessor.java b/logback-core/src/main/java/ch/qos/logback/core/pattern/PostCompileProcessor.java index 519d2fd59..4683d1f53 100644 --- a/logback-core/src/main/java/ch/qos/logback/core/pattern/PostCompileProcessor.java +++ b/logback-core/src/main/java/ch/qos/logback/core/pattern/PostCompileProcessor.java @@ -13,6 +13,8 @@ */ package ch.qos.logback.core.pattern; +import ch.qos.logback.core.Context; + /** * Implements this to perform post compile processing for a PatternLayout. @@ -30,5 +32,5 @@ public interface PostCompileProcessor { * @param head * The first converter in the chain */ - void process(Converter head); + void process(Context context, Converter head); } diff --git a/logback-site/src/site/pages/manual/configuration.html b/logback-site/src/site/pages/manual/configuration.html index ad69b6262..775502881 100755 --- a/logback-site/src/site/pages/manual/configuration.html +++ b/logback-site/src/site/pages/manual/configuration.html @@ -271,51 +271,6 @@ public class Foo { directory accessible from the class path. Running the MyApp1 application should give identical results to its previous run.

-

Enabling packaging - detail in stacktraces

- -

logback can include packaging data in stacktraces to help track - down the culprit JAR(s) of an exception, as shown in the following - example:

- -
14:28:48.835 [btpool0-7] INFO  c.q.l.demo.prime.PrimeAction - 99 is not a valid value
-java.lang.Exception: 99 is invalid
-  at ch.qos.logback.demo.prime.PrimeAction.execute(PrimeAction.java:28) [classes/:na]
-  at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431) [struts-1.2.9.jar:1.2.9]
-  at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236) [struts-1.2.9.jar:1.2.9]
-  at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432) [struts-1.2.9.jar:1.2.9]
-  at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) [servlet-api-2.5-6.1.12.jar:6.1.12]
-  at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:502) [jetty-6.1.12.jar:6.1.12]
-  at ch.qos.logback.demo.UserServletFilter.doFilter(UserServletFilter.java:44) [classes/:na]
-  at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1115) [jetty-6.1.12.jar:6.1.12]
-  at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:361) [jetty-6.1.12.jar:6.1.12]
-  at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:417) [jetty-6.1.12.jar:6.1.12]
-  at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230) [jetty-6.1.12.jar:6.1.12]
- -

While stacktrace packaging detail can be helpful in - many situations, it is rather expensive to compute, especially for - deep stacktraces. Consider avoiding this option in performance-critical - code.

- -

To enable this lookup programmatically, set the context's - - setPackagingDataEnabled(boolean):

- -

-public static void main(String[] args) {
-  LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
-  // enable packaging detail for stacktraces
-  lc.setPackagingDataEnabled(true);
-  ...
-}
- -

This can also be enabled from logback.xml with:

- -
-<configuration packageTrace="true">
-  ...
-</configuration>
-

Automatic printing of status messages in case of warning or errors

@@ -547,6 +502,55 @@ public static void main(String[] args) {

+

Enabling packaging data in stack traces

+ +

While useful, packaging data is expensive to + compute, especially in applications with frequent exceptions.

+ +

NOTE As of version 1.1.4, + packaging data is disabled by default.

+ +

If instructed to do so, logback can include packaging data for + each line of the stack trace lines it outputs. Packaging data + consists of the name and version of the jar file whence the class + of the stack trace line originated. Packaging data can be very + useful in identifying software versioning issues. However, it is + rather expensive to compute, especially in application where + exceptions are thrown frequently. Here is a sample output:

+ +
14:28:48.835 [btpool0-7] INFO  c.q.l.demo.prime.PrimeAction - 99 is not a valid value
+java.lang.Exception: 99 is invalid
+  at ch.qos.logback.demo.prime.PrimeAction.execute(PrimeAction.java:28) [classes/:na]
+  at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431) [struts-1.2.9.jar:1.2.9]
+  at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236) [struts-1.2.9.jar:1.2.9]
+  at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432) [struts-1.2.9.jar:1.2.9]
+  at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) [servlet-api-2.5-6.1.12.jar:6.1.12]
+  at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:502) [jetty-6.1.12.jar:6.1.12]
+  at ch.qos.logback.demo.UserServletFilter.doFilter(UserServletFilter.java:44) [classes/:na]
+  at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1115) [jetty-6.1.12.jar:6.1.12]
+  at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:361) [jetty-6.1.12.jar:6.1.12]
+  at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:417) [jetty-6.1.12.jar:6.1.12]
+  at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230) [jetty-6.1.12.jar:6.1.12]
+ + +

Packaging data is disabled by default but can be enabled by + configuration:

+ +
+<configuration packagingData="true">
+  ...
+</configuration>
+ +

Alternatively, packaging data can be enabled/disabled + programmatically by invoking the setPackagingDataEnabled(boolean) + method in LoggerContext, as shown next:

+ + +
+  LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
+  lc.setPackagingDataEnabled(true);
+

Invoking JoranConfigurator directly

diff --git a/logback-site/src/site/pages/news.html b/logback-site/src/site/pages/news.html index e87df5a15..3270c127e 100755 --- a/logback-site/src/site/pages/news.html +++ b/logback-site/src/site/pages/news.html @@ -29,26 +29,29 @@
-
-

As of version 1.1.3, all logback modules require JDK 1.6 - instead of previously JDK 1.5. This change was put to - consultation on the logback mailing lists with no objections - raised.

-
-

2015, Release of version 1.1.4

-

PackageDataCalculation is -

+ +
+

Packaging data (as output in stack traces) is now disabled + by default. It has to be enabled explicitly. +

+

In case an application throws lots of exceptions, then computing packaging data can be very costly and will cause the application to run slower. Making bad worse. To alleviate this - problem, PatternLayout now adds exception tracing without - packaging data. It other words, in the absence of a converter - handling exceptions, PatternLayout in logback-classic will add %ex - as a suffix of instead of %xEx earlier version. This fixes LOGBACK-966. + problem, packaging data is no longer computed by default. It has + to be enabled + explicitly. In the absence of explicit instructions, i.e the + user has not specified a converter handling exceptions, + PatternLayout in logback-classic will follow the + settings defining for the logging environment. If packaging data + is disabled, then it add %ex as a suffix in the pattern, and if + packaging data is enabled then %xEx will be added. These changes + fix LOGBACK-730 and + LOGBACK-966.

Fixed a bug in TimeBasedFileNamingAndTriggeringPolicyBase @@ -67,6 +70,15 @@

24th of March 2015, Release of version 1.1.3

+ +
+

As of version 1.1.3, all logback modules require JDK 1.6 + instead of previously JDK 1.5. This change was put to + consultation on the logback mailing lists with no objections + raised.

+
+ +

Fixed FileAppender's prudent mode so that it properly recovers from IO Errors (LOGBACK-1046)

diff --git a/logback-site/src/site/pages/setup.html b/logback-site/src/site/pages/setup.html index 83745cf14..218d99ea9 100755 --- a/logback-site/src/site/pages/setup.html +++ b/logback-site/src/site/pages/setup.html @@ -291,7 +291,7 @@

The above listed procedure has been last tested by the author - using Eclipse Luna on March 5th 2015.

+ using Eclipse Luna on February 10th, 2016.

diff --git a/logback-site/src/site/pages/templates/footer.js b/logback-site/src/site/pages/templates/footer.js index 6020d840b..25f256ed8 100755 --- a/logback-site/src/site/pages/templates/footer.js +++ b/logback-site/src/site/pages/templates/footer.js @@ -3,7 +3,7 @@ document.write('') document.write('') -document.write('') +document.write('') document.write('