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('