You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by pk...@apache.org on 2022/03/30 22:44:46 UTC
[logging-log4j2] branch master updated: `final` synchronization with 2.17.2
This is an automated email from the ASF dual-hosted git repository.
pkarwasz pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
The following commit(s) were added to refs/heads/master by this push:
new d2a0d94 `final` synchronization with 2.17.2
d2a0d94 is described below
commit d2a0d9415a79f4250d4daf7791e07fb746af6a5b
Author: Piotr P. Karwasz <pi...@karwasz.org>
AuthorDate: Thu Mar 31 00:44:38 2022 +0200
`final` synchronization with 2.17.2
Synchronizes `log4j-1.2-api` main source with version 2.17.2. It mainly
consists of:
* formatting,
* `final` modifiers,
* the removal of the deprecated `Holder` class.
---
.../java/org/apache/log4j/AppenderSkeleton.java | 4 +-
.../src/main/java/org/apache/log4j/LogManager.java | 2 +-
.../src/main/java/org/apache/log4j/MDC.java | 3 +-
.../main/java/org/apache/log4j/SimpleLayout.java | 33 +-
.../main/java/org/apache/log4j/WriterAppender.java | 11 +-
.../org/apache/log4j/bridge/FilterAdapter.java | 23 +-
.../org/apache/log4j/bridge/LayoutWrapper.java | 2 -
.../org/apache/log4j/bridge/LogEventAdapter.java | 8 +-
.../org/apache/log4j/bridge/LogEventWrapper.java | 1 -
.../org/apache/log4j/builders/AbstractBuilder.java | 13 +-
.../org/apache/log4j/builders/BooleanHolder.java | 37 -
.../java/org/apache/log4j/builders/Holder.java | 39 -
.../builders/appender/AsyncAppenderBuilder.java | 29 +-
.../builders/appender/ConsoleAppenderBuilder.java | 29 +-
.../appender/DailyRollingFileAppenderBuilder.java | 59 +-
.../builders/appender/FileAppenderBuilder.java | 59 +-
.../builders/appender/NullAppenderBuilder.java | 12 +-
.../builders/appender/RewriteAppenderBuilder.java | 44 +-
.../appender/RollingFileAppenderBuilder.java | 76 +-
.../builders/appender/SocketAppenderBuilder.java | 29 +-
.../builders/appender/SyslogAppenderBuilder.java | 62 +-
.../builders/filter/LevelMatchFilterBuilder.java | 23 +-
.../builders/filter/LevelRangeFilterBuilder.java | 26 +-
.../builders/filter/StringMatchFilterBuilder.java | 21 +-
.../log4j/builders/layout/HtmlLayoutBuilder.java | 24 +-
.../log4j/builders/layout/SimpleLayoutBuilder.java | 4 +-
.../log4j/config/Log4j1ConfigurationFactory.java | 2 +-
.../log4j/config/Log4j1ConfigurationParser.java | 5 +-
.../org/apache/log4j/config/PropertySetter.java | 3 +-
.../log4j/config/PropertySetterException.java | 1 -
.../log4j/helpers/AppenderAttachableImpl.java | 2 +-
.../org/apache/log4j/helpers/OptionConverter.java | 16 +-
.../org/apache/log4j/helpers/PatternParser.java | 930 ++++++++++-----------
.../java/org/apache/log4j/helpers/QuietWriter.java | 5 +-
.../org/apache/log4j/layout/Log4j1XmlLayout.java | 40 +-
.../org/apache/log4j/or/ThreadGroupRenderer.java | 14 +-
.../log4j/pattern/Log4j1MdcPatternConverter.java | 2 +-
.../org/apache/log4j/rewrite/MapRewritePolicy.java | 5 +-
.../log4j/rewrite/PropertyRewritePolicy.java | 21 +-
.../org/apache/log4j/spi/ThrowableInformation.java | 9 +-
.../org/apache/log4j/xml/Log4jEntityResolver.java | 15 +-
.../log4j/xml/UnrecognizedElementHandler.java | 2 +-
.../org/apache/log4j/xml/XmlConfiguration.java | 110 +--
.../log4j/builders/Log4j2ListAppenderBuilder.java | 4 +-
.../AbstractLog4j1ConfigurationConverterTest.java | 1 -
.../org/apache/logging/log4j/util/Constants.java | 10 +
46 files changed, 880 insertions(+), 990 deletions(-)
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/AppenderSkeleton.java b/log4j-1.2-api/src/main/java/org/apache/log4j/AppenderSkeleton.java
index 3660a19..7fbd92a 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/AppenderSkeleton.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/AppenderSkeleton.java
@@ -44,11 +44,9 @@ public abstract class AppenderSkeleton implements Appender, OptionHandler {
* Create new instance.
*/
public AppenderSkeleton() {
- super();
}
protected AppenderSkeleton(final boolean isActive) {
- super();
}
@Override
@@ -115,7 +113,7 @@ public abstract class AppenderSkeleton implements Appender, OptionHandler {
}
/**
- * Set the {@link ErrorHandler} for this Appender.
+ * Sets the {@link ErrorHandler} for this Appender.
*
* @since 0.9.0
*/
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/LogManager.java b/log4j-1.2-api/src/main/java/org/apache/log4j/LogManager.java
index b4d8b7b..4d0bbd7 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/LogManager.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/LogManager.java
@@ -202,7 +202,7 @@ public final class LogManager {
if (selector == null) {
throw new IllegalArgumentException("RepositorySelector must be non-null.");
}
- repositorySelector = selector;
+ LogManager.repositorySelector = selector;
}
/**
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/MDC.java b/log4j-1.2-api/src/main/java/org/apache/log4j/MDC.java
index ef99df9..ad902d2 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/MDC.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/MDC.java
@@ -28,7 +28,6 @@ import org.apache.logging.log4j.ThreadContext;
*/
public final class MDC {
-
private static final ThreadLocal<Map<String, Object>> localMap =
new InheritableThreadLocal<Map<String, Object>>() {
@Override
@@ -38,7 +37,7 @@ public final class MDC {
@Override
protected Map<String, Object> childValue(final Map<String, Object> parentValue) {
- return parentValue == null ? new HashMap<String, Object>() : new HashMap<>(parentValue);
+ return parentValue == null ? new HashMap<>() : new HashMap<>(parentValue);
}
};
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/SimpleLayout.java b/log4j-1.2-api/src/main/java/org/apache/log4j/SimpleLayout.java
index c77b9be..2ed850d 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/SimpleLayout.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/SimpleLayout.java
@@ -22,25 +22,22 @@ import org.apache.logging.log4j.util.Strings;
/**
* Simple-layout.
*/
-public class SimpleLayout extends Layout
-{
+public class SimpleLayout extends Layout {
- /**
- * {@inheritDoc}
- */
- @Override
- public String format(final LoggingEvent theEvent)
- {
- return Strings.EMPTY;
- }
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public String format(final LoggingEvent theEvent) {
+ return Strings.EMPTY;
+ }
- /**
- * {@inheritDoc}
- */
- @Override
- public boolean ignoresThrowable()
- {
- return true;
- }
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public boolean ignoresThrowable() {
+ return true;
+ }
}
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/WriterAppender.java b/log4j-1.2-api/src/main/java/org/apache/log4j/WriterAppender.java
index db69696..760449c 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/WriterAppender.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/WriterAppender.java
@@ -84,7 +84,8 @@ public class WriterAppender extends AppenderSkeleton {
}
/**
- * Instantiate a WriterAppender and set the output destination to <code>writer</code>.
+ * Instantiate a WriterAppender and set the output destination to
+ * <code>writer</code>.
*
* <p>The <code>writer</code> must have been previously opened by
* the user.
@@ -128,6 +129,7 @@ public class WriterAppender extends AppenderSkeleton {
/**
* Does nothing.
*/
+ @Override
public void activateOptions() {
}
@@ -143,6 +145,7 @@ public class WriterAppender extends AppenderSkeleton {
* <p>The format of the output will depend on this appender's
* layout.
*/
+ @Override
public void append(LoggingEvent event) {
// Reminder: the nesting of calls is:
@@ -196,8 +199,8 @@ public class WriterAppender extends AppenderSkeleton {
* @see #setWriter
* @since 0.8.4
*/
- public
- synchronized void close() {
+ @Override
+ public synchronized void close() {
if (this.closed) {
return;
}
@@ -267,6 +270,7 @@ public class WriterAppender extends AppenderSkeleton {
* Set the {@link ErrorHandler} for this WriterAppender and also the
* underlying {@link QuietWriter} if any.
*/
+ @Override
public synchronized void setErrorHandler(ErrorHandler eh) {
if (eh == null) {
LOGGER.warn("You have tried to set a null error-handler.");
@@ -333,6 +337,7 @@ public class WriterAppender extends AppenderSkeleton {
* The WriterAppender requires a layout. Hence, this method returns
* <code>true</code>.
*/
+ @Override
public boolean requiresLayout() {
return true;
}
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/bridge/FilterAdapter.java b/log4j-1.2-api/src/main/java/org/apache/log4j/bridge/FilterAdapter.java
index 5ce599e..e10478c 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/bridge/FilterAdapter.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/bridge/FilterAdapter.java
@@ -71,15 +71,6 @@ public class FilterAdapter extends AbstractFilter {
this.filter = filter;
}
- public Filter getFilter() {
- return filter;
- }
-
- @Override
- public void start() {
- filter.activateOptions();
- }
-
@Override
public Result filter(LogEvent event) {
LoggingEvent loggingEvent = new LogEventAdapter(event);
@@ -97,4 +88,18 @@ public class FilterAdapter extends AbstractFilter {
return Result.NEUTRAL;
}
+ /**
+ * Gets the actual filter.
+ *
+ * @return the actual filter.
+ * @since 2.17.1
+ */
+ public Filter getFilter() {
+ return filter;
+ }
+
+ @Override
+ public void start() {
+ filter.activateOptions();
+ }
}
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/bridge/LayoutWrapper.java b/log4j-1.2-api/src/main/java/org/apache/log4j/bridge/LayoutWrapper.java
index a7f8b7f..b7ac317 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/bridge/LayoutWrapper.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/bridge/LayoutWrapper.java
@@ -16,11 +16,9 @@
*/
package org.apache.log4j.bridge;
-
import org.apache.log4j.Layout;
import org.apache.log4j.spi.LoggingEvent;
-
/**
* Bridge between the Log4j 1 Layout and a Log4j 2 Layout.
*/
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/bridge/LogEventAdapter.java b/log4j-1.2-api/src/main/java/org/apache/log4j/bridge/LogEventAdapter.java
index 3fe6a28..5fbb51b 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/bridge/LogEventAdapter.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/bridge/LogEventAdapter.java
@@ -30,6 +30,7 @@ import org.apache.logging.log4j.core.util.Loader;
import org.apache.logging.log4j.core.util.Throwables;
import org.apache.logging.log4j.spi.StandardLevel;
import org.apache.logging.log4j.status.StatusLogger;
+import org.apache.logging.log4j.util.Strings;
/**
* Converts a Log4j 2 LogEvent into the components needed by a Log4j 1.x LoggingEvent.
@@ -164,9 +165,8 @@ public class LogEventAdapter extends LoggingEvent {
public Object getMDC(String key) {
if (event.getContextData() != null) {
return event.getContextData().getValue(key);
- } else {
- return null;
}
+ return null;
}
/**
@@ -205,12 +205,12 @@ public class LogEventAdapter extends LoggingEvent {
}
/**
- * Return this event's throwable's string[] representation.
+ * Return this event's throwable's string[] representaion.
*/
@Override
public String[] getThrowableStrRep() {
if (event.getThrown() != null) {
- return Throwables.toStringList(event.getThrown()).toArray(new String[0]);
+ return Throwables.toStringList(event.getThrown()).toArray(Strings.EMPTY_ARRAY);
}
return null;
}
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/bridge/LogEventWrapper.java b/log4j-1.2-api/src/main/java/org/apache/log4j/bridge/LogEventWrapper.java
index 91d338a..600f69f 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/bridge/LogEventWrapper.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/bridge/LogEventWrapper.java
@@ -181,7 +181,6 @@ public class LogEventWrapper implements LogEvent {
return 0;
}
-
private static class ContextDataMap extends HashMap<String, String> implements ReadOnlyStringMap {
ContextDataMap(Map<String, String> map) {
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/AbstractBuilder.java b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/AbstractBuilder.java
index 96a775f..56a143f 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/AbstractBuilder.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/AbstractBuilder.java
@@ -22,6 +22,9 @@ import static org.apache.log4j.xml.XmlConfiguration.VALUE_ATTR;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicReference;
import org.apache.log4j.bridge.FilterAdapter;
import org.apache.log4j.bridge.FilterWrapper;
@@ -137,7 +140,7 @@ public abstract class AbstractBuilder<T> implements Builder<T> {
String value = properties.getProperty(prefix + toJavaKey(key));
value = value != null ? value : properties.getProperty(prefix + toBeanKey(key), defaultValue);
value = value != null ? substVars(value) : defaultValue;
- return value != null ? value : defaultValue;
+ return value != null ? value.trim() : defaultValue;
}
protected String getValueAttribute(final Element element) {
@@ -146,7 +149,7 @@ public abstract class AbstractBuilder<T> implements Builder<T> {
protected String getValueAttribute(final Element element, final String defaultValue) {
final String attribute = element.getAttribute(VALUE_ATTR);
- return substVars(attribute != null ? attribute : defaultValue);
+ return substVars(attribute != null ? attribute.trim() : defaultValue);
}
protected String substVars(final String value) {
@@ -170,7 +173,7 @@ public abstract class AbstractBuilder<T> implements Builder<T> {
return new String(chars);
}
- protected void setBoolean(final String name, final Element element, Holder<Boolean> ref) {
+ protected void set(final String name, final Element element, AtomicBoolean ref) {
final String value = getValueAttribute(element);
if (value == null) {
LOGGER.warn("No value for {} parameter, using default {}", name, ref);
@@ -179,7 +182,7 @@ public abstract class AbstractBuilder<T> implements Builder<T> {
}
}
- protected void setInteger(final String name, final Element element, Holder<Integer> ref) {
+ protected void set(final String name, final Element element, AtomicInteger ref) {
final String value = getValueAttribute(element);
if (value == null) {
LOGGER.warn("No value for {} parameter, using default {}", name, ref);
@@ -192,7 +195,7 @@ public abstract class AbstractBuilder<T> implements Builder<T> {
}
}
- protected void setString(final String name, final Element element, Holder<String> ref) {
+ protected void set(final String name, final Element element, AtomicReference<String> ref) {
final String value = getValueAttribute(element);
if (value == null) {
LOGGER.warn("No value for {} parameter, using default {}", name, ref);
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/BooleanHolder.java b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/BooleanHolder.java
deleted file mode 100644
index d5319b0..0000000
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/BooleanHolder.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache license, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the license for the specific language governing permissions and
- * limitations under the license.
- */
-package org.apache.log4j.builders;
-
-/**
- * Holds Boolean values created inside of a Lambda expression.
- */
-public class BooleanHolder extends Holder<Boolean> {
- public BooleanHolder() {
- this(false);
- }
-
- public BooleanHolder(boolean value) {
- super(value);
- }
-
- @Override
- public void set(Boolean value) {
- if (value != null) {
- super.set(value);
- }
- }
-}
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/Holder.java b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/Holder.java
deleted file mode 100644
index b9ce2bf..0000000
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/Holder.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache license, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the license for the specific language governing permissions and
- * limitations under the license.
- */
-package org.apache.log4j.builders;
-
-/**
- * Provides a place to hold values generated inside of a Lambda expression.
- */
-public class Holder<T> {
- private T value;
-
- public Holder() {
- }
-
- public Holder(T defaultValue) {
- this.value = defaultValue;
- }
-
- public void set(T value) {
- this.value = value;
- }
-
- public T get() {
- return value;
- }
-}
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/AsyncAppenderBuilder.java b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/AsyncAppenderBuilder.java
index ca1aa80..1801dfa 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/AsyncAppenderBuilder.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/AsyncAppenderBuilder.java
@@ -26,13 +26,14 @@ import static org.apache.log4j.xml.XmlConfiguration.forEachElement;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicReference;
import org.apache.log4j.Appender;
import org.apache.log4j.bridge.AppenderWrapper;
import org.apache.log4j.bridge.FilterAdapter;
import org.apache.log4j.builders.AbstractBuilder;
-import org.apache.log4j.builders.BooleanHolder;
-import org.apache.log4j.builders.Holder;
import org.apache.log4j.config.Log4j1Configuration;
import org.apache.log4j.config.PropertiesConfiguration;
import org.apache.log4j.helpers.OptionConverter;
@@ -66,14 +67,14 @@ public class AsyncAppenderBuilder extends AbstractBuilder implements AppenderBui
@Override
public Appender parseAppender(final Element appenderElement, final XmlConfiguration config) {
- String name = getNameAttribute(appenderElement);
- Holder<List<String>> appenderRefs = new Holder<>(new ArrayList<>());
- Holder<Boolean> blocking = new BooleanHolder();
- Holder<Boolean> includeLocation = new BooleanHolder();
- Holder<String> level = new Holder<>("trace");
- Holder<Integer> bufferSize = new Holder<>(1024);
- Holder<Filter> filter = new Holder<>();
- forEachElement(appenderElement.getChildNodes(), (currentElement) -> {
+ final String name = getNameAttribute(appenderElement);
+ final AtomicReference<List<String>> appenderRefs = new AtomicReference<>(new ArrayList<>());
+ final AtomicBoolean blocking = new AtomicBoolean();
+ final AtomicBoolean includeLocation = new AtomicBoolean();
+ final AtomicReference<String> level = new AtomicReference<>("trace");
+ final AtomicInteger bufferSize = new AtomicInteger(1024);
+ final AtomicReference<Filter> filter = new AtomicReference<>();
+ forEachElement(appenderElement.getChildNodes(), currentElement -> {
switch (currentElement.getTagName()) {
case APPENDER_REF_TAG:
final Appender appender = config.findAppenderByReference(currentElement);
@@ -87,16 +88,16 @@ public class AsyncAppenderBuilder extends AbstractBuilder implements AppenderBui
case PARAM_TAG: {
switch (getNameAttributeKey(currentElement)) {
case BUFFER_SIZE_PARAM:
- setInteger(BUFFER_SIZE_PARAM, currentElement, bufferSize);
+ set(BUFFER_SIZE_PARAM, currentElement, bufferSize);
break;
case BLOCKING_PARAM:
- setBoolean(BLOCKING_PARAM, currentElement, blocking);
+ set(BLOCKING_PARAM, currentElement, blocking);
break;
case INCLUDE_LOCATION_PARAM:
- setBoolean(INCLUDE_LOCATION_PARAM, currentElement, includeLocation);
+ set(INCLUDE_LOCATION_PARAM, currentElement, includeLocation);
break;
case THRESHOLD_PARAM:
- setString(THRESHOLD_PARAM, currentElement, level);
+ set(THRESHOLD_PARAM, currentElement, level);
break;
}
break;
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/ConsoleAppenderBuilder.java b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/ConsoleAppenderBuilder.java
index 333807a..95db77a 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/ConsoleAppenderBuilder.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/ConsoleAppenderBuilder.java
@@ -16,7 +16,6 @@
*/
package org.apache.log4j.builders.appender;
-
import static org.apache.log4j.builders.BuilderManager.CATEGORY;
import static org.apache.log4j.config.Log4j1Configuration.THRESHOLD_PARAM;
import static org.apache.log4j.xml.XmlConfiguration.FILTER_TAG;
@@ -25,6 +24,8 @@ import static org.apache.log4j.xml.XmlConfiguration.PARAM_TAG;
import static org.apache.log4j.xml.XmlConfiguration.forEachElement;
import java.util.Properties;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicReference;
import org.apache.log4j.Appender;
import org.apache.log4j.Layout;
@@ -32,8 +33,6 @@ import org.apache.log4j.bridge.AppenderWrapper;
import org.apache.log4j.bridge.LayoutAdapter;
import org.apache.log4j.bridge.LayoutWrapper;
import org.apache.log4j.builders.AbstractBuilder;
-import org.apache.log4j.builders.BooleanHolder;
-import org.apache.log4j.builders.Holder;
import org.apache.log4j.config.Log4j1Configuration;
import org.apache.log4j.config.PropertiesConfiguration;
import org.apache.log4j.spi.Filter;
@@ -60,20 +59,20 @@ public class ConsoleAppenderBuilder extends AbstractBuilder implements AppenderB
public ConsoleAppenderBuilder() {
}
- public ConsoleAppenderBuilder(String prefix, Properties props) {
+ public ConsoleAppenderBuilder(final String prefix, final Properties props) {
super(prefix, props);
}
@Override
public Appender parseAppender(final Element appenderElement, final XmlConfiguration config) {
- String name = getNameAttribute(appenderElement);
- Holder<String> target = new Holder<>(SYSTEM_OUT);
- Holder<Layout> layout = new Holder<>();
- Holder<Filter> filter = new Holder<>();
- Holder<String> level = new Holder<>();
- Holder<Boolean> follow = new BooleanHolder();
- Holder<Boolean> immediateFlush = new BooleanHolder(true);
- forEachElement(appenderElement.getChildNodes(), (currentElement) -> {
+ final String name = getNameAttribute(appenderElement);
+ final AtomicReference<String> target = new AtomicReference<>(SYSTEM_OUT);
+ final AtomicReference<Layout> layout = new AtomicReference<>();
+ final AtomicReference<Filter> filter = new AtomicReference<>();
+ final AtomicReference<String> level = new AtomicReference<>();
+ final AtomicBoolean follow = new AtomicBoolean();
+ final AtomicBoolean immediateFlush = new AtomicBoolean(true);
+ forEachElement(appenderElement.getChildNodes(), currentElement -> {
switch (currentElement.getTagName()) {
case LAYOUT_TAG:
layout.set(config.parseLayout(currentElement));
@@ -101,13 +100,13 @@ public class ConsoleAppenderBuilder extends AbstractBuilder implements AppenderB
}
break;
case THRESHOLD_PARAM:
- setString(THRESHOLD_PARAM, currentElement, level);
+ set(THRESHOLD_PARAM, currentElement, level);
break;
case FOLLOW_PARAM:
- setBoolean(FOLLOW_PARAM, currentElement, follow);
+ set(FOLLOW_PARAM, currentElement, follow);
break;
case IMMEDIATE_FLUSH_PARAM:
- setBoolean(IMMEDIATE_FLUSH_PARAM, currentElement, immediateFlush);
+ set(IMMEDIATE_FLUSH_PARAM, currentElement, immediateFlush);
break;
}
break;
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/DailyRollingFileAppenderBuilder.java b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/DailyRollingFileAppenderBuilder.java
index 78ade8c..a0dacac 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/DailyRollingFileAppenderBuilder.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/DailyRollingFileAppenderBuilder.java
@@ -16,14 +16,24 @@
*/
package org.apache.log4j.builders.appender;
+import static org.apache.log4j.builders.BuilderManager.CATEGORY;
+import static org.apache.log4j.config.Log4j1Configuration.THRESHOLD_PARAM;
+import static org.apache.log4j.xml.XmlConfiguration.FILTER_TAG;
+import static org.apache.log4j.xml.XmlConfiguration.LAYOUT_TAG;
+import static org.apache.log4j.xml.XmlConfiguration.PARAM_TAG;
+import static org.apache.log4j.xml.XmlConfiguration.forEachElement;
+
+import java.util.Properties;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicReference;
+
import org.apache.log4j.Appender;
import org.apache.log4j.Layout;
import org.apache.log4j.bridge.AppenderWrapper;
import org.apache.log4j.bridge.LayoutAdapter;
import org.apache.log4j.bridge.LayoutWrapper;
import org.apache.log4j.builders.AbstractBuilder;
-import org.apache.log4j.builders.BooleanHolder;
-import org.apache.log4j.builders.Holder;
import org.apache.log4j.config.Log4j1Configuration;
import org.apache.log4j.config.PropertiesConfiguration;
import org.apache.log4j.spi.Filter;
@@ -40,12 +50,6 @@ import org.apache.logging.log4j.plugins.Plugin;
import org.apache.logging.log4j.status.StatusLogger;
import org.w3c.dom.Element;
-import java.util.Properties;
-
-import static org.apache.log4j.builders.BuilderManager.CATEGORY;
-import static org.apache.log4j.config.Log4j1Configuration.THRESHOLD_PARAM;
-import static org.apache.log4j.xml.XmlConfiguration.*;
-
/**
* Build a Daily Rolling File Appender
*/
@@ -66,17 +70,17 @@ public class DailyRollingFileAppenderBuilder extends AbstractBuilder implements
@Override
public Appender parseAppender(final Element appenderElement, final XmlConfiguration config) {
- String name = getNameAttribute(appenderElement);
- Holder<Layout> layout = new Holder<>();
- Holder<Filter> filter = new Holder<>();
- Holder<String> fileName = new Holder<>();
- Holder<String> level = new Holder<>();
- Holder<Boolean> immediateFlush = new BooleanHolder(true);
- Holder<Boolean> append = new BooleanHolder(true);
- Holder<Boolean> bufferedIo = new BooleanHolder();
- Holder<Integer> bufferSize = new Holder<>(8192);
- Holder<String> datePattern = new Holder<>(DEFAULT_DATE_PATTERN);
- forEachElement(appenderElement.getChildNodes(), (currentElement) -> {
+ final String name = getNameAttribute(appenderElement);
+ final AtomicReference<Layout> layout = new AtomicReference<>();
+ final AtomicReference<Filter> filter = new AtomicReference<>();
+ final AtomicReference<String> fileName = new AtomicReference<>();
+ final AtomicReference<String> level = new AtomicReference<>();
+ final AtomicBoolean immediateFlush = new AtomicBoolean(true);
+ final AtomicBoolean append = new AtomicBoolean(true);
+ final AtomicBoolean bufferedIo = new AtomicBoolean();
+ final AtomicInteger bufferSize = new AtomicInteger(8192);
+ final AtomicReference<String> datePattern = new AtomicReference<>(DEFAULT_DATE_PATTERN);
+ forEachElement(appenderElement.getChildNodes(), currentElement -> {
switch (currentElement.getTagName()) {
case LAYOUT_TAG:
layout.set(config.parseLayout(currentElement));
@@ -87,25 +91,25 @@ public class DailyRollingFileAppenderBuilder extends AbstractBuilder implements
case PARAM_TAG:
switch (getNameAttributeKey(currentElement)) {
case FILE_PARAM:
- setString(FILE_PARAM, currentElement, fileName);
+ set(FILE_PARAM, currentElement, fileName);
break;
case APPEND_PARAM:
- setBoolean(APPEND_PARAM, currentElement, append);
+ set(APPEND_PARAM, currentElement, append);
break;
case BUFFERED_IO_PARAM:
- setBoolean(BUFFERED_IO_PARAM, currentElement, bufferedIo);
+ set(BUFFERED_IO_PARAM, currentElement, bufferedIo);
break;
case BUFFER_SIZE_PARAM:
- setInteger(BUFFER_SIZE_PARAM, currentElement, bufferSize);
+ set(BUFFER_SIZE_PARAM, currentElement, bufferSize);
break;
case THRESHOLD_PARAM:
- setString(THRESHOLD_PARAM, currentElement, level);
+ set(THRESHOLD_PARAM, currentElement, level);
break;
case DATE_PATTERN_PARAM:
- setString(DATE_PATTERN_PARAM, currentElement, datePattern);
+ set(DATE_PATTERN_PARAM, currentElement, datePattern);
break;
case IMMEDIATE_FLUSH_PARAM:
- setBoolean(IMMEDIATE_FLUSH_PARAM, currentElement, immediateFlush);
+ set(IMMEDIATE_FLUSH_PARAM, currentElement, immediateFlush);
break;
}
break;
@@ -134,7 +138,7 @@ public class DailyRollingFileAppenderBuilder extends AbstractBuilder implements
private <T extends Log4j1Configuration> Appender createAppender(final String name, final Layout layout,
final Filter filter, final String fileName, final boolean append, boolean immediateFlush,
- final String level, final boolean bufferedIo, final int bufferSize, String datePattern,
+ final String level, final boolean bufferedIo, final int bufferSize, final String datePattern,
final T configuration, final Clock clock) {
org.apache.logging.log4j.core.Layout<?> fileLayout = null;
@@ -160,7 +164,6 @@ public class DailyRollingFileAppenderBuilder extends AbstractBuilder implements
.build();
return new AppenderWrapper(RollingFileAppender.newBuilder()
.setName(name)
- .setAppend(append)
.setConfiguration(configuration)
.setLayout(fileLayout)
.setFilter(fileFilter)
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/FileAppenderBuilder.java b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/FileAppenderBuilder.java
index 8ead958..0327218 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/FileAppenderBuilder.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/FileAppenderBuilder.java
@@ -16,14 +16,24 @@
*/
package org.apache.log4j.builders.appender;
+import static org.apache.log4j.builders.BuilderManager.CATEGORY;
+import static org.apache.log4j.config.Log4j1Configuration.THRESHOLD_PARAM;
+import static org.apache.log4j.xml.XmlConfiguration.FILTER_TAG;
+import static org.apache.log4j.xml.XmlConfiguration.LAYOUT_TAG;
+import static org.apache.log4j.xml.XmlConfiguration.PARAM_TAG;
+import static org.apache.log4j.xml.XmlConfiguration.forEachElement;
+
+import java.util.Properties;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicReference;
+
import org.apache.log4j.Appender;
import org.apache.log4j.Layout;
import org.apache.log4j.bridge.AppenderWrapper;
import org.apache.log4j.bridge.LayoutAdapter;
import org.apache.log4j.bridge.LayoutWrapper;
import org.apache.log4j.builders.AbstractBuilder;
-import org.apache.log4j.builders.BooleanHolder;
-import org.apache.log4j.builders.Holder;
import org.apache.log4j.config.Log4j1Configuration;
import org.apache.log4j.config.PropertiesConfiguration;
import org.apache.log4j.spi.Filter;
@@ -34,17 +44,6 @@ import org.apache.logging.log4j.plugins.Plugin;
import org.apache.logging.log4j.status.StatusLogger;
import org.w3c.dom.Element;
-import java.util.Properties;
-
-import static org.apache.log4j.builders.BuilderManager.CATEGORY;
-import static org.apache.log4j.config.Log4j1Configuration.THRESHOLD_PARAM;
-import static org.apache.log4j.xml.XmlConfiguration.FILTER_TAG;
-import static org.apache.log4j.xml.XmlConfiguration.LAYOUT_TAG;
-import static org.apache.log4j.xml.XmlConfiguration.PARAM_TAG;
-import static org.apache.log4j.xml.XmlConfiguration.forEachElement;
-import static org.apache.log4j.xml.XmlConfiguration.NAME_ATTR;
-import static org.apache.log4j.xml.XmlConfiguration.VALUE_ATTR;
-
/**
* Build a File Appender
*/
@@ -61,17 +60,17 @@ public class FileAppenderBuilder extends AbstractBuilder implements AppenderBuil
}
@Override
- public Appender parseAppender(Element appenderElement, XmlConfiguration config) {
- String name = getNameAttribute(appenderElement);
- Holder<Layout> layout = new Holder<>();
- Holder<Filter> filter = new Holder<>();
- Holder<String> fileName = new Holder<>();
- Holder<String> level = new Holder<>();
- Holder<Boolean> immediateFlush = new BooleanHolder(true);
- Holder<Boolean> append = new BooleanHolder(true);
- Holder<Boolean> bufferedIo = new BooleanHolder();
- Holder<Integer> bufferSize = new Holder<>(8192);
- forEachElement(appenderElement.getChildNodes(), (currentElement) -> {
+ public Appender parseAppender(final Element appenderElement, final XmlConfiguration config) {
+ final String name = getNameAttribute(appenderElement);
+ final AtomicReference<Layout> layout = new AtomicReference<>();
+ final AtomicReference<Filter> filter = new AtomicReference<>();
+ final AtomicReference<String> fileName = new AtomicReference<>();
+ final AtomicReference<String> level = new AtomicReference<>();
+ final AtomicBoolean immediateFlush = new AtomicBoolean(true);
+ final AtomicBoolean append = new AtomicBoolean(true);
+ final AtomicBoolean bufferedIo = new AtomicBoolean();
+ final AtomicInteger bufferSize = new AtomicInteger(8192);
+ forEachElement(appenderElement.getChildNodes(), currentElement -> {
switch (currentElement.getTagName()) {
case LAYOUT_TAG:
layout.set(config.parseLayout(currentElement));
@@ -82,22 +81,22 @@ public class FileAppenderBuilder extends AbstractBuilder implements AppenderBuil
case PARAM_TAG:
switch (getNameAttributeKey(currentElement)) {
case FILE_PARAM:
- setString(FILE_PARAM, currentElement, fileName);
+ set(FILE_PARAM, currentElement, fileName);
break;
case APPEND_PARAM:
- setBoolean(APPEND_PARAM, currentElement, append);
+ set(APPEND_PARAM, currentElement, append);
break;
case BUFFERED_IO_PARAM:
- setBoolean(BUFFERED_IO_PARAM, currentElement, bufferedIo);
+ set(BUFFERED_IO_PARAM, currentElement, bufferedIo);
break;
case BUFFER_SIZE_PARAM:
- setInteger(BUFFER_SIZE_PARAM, currentElement, bufferSize);
+ set(BUFFER_SIZE_PARAM, currentElement, bufferSize);
break;
case THRESHOLD_PARAM:
- setString(THRESHOLD_PARAM, currentElement, level);
+ set(THRESHOLD_PARAM, currentElement, level);
break;
case IMMEDIATE_FLUSH_PARAM:
- setBoolean(IMMEDIATE_FLUSH_PARAM, currentElement, immediateFlush);
+ set(IMMEDIATE_FLUSH_PARAM, currentElement, immediateFlush);
break;
}
break;
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/NullAppenderBuilder.java b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/NullAppenderBuilder.java
index 98af6a8..960a9fe 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/NullAppenderBuilder.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/NullAppenderBuilder.java
@@ -16,28 +16,24 @@
*/
package org.apache.log4j.builders.appender;
+import static org.apache.log4j.builders.BuilderManager.CATEGORY;
+
+import java.util.Properties;
+
import org.apache.log4j.Appender;
import org.apache.log4j.bridge.AppenderWrapper;
import org.apache.log4j.config.PropertiesConfiguration;
import org.apache.log4j.xml.XmlConfiguration;
-import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.core.appender.NullAppender;
import org.apache.logging.log4j.plugins.Plugin;
-import org.apache.logging.log4j.status.StatusLogger;
import org.w3c.dom.Element;
-import java.util.Properties;
-
-import static org.apache.log4j.builders.BuilderManager.CATEGORY;
-
/**
* Build a Null Appender
*/
@Plugin(name = "org.apache.log4j.varia.NullAppender", category = CATEGORY)
public class NullAppenderBuilder implements AppenderBuilder {
- private static final Logger LOGGER = StatusLogger.getLogger();
-
@Override
public Appender parseAppender(final Element appenderElement, final XmlConfiguration config) {
final String name = appenderElement.getAttribute("name");
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/RewriteAppenderBuilder.java b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/RewriteAppenderBuilder.java
index d61770b..d8b61ba 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/RewriteAppenderBuilder.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/RewriteAppenderBuilder.java
@@ -16,12 +16,23 @@
*/
package org.apache.log4j.builders.appender;
+import static org.apache.log4j.builders.BuilderManager.CATEGORY;
+import static org.apache.log4j.config.Log4j1Configuration.APPENDER_REF_TAG;
+import static org.apache.log4j.config.Log4j1Configuration.THRESHOLD_PARAM;
+import static org.apache.log4j.xml.XmlConfiguration.FILTER_TAG;
+import static org.apache.log4j.xml.XmlConfiguration.PARAM_TAG;
+import static org.apache.log4j.xml.XmlConfiguration.forEachElement;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+import java.util.concurrent.atomic.AtomicReference;
+
import org.apache.log4j.Appender;
import org.apache.log4j.bridge.AppenderWrapper;
import org.apache.log4j.bridge.RewritePolicyAdapter;
import org.apache.log4j.bridge.RewritePolicyWrapper;
import org.apache.log4j.builders.AbstractBuilder;
-import org.apache.log4j.builders.Holder;
import org.apache.log4j.config.Log4j1Configuration;
import org.apache.log4j.config.PropertiesConfiguration;
import org.apache.log4j.helpers.OptionConverter;
@@ -33,22 +44,9 @@ import org.apache.logging.log4j.core.appender.rewrite.RewriteAppender;
import org.apache.logging.log4j.core.config.AppenderRef;
import org.apache.logging.log4j.plugins.Plugin;
import org.apache.logging.log4j.status.StatusLogger;
+import org.apache.logging.log4j.util.Strings;
import org.w3c.dom.Element;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Properties;
-
-import static org.apache.log4j.builders.BuilderManager.CATEGORY;
-import static org.apache.log4j.config.Log4j1Configuration.APPENDER_REF_TAG;
-import static org.apache.log4j.config.Log4j1Configuration.THRESHOLD_PARAM;
-import static org.apache.log4j.xml.XmlConfiguration.FILTER_TAG;
-import static org.apache.log4j.xml.XmlConfiguration.NAME_ATTR;
-import static org.apache.log4j.xml.XmlConfiguration.PARAM_TAG;
-import static org.apache.log4j.xml.XmlConfiguration.VALUE_ATTR;
-import static org.apache.log4j.xml.XmlConfiguration.forEachElement;
-
-
/**
* Build an Rewrite Appender
*/
@@ -67,12 +65,12 @@ public class RewriteAppenderBuilder extends AbstractBuilder implements AppenderB
@Override
public Appender parseAppender(final Element appenderElement, final XmlConfiguration config) {
- String name = getNameAttribute(appenderElement);
- Holder<List<String>> appenderRefs = new Holder<>(new ArrayList<>());
- Holder<RewritePolicy> rewritePolicyHolder = new Holder<>();
- Holder<String> level = new Holder<>();
- Holder<Filter> filter = new Holder<>();
- forEachElement(appenderElement.getChildNodes(), (currentElement) -> {
+ final String name = getNameAttribute(appenderElement);
+ final AtomicReference<List<String>> appenderRefs = new AtomicReference<>(new ArrayList<>());
+ final AtomicReference<RewritePolicy> rewritePolicyHolder = new AtomicReference<>();
+ final AtomicReference<String> level = new AtomicReference<>();
+ final AtomicReference<Filter> filter = new AtomicReference<>();
+ forEachElement(appenderElement.getChildNodes(), currentElement -> {
switch (currentElement.getTagName()) {
case APPENDER_REF_TAG:
final Appender appender = config.findAppenderByReference(currentElement);
@@ -91,12 +89,12 @@ public class RewriteAppenderBuilder extends AbstractBuilder implements AppenderB
break;
case PARAM_TAG:
if (getNameAttributeKey(currentElement).equalsIgnoreCase(THRESHOLD_PARAM)) {
- setString(THRESHOLD_PARAM, currentElement, level);
+ set(THRESHOLD_PARAM, currentElement, level);
}
break;
}
});
- return createAppender(name, level.get(), appenderRefs.get().toArray(new String[0]), rewritePolicyHolder.get(),
+ return createAppender(name, level.get(), appenderRefs.get().toArray(Strings.EMPTY_ARRAY), rewritePolicyHolder.get(),
filter.get(), config);
}
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/RollingFileAppenderBuilder.java b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/RollingFileAppenderBuilder.java
index 3ab8086..9664756 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/RollingFileAppenderBuilder.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/RollingFileAppenderBuilder.java
@@ -16,14 +16,24 @@
*/
package org.apache.log4j.builders.appender;
+import static org.apache.log4j.builders.BuilderManager.CATEGORY;
+import static org.apache.log4j.config.Log4j1Configuration.THRESHOLD_PARAM;
+import static org.apache.log4j.xml.XmlConfiguration.FILTER_TAG;
+import static org.apache.log4j.xml.XmlConfiguration.LAYOUT_TAG;
+import static org.apache.log4j.xml.XmlConfiguration.PARAM_TAG;
+import static org.apache.log4j.xml.XmlConfiguration.forEachElement;
+
+import java.util.Properties;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicReference;
+
import org.apache.log4j.Appender;
import org.apache.log4j.Layout;
import org.apache.log4j.bridge.AppenderWrapper;
import org.apache.log4j.bridge.LayoutAdapter;
import org.apache.log4j.bridge.LayoutWrapper;
import org.apache.log4j.builders.AbstractBuilder;
-import org.apache.log4j.builders.BooleanHolder;
-import org.apache.log4j.builders.Holder;
import org.apache.log4j.config.Log4j1Configuration;
import org.apache.log4j.config.PropertiesConfiguration;
import org.apache.log4j.spi.Filter;
@@ -41,12 +51,6 @@ import org.apache.logging.log4j.plugins.Plugin;
import org.apache.logging.log4j.status.StatusLogger;
import org.w3c.dom.Element;
-import java.util.Properties;
-
-import static org.apache.log4j.builders.BuilderManager.CATEGORY;
-import static org.apache.log4j.config.Log4j1Configuration.THRESHOLD_PARAM;
-import static org.apache.log4j.xml.XmlConfiguration.*;
-
/**
* Build a File Appender
*/
@@ -61,24 +65,24 @@ public class RollingFileAppenderBuilder extends AbstractBuilder implements Appen
public RollingFileAppenderBuilder() {
}
- public RollingFileAppenderBuilder(String prefix, Properties props) {
- super(prefix, props);
+ public RollingFileAppenderBuilder(final String prefix, final Properties properties) {
+ super(prefix, properties);
}
@Override
- public Appender parseAppender(Element appenderElement, XmlConfiguration config) {
- String name = getNameAttribute(appenderElement);
- Holder<Layout> layout = new Holder<>();
- Holder<Filter> filter = new Holder<>();
- Holder<String> fileName = new Holder<>();
- Holder<Boolean> immediateFlush = new BooleanHolder(true);
- Holder<Boolean> append = new BooleanHolder(true);
- Holder<Boolean> bufferedIo = new BooleanHolder();
- Holder<Integer> bufferSize = new Holder<>(8192);
- Holder<String> maxSize = new Holder<>(DEFAULT_MAX_SIZE);
- Holder<String> maxBackups = new Holder<>(DEFAULT_MAX_BACKUPS);
- Holder<String> level = new Holder<>();
- forEachElement(appenderElement.getChildNodes(), (currentElement) -> {
+ public Appender parseAppender(final Element appenderElement, final XmlConfiguration config) {
+ final String name = getNameAttribute(appenderElement);
+ final AtomicReference<Layout> layout = new AtomicReference<>();
+ final AtomicReference<Filter> filter = new AtomicReference<>();
+ final AtomicReference<String> fileName = new AtomicReference<>();
+ final AtomicBoolean immediateFlush = new AtomicBoolean(true);
+ final AtomicBoolean append = new AtomicBoolean(true);
+ final AtomicBoolean bufferedIo = new AtomicBoolean();
+ final AtomicInteger bufferSize = new AtomicInteger(8192);
+ final AtomicReference<String> maxSize = new AtomicReference<>(DEFAULT_MAX_SIZE);
+ final AtomicReference<String> maxBackups = new AtomicReference<>(DEFAULT_MAX_BACKUPS);
+ final AtomicReference<String> level = new AtomicReference<>();
+ forEachElement(appenderElement.getChildNodes(), currentElement -> {
switch (currentElement.getTagName()) {
case LAYOUT_TAG:
layout.set(config.parseLayout(currentElement));
@@ -89,28 +93,28 @@ public class RollingFileAppenderBuilder extends AbstractBuilder implements Appen
case PARAM_TAG:
switch (getNameAttributeKey(currentElement)) {
case FILE_PARAM:
- setString(FILE_PARAM, currentElement, fileName);
+ set(FILE_PARAM, currentElement, fileName);
break;
case APPEND_PARAM:
- setBoolean(APPEND_PARAM, currentElement, append);
+ set(APPEND_PARAM, currentElement, append);
break;
case BUFFERED_IO_PARAM:
- setBoolean(BUFFERED_IO_PARAM, currentElement, bufferedIo);
+ set(BUFFERED_IO_PARAM, currentElement, bufferedIo);
break;
case BUFFER_SIZE_PARAM:
- setInteger(BUFFER_SIZE_PARAM, currentElement, bufferSize);
+ set(BUFFER_SIZE_PARAM, currentElement, bufferSize);
break;
case MAX_BACKUP_INDEX:
- setString(MAX_BACKUP_INDEX, currentElement, maxBackups);
+ set(MAX_BACKUP_INDEX, currentElement, maxBackups);
break;
case MAX_SIZE_PARAM:
- setString(MAX_SIZE_PARAM, currentElement, maxSize);
+ set(MAX_SIZE_PARAM, currentElement, maxSize);
break;
case THRESHOLD_PARAM:
- setString(THRESHOLD_PARAM, currentElement, level);
+ set(THRESHOLD_PARAM, currentElement, level);
break;
case IMMEDIATE_FLUSH_PARAM:
- setBoolean(IMMEDIATE_FLUSH_PARAM, currentElement, immediateFlush);
+ set(IMMEDIATE_FLUSH_PARAM, currentElement, immediateFlush);
break;
}
break;
@@ -156,11 +160,11 @@ public class RollingFileAppenderBuilder extends AbstractBuilder implements Appen
LOGGER.warn("Unable to create File Appender, no file name provided");
return null;
}
- String filePattern = fileName + ".%i";
- TriggeringPolicy timePolicy = TimeBasedTriggeringPolicy.newBuilder().setClock(clock).setModulate(true).build();
- SizeBasedTriggeringPolicy sizePolicy = SizeBasedTriggeringPolicy.createPolicy(maxSize);
- CompositeTriggeringPolicy policy = CompositeTriggeringPolicy.createPolicy(sizePolicy);
- RolloverStrategy strategy = DefaultRolloverStrategy.newBuilder()
+ final String filePattern = fileName + ".%i";
+ final TriggeringPolicy timePolicy = TimeBasedTriggeringPolicy.newBuilder().setClock(clock).setModulate(true).build();
+ final SizeBasedTriggeringPolicy sizePolicy = SizeBasedTriggeringPolicy.createPolicy(maxSize);
+ final CompositeTriggeringPolicy policy = CompositeTriggeringPolicy.createPolicy(sizePolicy);
+ final RolloverStrategy strategy = DefaultRolloverStrategy.newBuilder()
.setConfig(config)
.setMax(maxBackups)
.build();
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/SocketAppenderBuilder.java b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/SocketAppenderBuilder.java
index 116f3b7..a5fa418 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/SocketAppenderBuilder.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/SocketAppenderBuilder.java
@@ -24,6 +24,9 @@ import static org.apache.log4j.xml.XmlConfiguration.PARAM_TAG;
import static org.apache.log4j.xml.XmlConfiguration.forEachElement;
import java.util.Properties;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicReference;
import org.apache.log4j.Appender;
import org.apache.log4j.Layout;
@@ -31,8 +34,6 @@ import org.apache.log4j.bridge.AppenderWrapper;
import org.apache.log4j.bridge.LayoutAdapter;
import org.apache.log4j.bridge.LayoutWrapper;
import org.apache.log4j.builders.AbstractBuilder;
-import org.apache.log4j.builders.BooleanHolder;
-import org.apache.log4j.builders.Holder;
import org.apache.log4j.config.Log4j1Configuration;
import org.apache.log4j.config.PropertiesConfiguration;
import org.apache.log4j.spi.Filter;
@@ -94,13 +95,13 @@ public class SocketAppenderBuilder extends AbstractBuilder implements AppenderBu
@Override
public Appender parseAppender(final Element appenderElement, final XmlConfiguration config) {
final String name = getNameAttribute(appenderElement);
- final Holder<String> host = new Holder<>("localhost");
- final Holder<Integer> port = new Holder<>(DEFAULT_PORT);
- final Holder<Integer> reconnectDelay = new Holder<>(DEFAULT_RECONNECTION_DELAY);
- final Holder<Layout> layout = new Holder<>();
- final Holder<Filter> filter = new Holder<>();
- final Holder<String> level = new Holder<>();
- final Holder<Boolean> immediateFlush = new BooleanHolder(true);
+ final AtomicReference<String> host = new AtomicReference<>("localhost");
+ final AtomicInteger port = new AtomicInteger(DEFAULT_PORT);
+ final AtomicInteger reconnectDelay = new AtomicInteger(DEFAULT_RECONNECTION_DELAY);
+ final AtomicReference<Layout> layout = new AtomicReference<>();
+ final AtomicReference<Filter> filter = new AtomicReference<>();
+ final AtomicReference<String> level = new AtomicReference<>();
+ final AtomicBoolean immediateFlush = new AtomicBoolean(true);
forEachElement(appenderElement.getChildNodes(), currentElement -> {
switch (currentElement.getTagName()) {
case LAYOUT_TAG:
@@ -112,19 +113,19 @@ public class SocketAppenderBuilder extends AbstractBuilder implements AppenderBu
case PARAM_TAG:
switch (getNameAttributeKey(currentElement)) {
case HOST_PARAM:
- setString(HOST_PARAM, currentElement, host);
+ set(HOST_PARAM, currentElement, host);
break;
case PORT_PARAM:
- setInteger(PORT_PARAM, currentElement, port);
+ set(PORT_PARAM, currentElement, port);
break;
case RECONNECTION_DELAY_PARAM:
- setInteger(RECONNECTION_DELAY_PARAM, currentElement, reconnectDelay);
+ set(RECONNECTION_DELAY_PARAM, currentElement, reconnectDelay);
break;
case THRESHOLD_PARAM:
- setString(THRESHOLD_PARAM, currentElement, level);
+ set(THRESHOLD_PARAM, currentElement, level);
break;
case IMMEDIATE_FLUSH_PARAM:
- setBoolean(IMMEDIATE_FLUSH_PARAM, currentElement, immediateFlush);
+ set(IMMEDIATE_FLUSH_PARAM, currentElement, immediateFlush);
break;
}
break;
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/SyslogAppenderBuilder.java b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/SyslogAppenderBuilder.java
index ffbdedf..3987fad 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/SyslogAppenderBuilder.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/SyslogAppenderBuilder.java
@@ -34,7 +34,6 @@ import org.apache.log4j.bridge.AppenderWrapper;
import org.apache.log4j.bridge.LayoutAdapter;
import org.apache.log4j.bridge.LayoutWrapper;
import org.apache.log4j.builders.AbstractBuilder;
-import org.apache.log4j.builders.Holder;
import org.apache.log4j.config.Log4j1Configuration;
import org.apache.log4j.config.PropertiesConfiguration;
import org.apache.log4j.spi.Filter;
@@ -66,19 +65,19 @@ public class SyslogAppenderBuilder extends AbstractBuilder implements AppenderBu
public SyslogAppenderBuilder() {
}
- public SyslogAppenderBuilder(String prefix, Properties props) {
+ public SyslogAppenderBuilder(final String prefix, final Properties props) {
super(prefix, props);
}
@Override
- public Appender parseAppender(Element appenderElement, XmlConfiguration config) {
- String name = getNameAttribute(appenderElement);
- Holder<Layout> layout = new Holder<>();
- Holder<Filter> filter = new Holder<>();
- Holder<String> facility = new Holder<>(DEFAULT_FACILITY);
- Holder<String> level = new Holder<>();
- Holder<String> host = new Holder<>(DEFAULT_HOST + ":" + DEFAULT_PORT);
- Holder<Protocol> protocol = new Holder<>(Protocol.TCP);
+ public Appender parseAppender(final Element appenderElement, final XmlConfiguration config) {
+ final String name = getNameAttribute(appenderElement);
+ final AtomicReference<Layout> layout = new AtomicReference<>();
+ final AtomicReference<Filter> filter = new AtomicReference<>();
+ final AtomicReference<String> facility = new AtomicReference<>();
+ final AtomicReference<String> level = new AtomicReference<>();
+ final AtomicReference<String> host = new AtomicReference<>();
+ final AtomicReference<Protocol> protocol = new AtomicReference<>(Protocol.TCP);
forEachElement(appenderElement.getChildNodes(), currentElement -> {
switch (currentElement.getTagName()) {
case LAYOUT_TAG:
@@ -87,29 +86,22 @@ public class SyslogAppenderBuilder extends AbstractBuilder implements AppenderBu
case FILTER_TAG:
config.addFilter(filter, currentElement);
break;
- case PARAM_TAG: {
+ case PARAM_TAG:
switch (getNameAttributeKey(currentElement)) {
case SYSLOG_HOST_PARAM:
- setString(SYSLOG_HOST_PARAM, currentElement, host);
+ set(SYSLOG_HOST_PARAM, currentElement, host);
break;
case FACILITY_PARAM:
- setString(FACILITY_PARAM, currentElement, facility);
+ set(FACILITY_PARAM, currentElement, facility);
break;
- case THRESHOLD_PARAM: {
- String value = getValueAttribute(currentElement);
- if (value == null) {
- LOGGER.warn("No value supplied for Threshold parameter, ignoring.");
- } else {
- level.set(value);
- }
+ case THRESHOLD_PARAM:
+ set(THRESHOLD_PARAM, currentElement, level);
break;
- }
case PROTOCOL_PARAM:
protocol.set(Protocol.valueOf(getValueAttribute(currentElement, Protocol.TCP.name())));
break;
}
break;
- }
}
});
@@ -120,20 +112,20 @@ public class SyslogAppenderBuilder extends AbstractBuilder implements AppenderBu
@Override
public Appender parseAppender(final String name, final String appenderPrefix, final String layoutPrefix,
final String filterPrefix, final Properties props, final PropertiesConfiguration configuration) {
- Filter filter = configuration.parseAppenderFilters(props, filterPrefix, name);
- Layout layout = configuration.parseLayout(layoutPrefix, name, props);
- String level = getProperty(THRESHOLD_PARAM);
- String facility = getProperty(FACILITY_PARAM, DEFAULT_FACILITY);
- String syslogHost = getProperty(SYSLOG_HOST_PARAM, DEFAULT_HOST + ":" + DEFAULT_PORT);
- String protocol = getProperty(PROTOCOL_PARAM, Protocol.TCP.name());
+ final Filter filter = configuration.parseAppenderFilters(props, filterPrefix, name);
+ final Layout layout = configuration.parseLayout(layoutPrefix, name, props);
+ final String level = getProperty(THRESHOLD_PARAM);
+ final String facility = getProperty(FACILITY_PARAM, DEFAULT_FACILITY);
+ final String syslogHost = getProperty(SYSLOG_HOST_PARAM, DEFAULT_HOST + ":" + DEFAULT_PORT);
+ final String protocol = getProperty(PROTOCOL_PARAM, Protocol.TCP.name());
return createAppender(name, configuration, layout, facility, filter, syslogHost, level, Protocol.valueOf(protocol));
}
- private Appender createAppender(final String name, final Log4j1Configuration configuration, Layout layout,
- String facility, final Filter filter, final String syslogHost, final String level, final Protocol protocol) {
- AtomicReference<String> host = new AtomicReference<>();
- AtomicInteger port = new AtomicInteger();
+ private Appender createAppender(final String name, final Log4j1Configuration configuration, final Layout layout,
+ final String facility, final Filter filter, final String syslogHost, final String level, final Protocol protocol) {
+ final AtomicReference<String> host = new AtomicReference<>();
+ final AtomicInteger port = new AtomicInteger();
resolveSyslogHost(syslogHost, host, port);
org.apache.logging.log4j.core.Layout<? extends Serializable> appenderLayout;
if (layout instanceof LayoutWrapper) {
@@ -147,7 +139,7 @@ public class SyslogAppenderBuilder extends AbstractBuilder implements AppenderBu
.build();
}
- org.apache.logging.log4j.core.Filter fileFilter = buildFilters(level, filter);
+ final org.apache.logging.log4j.core.Filter fileFilter = buildFilters(level, filter);
return new AppenderWrapper(SyslogAppender.newSyslogAppenderBuilder()
.setName(name)
.setConfiguration(configuration)
@@ -159,7 +151,7 @@ public class SyslogAppenderBuilder extends AbstractBuilder implements AppenderBu
.build());
}
- private void resolveSyslogHost(String syslogHost, AtomicReference<String> host, AtomicInteger port) {
+ private void resolveSyslogHost(final String syslogHost, final AtomicReference<String> host, final AtomicInteger port) {
//
// If not an unbracketed IPv6 address then
// parse as a URL
@@ -170,7 +162,7 @@ public class SyslogAppenderBuilder extends AbstractBuilder implements AppenderBu
port.set(DEFAULT_PORT);
} else if (parts.length == 2) {
host.set(parts[0]);
- port.set(Integer.parseInt(parts[1]));
+ port.set(Integer.parseInt(parts[1].trim()));
} else {
LOGGER.warn("Invalid {} setting: {}. Using default.", SYSLOG_HOST_PARAM, syslogHost);
host.set(DEFAULT_HOST);
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/filter/LevelMatchFilterBuilder.java b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/filter/LevelMatchFilterBuilder.java
index d4768bb..2c45b10 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/filter/LevelMatchFilterBuilder.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/filter/LevelMatchFilterBuilder.java
@@ -16,24 +16,23 @@
*/
package org.apache.log4j.builders.filter;
+import static org.apache.log4j.builders.BuilderManager.CATEGORY;
+import static org.apache.log4j.xml.XmlConfiguration.forEachElement;
+
+import java.util.Properties;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicReference;
+
import org.apache.log4j.bridge.FilterWrapper;
import org.apache.log4j.builders.AbstractBuilder;
-import org.apache.log4j.builders.BooleanHolder;
-import org.apache.log4j.builders.Holder;
import org.apache.log4j.config.PropertiesConfiguration;
import org.apache.log4j.spi.Filter;
import org.apache.log4j.xml.XmlConfiguration;
import org.apache.logging.log4j.Level;
-import org.apache.logging.log4j.plugins.Plugin;
import org.apache.logging.log4j.core.filter.LevelMatchFilter;
+import org.apache.logging.log4j.plugins.Plugin;
import org.w3c.dom.Element;
-import java.util.Properties;
-
-import static org.apache.log4j.builders.BuilderManager.CATEGORY;
-import static org.apache.log4j.xml.XmlConfiguration.*;
-import static org.apache.log4j.xml.XmlConfiguration.VALUE_ATTR;
-
/**
* Build a Level match filter.
*/
@@ -52,9 +51,9 @@ public class LevelMatchFilterBuilder extends AbstractBuilder<Filter> implements
@Override
public Filter parse(Element filterElement, XmlConfiguration config) {
- final Holder<String> level = new Holder<>();
- final Holder<Boolean> acceptOnMatch = new BooleanHolder();
- forEachElement(filterElement.getElementsByTagName("param"), (currentElement) -> {
+ final AtomicReference<String> level = new AtomicReference<>();
+ final AtomicBoolean acceptOnMatch = new AtomicBoolean();
+ forEachElement(filterElement.getElementsByTagName("param"), currentElement -> {
if (currentElement.getTagName().equals("param")) {
switch (getNameAttributeKey(currentElement)) {
case LEVEL:
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/filter/LevelRangeFilterBuilder.java b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/filter/LevelRangeFilterBuilder.java
index d3fd09a..88f45cd 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/filter/LevelRangeFilterBuilder.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/filter/LevelRangeFilterBuilder.java
@@ -16,25 +16,23 @@
*/
package org.apache.log4j.builders.filter;
+import static org.apache.log4j.builders.BuilderManager.CATEGORY;
+import static org.apache.log4j.xml.XmlConfiguration.forEachElement;
+
+import java.util.Properties;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicReference;
+
import org.apache.log4j.bridge.FilterWrapper;
import org.apache.log4j.builders.AbstractBuilder;
-import org.apache.log4j.builders.BooleanHolder;
-import org.apache.log4j.builders.Holder;
import org.apache.log4j.config.PropertiesConfiguration;
import org.apache.log4j.spi.Filter;
import org.apache.log4j.xml.XmlConfiguration;
import org.apache.logging.log4j.Level;
-import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.plugins.Plugin;
import org.apache.logging.log4j.core.filter.LevelRangeFilter;
+import org.apache.logging.log4j.plugins.Plugin;
import org.w3c.dom.Element;
-
-import java.util.Properties;
-
-import static org.apache.log4j.builders.BuilderManager.CATEGORY;
-import static org.apache.log4j.xml.XmlConfiguration.*;
-
/**
* Build a Level match filter.
*/
@@ -54,10 +52,10 @@ public class LevelRangeFilterBuilder extends AbstractBuilder<Filter> implements
@Override
public Filter parse(Element filterElement, XmlConfiguration config) {
- final Holder<String> levelMax = new Holder<>();
- final Holder<String> levelMin = new Holder<>();
- final Holder<Boolean> acceptOnMatch = new BooleanHolder();
- forEachElement(filterElement.getElementsByTagName("param"), (currentElement) -> {
+ final AtomicReference<String> levelMax = new AtomicReference<>();
+ final AtomicReference<String> levelMin = new AtomicReference<>();
+ final AtomicBoolean acceptOnMatch = new AtomicBoolean();
+ forEachElement(filterElement.getElementsByTagName("param"), currentElement -> {
if (currentElement.getTagName().equals("param")) {
switch (getNameAttributeKey(currentElement)) {
case LEVEL_MAX:
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/filter/StringMatchFilterBuilder.java b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/filter/StringMatchFilterBuilder.java
index 375e239..616e9f8 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/filter/StringMatchFilterBuilder.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/filter/StringMatchFilterBuilder.java
@@ -16,24 +16,23 @@
*/
package org.apache.log4j.builders.filter;
+import static org.apache.log4j.builders.BuilderManager.CATEGORY;
+import static org.apache.log4j.xml.XmlConfiguration.forEachElement;
+
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicReference;
+
import org.apache.log4j.bridge.FilterWrapper;
import org.apache.log4j.builders.AbstractBuilder;
-import org.apache.log4j.builders.BooleanHolder;
-import org.apache.log4j.builders.Holder;
import org.apache.log4j.config.PropertiesConfiguration;
import org.apache.log4j.spi.Filter;
import org.apache.log4j.xml.XmlConfiguration;
import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.plugins.Plugin;
import org.apache.logging.log4j.core.filter.StringMatchFilter;
+import org.apache.logging.log4j.plugins.Plugin;
import org.apache.logging.log4j.status.StatusLogger;
import org.w3c.dom.Element;
-import java.util.Properties;
-
-import static org.apache.log4j.builders.BuilderManager.CATEGORY;
-import static org.apache.log4j.xml.XmlConfiguration.*;
-
/**
* Build a String match filter.
*/
@@ -46,9 +45,9 @@ public class StringMatchFilterBuilder extends AbstractBuilder<Filter> implements
@Override
public Filter parse(Element filterElement, XmlConfiguration config) {
- final Holder<Boolean> acceptOnMatch = new BooleanHolder();
- final Holder<String> text = new Holder<>();
- forEachElement(filterElement.getElementsByTagName("param"), (currentElement) -> {
+ final AtomicBoolean acceptOnMatch = new AtomicBoolean();
+ final AtomicReference<String> text = new AtomicReference<>();
+ forEachElement(filterElement.getElementsByTagName("param"), currentElement -> {
if (currentElement.getTagName().equals("param")) {
switch (getNameAttributeKey(currentElement)) {
case STRING_TO_MATCH:
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/layout/HtmlLayoutBuilder.java b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/layout/HtmlLayoutBuilder.java
index 6b735f2..75ca290 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/layout/HtmlLayoutBuilder.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/layout/HtmlLayoutBuilder.java
@@ -16,23 +16,23 @@
*/
package org.apache.log4j.builders.layout;
+import static org.apache.log4j.builders.BuilderManager.CATEGORY;
+import static org.apache.log4j.xml.XmlConfiguration.PARAM_TAG;
+import static org.apache.log4j.xml.XmlConfiguration.forEachElement;
+
+import java.util.Properties;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicReference;
+
import org.apache.log4j.Layout;
import org.apache.log4j.bridge.LayoutWrapper;
import org.apache.log4j.builders.AbstractBuilder;
-import org.apache.log4j.builders.BooleanHolder;
-import org.apache.log4j.builders.Holder;
import org.apache.log4j.config.PropertiesConfiguration;
import org.apache.log4j.xml.XmlConfiguration;
-import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.plugins.Plugin;
import org.apache.logging.log4j.core.layout.HtmlLayout;
+import org.apache.logging.log4j.plugins.Plugin;
import org.w3c.dom.Element;
-import java.util.Properties;
-
-import static org.apache.log4j.builders.BuilderManager.CATEGORY;
-import static org.apache.log4j.xml.XmlConfiguration.*;
-
/**
* Build a Pattern Layout
*/
@@ -53,9 +53,9 @@ public class HtmlLayoutBuilder extends AbstractBuilder<Layout> implements Layout
@Override
public Layout parse(Element layoutElement, XmlConfiguration config) {
- final Holder<String> title = new Holder<>("Log4J Log Messages");
- final Holder<Boolean> locationInfo = new BooleanHolder();
- forEachElement(layoutElement.getElementsByTagName("param"), (currentElement) -> {
+ final AtomicReference<String> title = new AtomicReference<>("Log4J Log Messages");
+ final AtomicBoolean locationInfo = new AtomicBoolean();
+ forEachElement(layoutElement.getElementsByTagName("param"), currentElement -> {
if (currentElement.getTagName().equals(PARAM_TAG)) {
if (TITLE_PARAM.equalsIgnoreCase(currentElement.getAttribute("name"))) {
title.set(currentElement.getAttribute("value"));
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/layout/SimpleLayoutBuilder.java b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/layout/SimpleLayoutBuilder.java
index 9bb0d64..00d7c2c 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/layout/SimpleLayoutBuilder.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/layout/SimpleLayoutBuilder.java
@@ -22,12 +22,10 @@ import org.apache.log4j.Layout;
import org.apache.log4j.bridge.LayoutWrapper;
import org.apache.log4j.config.PropertiesConfiguration;
import org.apache.log4j.xml.XmlConfiguration;
-import org.apache.logging.log4j.plugins.Plugin;
import org.apache.logging.log4j.core.layout.PatternLayout;
+import org.apache.logging.log4j.plugins.Plugin;
import org.w3c.dom.Element;
-import java.util.Properties;
-
/**
* Build a Pattern Layout
*/
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/config/Log4j1ConfigurationFactory.java b/log4j-1.2-api/src/main/java/org/apache/log4j/config/Log4j1ConfigurationFactory.java
index 83f6675..467d88d 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/config/Log4j1ConfigurationFactory.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/config/Log4j1ConfigurationFactory.java
@@ -37,7 +37,7 @@ import org.apache.logging.log4j.core.config.builder.impl.BuiltConfiguration;
// @Order(50)
public class Log4j1ConfigurationFactory extends ConfigurationFactory {
- private static final String[] SUFFIXES = {".properties"};
+ private static final String[] SUFFIXES = { ".properties" };
@Override
public Configuration getConfiguration(final LoggerContext loggerContext, final ConfigurationSource source) {
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/config/Log4j1ConfigurationParser.java b/log4j-1.2-api/src/main/java/org/apache/log4j/config/Log4j1ConfigurationParser.java
index 927c154..985594c 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/config/Log4j1ConfigurationParser.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/config/Log4j1ConfigurationParser.java
@@ -25,7 +25,6 @@ import java.util.Objects;
import java.util.Properties;
import java.util.TreeMap;
-import org.apache.log4j.LogManager;
import org.apache.log4j.helpers.OptionConverter;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.core.Filter.Result;
@@ -38,12 +37,10 @@ import org.apache.logging.log4j.core.config.builder.api.AppenderComponentBuilder
import org.apache.logging.log4j.core.config.builder.api.ComponentBuilder;
import org.apache.logging.log4j.core.config.builder.api.ConfigurationBuilder;
import org.apache.logging.log4j.core.config.builder.api.ConfigurationBuilderFactory;
-import org.apache.logging.log4j.core.config.builder.api.FilterComponentBuilder;
import org.apache.logging.log4j.core.config.builder.api.LayoutComponentBuilder;
import org.apache.logging.log4j.core.config.builder.api.LoggerComponentBuilder;
import org.apache.logging.log4j.core.config.builder.api.RootLoggerComponentBuilder;
import org.apache.logging.log4j.core.config.builder.impl.BuiltConfiguration;
-import org.apache.logging.log4j.core.filter.ThresholdFilter;
import org.apache.logging.log4j.status.StatusLogger;
import org.apache.logging.log4j.util.Strings;
@@ -104,7 +101,7 @@ public class Log4j1ConfigurationParser {
builder.setConfigurationName("Log4j1");
// DEBUG
final String debugValue = getLog4jValue("debug");
- if (Boolean.valueOf(debugValue)) {
+ if (Boolean.parseBoolean(debugValue)) {
builder.setStatusLevel(Level.DEBUG);
}
// global threshold
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/config/PropertySetter.java b/log4j-1.2-api/src/main/java/org/apache/log4j/config/PropertySetter.java
index 69fa1e5..f51f173 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/config/PropertySetter.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/config/PropertySetter.java
@@ -56,6 +56,7 @@ import java.util.Properties;
* Otherwise an {@link IntrospectionException} are thrown.
*/
public class PropertySetter {
+ private static final PropertyDescriptor[] EMPTY_PROPERTY_DESCRIPTOR_ARRAY = {};
private static final Logger LOGGER = StatusLogger.getLogger();
protected Object obj;
protected PropertyDescriptor[] props;
@@ -93,7 +94,7 @@ public class PropertySetter {
props = bi.getPropertyDescriptors();
} catch (IntrospectionException ex) {
LOGGER.error("Failed to introspect {}: {}", obj, ex.getMessage());
- props = new PropertyDescriptor[0];
+ props = EMPTY_PROPERTY_DESCRIPTOR_ARRAY;
}
}
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/config/PropertySetterException.java b/log4j-1.2-api/src/main/java/org/apache/log4j/config/PropertySetterException.java
index c9dc4cf..703900c 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/config/PropertySetterException.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/config/PropertySetterException.java
@@ -45,7 +45,6 @@ public class PropertySetterException extends Exception {
* @param rootCause The root cause
*/
public PropertySetterException(final Throwable rootCause) {
- super();
this.rootCause = rootCause;
}
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/helpers/AppenderAttachableImpl.java b/log4j-1.2-api/src/main/java/org/apache/log4j/helpers/AppenderAttachableImpl.java
index 9589b50..3b72848 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/helpers/AppenderAttachableImpl.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/helpers/AppenderAttachableImpl.java
@@ -68,7 +68,7 @@ public class AppenderAttachableImpl implements AppenderAttachable {
}
@Override
- public Enumeration getAllAppenders() {
+ public Enumeration<Appender> getAllAppenders() {
return Collections.enumeration(appenders.values());
}
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/helpers/OptionConverter.java b/log4j-1.2-api/src/main/java/org/apache/log4j/helpers/OptionConverter.java
index 424c5c8..74a38f8 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/helpers/OptionConverter.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/helpers/OptionConverter.java
@@ -55,14 +55,14 @@ public class OptionConverter {
private static final Logger LOGGER = StatusLogger.getLogger();
private static final CharMap[] charMap = new CharMap[] {
- new CharMap('n', '\n'),
- new CharMap('r', '\r'),
- new CharMap('t', '\t'),
- new CharMap('f', '\f'),
- new CharMap('\b', '\b'),
- new CharMap('\"', '\"'),
- new CharMap('\'', '\''),
- new CharMap('\\', '\\')
+ new CharMap('n', '\n'),
+ new CharMap('r', '\r'),
+ new CharMap('t', '\t'),
+ new CharMap('f', '\f'),
+ new CharMap('\b', '\b'),
+ new CharMap('\"', '\"'),
+ new CharMap('\'', '\''),
+ new CharMap('\\', '\\')
};
public static String[] concatanateArrays(final String[] l, final String[] r) {
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/helpers/PatternParser.java b/log4j-1.2-api/src/main/java/org/apache/log4j/helpers/PatternParser.java
index 5b5e65d..f418ace 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/helpers/PatternParser.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/helpers/PatternParser.java
@@ -31,541 +31,493 @@ import org.apache.log4j.spi.LoggingEvent;
// Reinhard Deschler <re...@web.de>
/**
- Most of the work of the {@link org.apache.log4j.PatternLayout} class
- is delegated to the PatternParser class.
-
- <p>It is this class that parses conversion patterns and creates
- a chained list of {@link OptionConverter OptionConverters}.
-
- @author <a href=mailto:"cakalijp@Maritz.com">James P. Cakalic</a>
- @author Ceki Gülcü
- @author Anders Kristensen
-
- @since 0.8.2
-*/
+ * Most of the work of the {@link org.apache.log4j.PatternLayout} class is delegated to the PatternParser class.
+ *
+ * <p>
+ * It is this class that parses conversion patterns and creates a chained list of {@link OptionConverter
+ * OptionConverters}.
+ *
+ * @author <a href=mailto:"cakalijp@Maritz.com">James P. Cakalic</a>
+ * @author Ceki Gülcü
+ * @author Anders Kristensen
+ *
+ * @since 0.8.2
+ */
public class PatternParser {
- private static final char ESCAPE_CHAR = '%';
-
- private static final int LITERAL_STATE = 0;
- private static final int CONVERTER_STATE = 1;
- private static final int DOT_STATE = 3;
- private static final int MIN_STATE = 4;
- private static final int MAX_STATE = 5;
-
- static final int FULL_LOCATION_CONVERTER = 1000;
- static final int METHOD_LOCATION_CONVERTER = 1001;
- static final int CLASS_LOCATION_CONVERTER = 1002;
- static final int LINE_LOCATION_CONVERTER = 1003;
- static final int FILE_LOCATION_CONVERTER = 1004;
-
- static final int RELATIVE_TIME_CONVERTER = 2000;
- static final int THREAD_CONVERTER = 2001;
- static final int LEVEL_CONVERTER = 2002;
- static final int NDC_CONVERTER = 2003;
- static final int MESSAGE_CONVERTER = 2004;
-
- int state;
- protected StringBuffer currentLiteral = new StringBuffer(32);
- protected int patternLength;
- protected int i;
- PatternConverter head;
- PatternConverter tail;
- protected FormattingInfo formattingInfo = new FormattingInfo();
- protected String pattern;
-
- public
- PatternParser(String pattern) {
- this.pattern = pattern;
- patternLength = pattern.length();
- state = LITERAL_STATE;
- }
-
- private
- void addToList(PatternConverter pc) {
- if(head == null) {
- head = tail = pc;
- } else {
- tail.next = pc;
- tail = pc;
+ private static final char ESCAPE_CHAR = '%';
+
+ private static final int LITERAL_STATE = 0;
+ private static final int CONVERTER_STATE = 1;
+ private static final int DOT_STATE = 3;
+ private static final int MIN_STATE = 4;
+ private static final int MAX_STATE = 5;
+
+ static final int FULL_LOCATION_CONVERTER = 1000;
+ static final int METHOD_LOCATION_CONVERTER = 1001;
+ static final int CLASS_LOCATION_CONVERTER = 1002;
+ static final int LINE_LOCATION_CONVERTER = 1003;
+ static final int FILE_LOCATION_CONVERTER = 1004;
+
+ static final int RELATIVE_TIME_CONVERTER = 2000;
+ static final int THREAD_CONVERTER = 2001;
+ static final int LEVEL_CONVERTER = 2002;
+ static final int NDC_CONVERTER = 2003;
+ static final int MESSAGE_CONVERTER = 2004;
+
+ int state;
+ protected StringBuffer currentLiteral = new StringBuffer(32);
+ protected int patternLength;
+ protected int i;
+ PatternConverter head;
+ PatternConverter tail;
+ protected FormattingInfo formattingInfo = new FormattingInfo();
+ protected String pattern;
+
+ public PatternParser(String pattern) {
+ this.pattern = pattern;
+ patternLength = pattern.length();
+ state = LITERAL_STATE;
}
- }
-
- protected
- String extractOption() {
- if((i < patternLength) && (pattern.charAt(i) == '{')) {
- int end = pattern.indexOf('}', i);
- if (end > i) {
- String r = pattern.substring(i + 1, end);
- i = end+1;
- return r;
- }
+
+ private void addToList(PatternConverter pc) {
+ if (head == null) {
+ head = tail = pc;
+ } else {
+ tail.next = pc;
+ tail = pc;
+ }
}
- return null;
- }
-
-
- /**
- The option is expected to be in decimal and positive. In case of
- error, zero is returned. */
- protected
- int extractPrecisionOption() {
- String opt = extractOption();
- int r = 0;
- if(opt != null) {
- try {
- r = Integer.parseInt(opt);
- if(r <= 0) {
- LogLog.error(
- "Precision option (" + opt + ") isn't a positive integer.");
- r = 0;
- }
- }
- catch (NumberFormatException e) {
- LogLog.error("Category option \""+opt+"\" not a decimal integer.", e);
- }
+
+ protected String extractOption() {
+ if ((i < patternLength) && (pattern.charAt(i) == '{')) {
+ int end = pattern.indexOf('}', i);
+ if (end > i) {
+ String r = pattern.substring(i + 1, end);
+ i = end + 1;
+ return r;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * The option is expected to be in decimal and positive. In case of error, zero is returned.
+ */
+ protected int extractPrecisionOption() {
+ String opt = extractOption();
+ int r = 0;
+ if (opt != null) {
+ try {
+ r = Integer.parseInt(opt);
+ if (r <= 0) {
+ LogLog.error("Precision option (" + opt + ") isn't a positive integer.");
+ r = 0;
+ }
+ } catch (NumberFormatException e) {
+ LogLog.error("Category option \"" + opt + "\" not a decimal integer.", e);
+ }
+ }
+ return r;
}
- return r;
- }
-
- public
- PatternConverter parse() {
- char c;
- i = 0;
- while(i < patternLength) {
- c = pattern.charAt(i++);
- switch(state) {
- case LITERAL_STATE:
- // In literal state, the last char is always a literal.
- if(i == patternLength) {
- currentLiteral.append(c);
- continue;
+
+ public PatternConverter parse() {
+ char c;
+ i = 0;
+ while (i < patternLength) {
+ c = pattern.charAt(i++);
+ switch (state) {
+ case LITERAL_STATE:
+ // In literal state, the last char is always a literal.
+ if (i == patternLength) {
+ currentLiteral.append(c);
+ continue;
+ }
+ if (c == ESCAPE_CHAR) {
+ // peek at the next char.
+ switch (pattern.charAt(i)) {
+ case ESCAPE_CHAR:
+ currentLiteral.append(c);
+ i++; // move pointer
+ break;
+ case 'n':
+ currentLiteral.append(Layout.LINE_SEP);
+ i++; // move pointer
+ break;
+ default:
+ if (currentLiteral.length() != 0) {
+ addToList(new LiteralPatternConverter(currentLiteral.toString()));
+ // LogLog.debug("Parsed LITERAL converter: \""
+ // +currentLiteral+"\".");
+ }
+ currentLiteral.setLength(0);
+ currentLiteral.append(c); // append %
+ state = CONVERTER_STATE;
+ formattingInfo.reset();
+ }
+ } else {
+ currentLiteral.append(c);
+ }
+ break;
+ case CONVERTER_STATE:
+ currentLiteral.append(c);
+ switch (c) {
+ case '-':
+ formattingInfo.leftAlign = true;
+ break;
+ case '.':
+ state = DOT_STATE;
+ break;
+ default:
+ if (c >= '0' && c <= '9') {
+ formattingInfo.min = c - '0';
+ state = MIN_STATE;
+ } else
+ finalizeConverter(c);
+ } // switch
+ break;
+ case MIN_STATE:
+ currentLiteral.append(c);
+ if (c >= '0' && c <= '9')
+ formattingInfo.min = formattingInfo.min * 10 + (c - '0');
+ else if (c == '.')
+ state = DOT_STATE;
+ else {
+ finalizeConverter(c);
+ }
+ break;
+ case DOT_STATE:
+ currentLiteral.append(c);
+ if (c >= '0' && c <= '9') {
+ formattingInfo.max = c - '0';
+ state = MAX_STATE;
+ } else {
+ LogLog.error("Error occured in position " + i + ".\n Was expecting digit, instead got char \"" + c + "\".");
+ state = LITERAL_STATE;
+ }
+ break;
+ case MAX_STATE:
+ currentLiteral.append(c);
+ if (c >= '0' && c <= '9')
+ formattingInfo.max = formattingInfo.max * 10 + (c - '0');
+ else {
+ finalizeConverter(c);
+ state = LITERAL_STATE;
+ }
+ break;
+ } // switch
+ } // while
+ if (currentLiteral.length() != 0) {
+ addToList(new LiteralPatternConverter(currentLiteral.toString()));
+ // LogLog.debug("Parsed LITERAL converter: \""+currentLiteral+"\".");
}
- if(c == ESCAPE_CHAR) {
- // peek at the next char.
- switch(pattern.charAt(i)) {
- case ESCAPE_CHAR:
- currentLiteral.append(c);
- i++; // move pointer
+ return head;
+ }
+
+ protected void finalizeConverter(char c) {
+ PatternConverter pc = null;
+ switch (c) {
+ case 'c':
+ pc = new CategoryPatternConverter(formattingInfo, extractPrecisionOption());
+ // LogLog.debug("CATEGORY converter.");
+ // formattingInfo.dump();
+ currentLiteral.setLength(0);
break;
- case 'n':
- currentLiteral.append(Layout.LINE_SEP);
- i++; // move pointer
+ case 'C':
+ pc = new ClassNamePatternConverter(formattingInfo, extractPrecisionOption());
+ // LogLog.debug("CLASS_NAME converter.");
+ // formattingInfo.dump();
+ currentLiteral.setLength(0);
break;
- default:
- if(currentLiteral.length() != 0) {
- addToList(new LiteralPatternConverter(
- currentLiteral.toString()));
- //LogLog.debug("Parsed LITERAL converter: \""
- // +currentLiteral+"\".");
+ case 'd':
+ String dateFormatStr = AbsoluteTimeDateFormat.ISO8601_DATE_FORMAT;
+ DateFormat df;
+ String dOpt = extractOption();
+ if (dOpt != null)
+ dateFormatStr = dOpt;
+
+ if (dateFormatStr.equalsIgnoreCase(AbsoluteTimeDateFormat.ISO8601_DATE_FORMAT))
+ df = new ISO8601DateFormat();
+ else if (dateFormatStr.equalsIgnoreCase(AbsoluteTimeDateFormat.ABS_TIME_DATE_FORMAT))
+ df = new AbsoluteTimeDateFormat();
+ else if (dateFormatStr.equalsIgnoreCase(AbsoluteTimeDateFormat.DATE_AND_TIME_DATE_FORMAT))
+ df = new DateTimeDateFormat();
+ else {
+ try {
+ df = new SimpleDateFormat(dateFormatStr);
+ } catch (IllegalArgumentException e) {
+ LogLog.error("Could not instantiate SimpleDateFormat with " + dateFormatStr, e);
+ df = (DateFormat) OptionConverter.instantiateByClassName("org.apache.log4j.helpers.ISO8601DateFormat", DateFormat.class, null);
+ }
}
+ pc = new DatePatternConverter(formattingInfo, df);
+ // LogLog.debug("DATE converter {"+dateFormatStr+"}.");
+ // formattingInfo.dump();
+ currentLiteral.setLength(0);
+ break;
+ case 'F':
+ pc = new LocationPatternConverter(formattingInfo, FILE_LOCATION_CONVERTER);
+ // LogLog.debug("File name converter.");
+ // formattingInfo.dump();
+ currentLiteral.setLength(0);
+ break;
+ case 'l':
+ pc = new LocationPatternConverter(formattingInfo, FULL_LOCATION_CONVERTER);
+ // LogLog.debug("Location converter.");
+ // formattingInfo.dump();
+ currentLiteral.setLength(0);
+ break;
+ case 'L':
+ pc = new LocationPatternConverter(formattingInfo, LINE_LOCATION_CONVERTER);
+ // LogLog.debug("LINE NUMBER converter.");
+ // formattingInfo.dump();
+ currentLiteral.setLength(0);
+ break;
+ case 'm':
+ pc = new BasicPatternConverter(formattingInfo, MESSAGE_CONVERTER);
+ // LogLog.debug("MESSAGE converter.");
+ // formattingInfo.dump();
+ currentLiteral.setLength(0);
+ break;
+ case 'M':
+ pc = new LocationPatternConverter(formattingInfo, METHOD_LOCATION_CONVERTER);
+ // LogLog.debug("METHOD converter.");
+ // formattingInfo.dump();
+ currentLiteral.setLength(0);
+ break;
+ case 'p':
+ pc = new BasicPatternConverter(formattingInfo, LEVEL_CONVERTER);
+ // LogLog.debug("LEVEL converter.");
+ // formattingInfo.dump();
+ currentLiteral.setLength(0);
+ break;
+ case 'r':
+ pc = new BasicPatternConverter(formattingInfo, RELATIVE_TIME_CONVERTER);
+ // LogLog.debug("RELATIVE time converter.");
+ // formattingInfo.dump();
+ currentLiteral.setLength(0);
+ break;
+ case 't':
+ pc = new BasicPatternConverter(formattingInfo, THREAD_CONVERTER);
+ // LogLog.debug("THREAD converter.");
+ // formattingInfo.dump();
+ currentLiteral.setLength(0);
+ break;
+ /*
+ * case 'u': if(i < patternLength) { char cNext = pattern.charAt(i); if(cNext >= '0' && cNext <= '9') { pc = new
+ * UserFieldPatternConverter(formattingInfo, cNext - '0'); LogLog.debug("USER converter ["+cNext+"].");
+ * formattingInfo.dump(); currentLiteral.setLength(0); i++; } else LogLog.error("Unexpected char"
+ * +cNext+" at position "+i); } break;
+ */
+ case 'x':
+ pc = new BasicPatternConverter(formattingInfo, NDC_CONVERTER);
+ // LogLog.debug("NDC converter.");
+ currentLiteral.setLength(0);
+ break;
+ case 'X':
+ String xOpt = extractOption();
+ pc = new MDCPatternConverter(formattingInfo, xOpt);
+ currentLiteral.setLength(0);
+ break;
+ default:
+ LogLog.error("Unexpected char [" + c + "] at position " + i + " in conversion patterrn.");
+ pc = new LiteralPatternConverter(currentLiteral.toString());
currentLiteral.setLength(0);
- currentLiteral.append(c); // append %
- state = CONVERTER_STATE;
- formattingInfo.reset();
- }
- }
- else {
- currentLiteral.append(c);
}
- break;
- case CONVERTER_STATE:
- currentLiteral.append(c);
- switch(c) {
- case '-':
- formattingInfo.leftAlign = true;
- break;
- case '.':
- state = DOT_STATE;
- break;
- default:
- if(c >= '0' && c <= '9') {
- formattingInfo.min = c - '0';
- state = MIN_STATE;
- }
- else
- finalizeConverter(c);
- } // switch
- break;
- case MIN_STATE:
- currentLiteral.append(c);
- if(c >= '0' && c <= '9')
- formattingInfo.min = formattingInfo.min*10 + (c - '0');
- else if(c == '.')
- state = DOT_STATE;
- else {
- finalizeConverter(c);
- }
- break;
- case DOT_STATE:
- currentLiteral.append(c);
- if(c >= '0' && c <= '9') {
- formattingInfo.max = c - '0';
- state = MAX_STATE;
- }
- else {
- LogLog.error("Error occured in position "+i
- +".\n Was expecting digit, instead got char \""+c+"\".");
- state = LITERAL_STATE;
- }
- break;
- case MAX_STATE:
- currentLiteral.append(c);
- if(c >= '0' && c <= '9')
- formattingInfo.max = formattingInfo.max*10 + (c - '0');
- else {
- finalizeConverter(c);
- state = LITERAL_STATE;
- }
- break;
- } // switch
- } // while
- if(currentLiteral.length() != 0) {
- addToList(new LiteralPatternConverter(currentLiteral.toString()));
- //LogLog.debug("Parsed LITERAL converter: \""+currentLiteral+"\".");
- }
- return head;
- }
-
- protected
- void finalizeConverter(char c) {
- PatternConverter pc = null;
- switch(c) {
- case 'c':
- pc = new CategoryPatternConverter(formattingInfo,
- extractPrecisionOption());
- //LogLog.debug("CATEGORY converter.");
- //formattingInfo.dump();
- currentLiteral.setLength(0);
- break;
- case 'C':
- pc = new ClassNamePatternConverter(formattingInfo,
- extractPrecisionOption());
- //LogLog.debug("CLASS_NAME converter.");
- //formattingInfo.dump();
- currentLiteral.setLength(0);
- break;
- case 'd':
- String dateFormatStr = AbsoluteTimeDateFormat.ISO8601_DATE_FORMAT;
- DateFormat df;
- String dOpt = extractOption();
- if(dOpt != null)
- dateFormatStr = dOpt;
-
- if(dateFormatStr.equalsIgnoreCase(
- AbsoluteTimeDateFormat.ISO8601_DATE_FORMAT))
- df = new ISO8601DateFormat();
- else if(dateFormatStr.equalsIgnoreCase(
- AbsoluteTimeDateFormat.ABS_TIME_DATE_FORMAT))
- df = new AbsoluteTimeDateFormat();
- else if(dateFormatStr.equalsIgnoreCase(
- AbsoluteTimeDateFormat.DATE_AND_TIME_DATE_FORMAT))
- df = new DateTimeDateFormat();
- else {
- try {
- df = new SimpleDateFormat(dateFormatStr);
- }
- catch (IllegalArgumentException e) {
- LogLog.error("Could not instantiate SimpleDateFormat with " +
- dateFormatStr, e);
- df = (DateFormat) OptionConverter.instantiateByClassName(
- "org.apache.log4j.helpers.ISO8601DateFormat",
- DateFormat.class, null);
- }
- }
- pc = new DatePatternConverter(formattingInfo, df);
- //LogLog.debug("DATE converter {"+dateFormatStr+"}.");
- //formattingInfo.dump();
- currentLiteral.setLength(0);
- break;
- case 'F':
- pc = new LocationPatternConverter(formattingInfo,
- FILE_LOCATION_CONVERTER);
- //LogLog.debug("File name converter.");
- //formattingInfo.dump();
- currentLiteral.setLength(0);
- break;
- case 'l':
- pc = new LocationPatternConverter(formattingInfo,
- FULL_LOCATION_CONVERTER);
- //LogLog.debug("Location converter.");
- //formattingInfo.dump();
- currentLiteral.setLength(0);
- break;
- case 'L':
- pc = new LocationPatternConverter(formattingInfo,
- LINE_LOCATION_CONVERTER);
- //LogLog.debug("LINE NUMBER converter.");
- //formattingInfo.dump();
- currentLiteral.setLength(0);
- break;
- case 'm':
- pc = new BasicPatternConverter(formattingInfo, MESSAGE_CONVERTER);
- //LogLog.debug("MESSAGE converter.");
- //formattingInfo.dump();
- currentLiteral.setLength(0);
- break;
- case 'M':
- pc = new LocationPatternConverter(formattingInfo,
- METHOD_LOCATION_CONVERTER);
- //LogLog.debug("METHOD converter.");
- //formattingInfo.dump();
- currentLiteral.setLength(0);
- break;
- case 'p':
- pc = new BasicPatternConverter(formattingInfo, LEVEL_CONVERTER);
- //LogLog.debug("LEVEL converter.");
- //formattingInfo.dump();
- currentLiteral.setLength(0);
- break;
- case 'r':
- pc = new BasicPatternConverter(formattingInfo,
- RELATIVE_TIME_CONVERTER);
- //LogLog.debug("RELATIVE time converter.");
- //formattingInfo.dump();
- currentLiteral.setLength(0);
- break;
- case 't':
- pc = new BasicPatternConverter(formattingInfo, THREAD_CONVERTER);
- //LogLog.debug("THREAD converter.");
- //formattingInfo.dump();
- currentLiteral.setLength(0);
- break;
- /*case 'u':
- if(i < patternLength) {
- char cNext = pattern.charAt(i);
- if(cNext >= '0' && cNext <= '9') {
- pc = new UserFieldPatternConverter(formattingInfo, cNext - '0');
- LogLog.debug("USER converter ["+cNext+"].");
- formattingInfo.dump();
- currentLiteral.setLength(0);
- i++;
- }
- else
- LogLog.error("Unexpected char" +cNext+" at position "+i);
- }
- break;*/
- case 'x':
- pc = new BasicPatternConverter(formattingInfo, NDC_CONVERTER);
- //LogLog.debug("NDC converter.");
- currentLiteral.setLength(0);
- break;
- case 'X':
- String xOpt = extractOption();
- pc = new MDCPatternConverter(formattingInfo, xOpt);
- currentLiteral.setLength(0);
- break;
- default:
- LogLog.error("Unexpected char [" +c+"] at position "+i
- +" in conversion patterrn.");
- pc = new LiteralPatternConverter(currentLiteral.toString());
- currentLiteral.setLength(0);
- }
- addConverter(pc);
- }
-
- protected
- void addConverter(PatternConverter pc) {
- currentLiteral.setLength(0);
- // Add the pattern converter to the list.
- addToList(pc);
- // Next pattern is assumed to be a literal.
- state = LITERAL_STATE;
- // Reset formatting info
- formattingInfo.reset();
- }
-
- // ---------------------------------------------------------------------
- // PatternConverters
- // ---------------------------------------------------------------------
-
- private static class BasicPatternConverter extends PatternConverter {
- int type;
-
- BasicPatternConverter(FormattingInfo formattingInfo, int type) {
- super(formattingInfo);
- this.type = type;
+ addConverter(pc);
}
- public
- String convert(LoggingEvent event) {
- switch(type) {
- case RELATIVE_TIME_CONVERTER:
- return (Long.toString(event.timeStamp - LoggingEvent.getStartTime()));
- case THREAD_CONVERTER:
- return event.getThreadName();
- case LEVEL_CONVERTER:
- return event.getLevel().toString();
- case NDC_CONVERTER:
- return event.getNDC();
- case MESSAGE_CONVERTER: {
- return event.getRenderedMessage();
- }
- default: return null;
- }
+ protected void addConverter(PatternConverter pc) {
+ currentLiteral.setLength(0);
+ // Add the pattern converter to the list.
+ addToList(pc);
+ // Next pattern is assumed to be a literal.
+ state = LITERAL_STATE;
+ // Reset formatting info
+ formattingInfo.reset();
}
- }
- private static class LiteralPatternConverter extends PatternConverter {
- private String literal;
+ // ---------------------------------------------------------------------
+ // PatternConverters
+ // ---------------------------------------------------------------------
- LiteralPatternConverter(String value) {
- literal = value;
- }
+ private static class BasicPatternConverter extends PatternConverter {
+ int type;
- public
- final
- void format(StringBuffer sbuf, LoggingEvent event) {
- sbuf.append(literal);
- }
+ BasicPatternConverter(FormattingInfo formattingInfo, int type) {
+ super(formattingInfo);
+ this.type = type;
+ }
- public
- String convert(LoggingEvent event) {
- return literal;
+ public String convert(LoggingEvent event) {
+ switch (type) {
+ case RELATIVE_TIME_CONVERTER:
+ return (Long.toString(event.timeStamp - LoggingEvent.getStartTime()));
+ case THREAD_CONVERTER:
+ return event.getThreadName();
+ case LEVEL_CONVERTER:
+ return event.getLevel().toString();
+ case NDC_CONVERTER:
+ return event.getNDC();
+ case MESSAGE_CONVERTER: {
+ return event.getRenderedMessage();
+ }
+ default:
+ return null;
+ }
+ }
}
- }
- private static class DatePatternConverter extends PatternConverter {
- private DateFormat df;
- private Date date;
+ private static class LiteralPatternConverter extends PatternConverter {
+ private String literal;
- DatePatternConverter(FormattingInfo formattingInfo, DateFormat df) {
- super(formattingInfo);
- date = new Date();
- this.df = df;
- }
+ LiteralPatternConverter(String value) {
+ literal = value;
+ }
+
+ public final void format(StringBuffer sbuf, LoggingEvent event) {
+ sbuf.append(literal);
+ }
- public
- String convert(LoggingEvent event) {
- date.setTime(event.timeStamp);
- String converted = null;
- try {
- converted = df.format(date);
- }
- catch (Exception ex) {
- LogLog.error("Error occured while converting date.", ex);
- }
- return converted;
+ public String convert(LoggingEvent event) {
+ return literal;
+ }
}
- }
- private static class MDCPatternConverter extends PatternConverter {
- private String key;
+ private static class DatePatternConverter extends PatternConverter {
+ private DateFormat df;
+ private Date date;
- MDCPatternConverter(FormattingInfo formattingInfo, String key) {
- super(formattingInfo);
- this.key = key;
- }
+ DatePatternConverter(FormattingInfo formattingInfo, DateFormat df) {
+ super(formattingInfo);
+ date = new Date();
+ this.df = df;
+ }
- public
- String convert(LoggingEvent event) {
- if (key == null) {
- StringBuffer buf = new StringBuffer("{");
- Map properties = event.getProperties();
- if (properties.size() > 0) {
- Object[] keys = properties.keySet().toArray();
- Arrays.sort(keys);
- for (int i = 0; i < keys.length; i++) {
- buf.append('{');
- buf.append(keys[i]);
- buf.append(',');
- buf.append(properties.get(keys[i]));
- buf.append('}');
+ public String convert(LoggingEvent event) {
+ date.setTime(event.timeStamp);
+ String converted = null;
+ try {
+ converted = df.format(date);
+ } catch (Exception ex) {
+ LogLog.error("Error occured while converting date.", ex);
}
- }
- buf.append('}');
- return buf.toString();
- } else {
- Object val = event.getMDC(key);
- if(val == null) {
- return null;
- } else {
- return val.toString();
+ return converted;
}
- }
}
- }
+ private static class MDCPatternConverter extends PatternConverter {
+ private String key;
- private class LocationPatternConverter extends PatternConverter {
- int type;
+ MDCPatternConverter(FormattingInfo formattingInfo, String key) {
+ super(formattingInfo);
+ this.key = key;
+ }
- LocationPatternConverter(FormattingInfo formattingInfo, int type) {
- super(formattingInfo);
- this.type = type;
+ public String convert(LoggingEvent event) {
+ if (key == null) {
+ StringBuffer buf = new StringBuffer("{");
+ Map properties = event.getProperties();
+ if (properties.size() > 0) {
+ Object[] keys = properties.keySet().toArray();
+ Arrays.sort(keys);
+ for (int i = 0; i < keys.length; i++) {
+ buf.append('{');
+ buf.append(keys[i]);
+ buf.append(',');
+ buf.append(properties.get(keys[i]));
+ buf.append('}');
+ }
+ }
+ buf.append('}');
+ return buf.toString();
+ } else {
+ Object val = event.getMDC(key);
+ if (val == null) {
+ return null;
+ } else {
+ return val.toString();
+ }
+ }
+ }
}
- public
- String convert(LoggingEvent event) {
- LocationInfo locationInfo = event.getLocationInformation();
- switch(type) {
- case FULL_LOCATION_CONVERTER:
- return locationInfo.fullInfo;
- case METHOD_LOCATION_CONVERTER:
- return locationInfo.getMethodName();
- case LINE_LOCATION_CONVERTER:
- return locationInfo.getLineNumber();
- case FILE_LOCATION_CONVERTER:
- return locationInfo.getFileName();
- default: return null;
- }
- }
- }
+ private class LocationPatternConverter extends PatternConverter {
+ int type;
- private static abstract class NamedPatternConverter extends PatternConverter {
- int precision;
+ LocationPatternConverter(FormattingInfo formattingInfo, int type) {
+ super(formattingInfo);
+ this.type = type;
+ }
- NamedPatternConverter(FormattingInfo formattingInfo, int precision) {
- super(formattingInfo);
- this.precision = precision;
+ public String convert(LoggingEvent event) {
+ LocationInfo locationInfo = event.getLocationInformation();
+ switch (type) {
+ case FULL_LOCATION_CONVERTER:
+ return locationInfo.fullInfo;
+ case METHOD_LOCATION_CONVERTER:
+ return locationInfo.getMethodName();
+ case LINE_LOCATION_CONVERTER:
+ return locationInfo.getLineNumber();
+ case FILE_LOCATION_CONVERTER:
+ return locationInfo.getFileName();
+ default:
+ return null;
+ }
+ }
}
- abstract
- String getFullyQualifiedName(LoggingEvent event);
-
- public
- String convert(LoggingEvent event) {
- String n = getFullyQualifiedName(event);
- if(precision <= 0)
- return n;
- else {
- int len = n.length();
-
- // We substract 1 from 'len' when assigning to 'end' to avoid out of
- // bounds exception in return r.substring(end+1, len). This can happen if
- // precision is 1 and the category name ends with a dot.
- int end = len -1 ;
- for(int i = precision; i > 0; i--) {
- end = n.lastIndexOf('.', end-1);
- if(end == -1)
- return n;
- }
- return n.substring(end+1, len);
- }
- }
- }
+ private static abstract class NamedPatternConverter extends PatternConverter {
+ int precision;
- private class ClassNamePatternConverter extends NamedPatternConverter {
+ NamedPatternConverter(FormattingInfo formattingInfo, int precision) {
+ super(formattingInfo);
+ this.precision = precision;
+ }
- ClassNamePatternConverter(FormattingInfo formattingInfo, int precision) {
- super(formattingInfo, precision);
+ abstract String getFullyQualifiedName(LoggingEvent event);
+
+ public String convert(LoggingEvent event) {
+ String n = getFullyQualifiedName(event);
+ if (precision <= 0)
+ return n;
+ else {
+ int len = n.length();
+
+ // We substract 1 from 'len' when assigning to 'end' to avoid out of
+ // bounds exception in return r.substring(end+1, len). This can happen if
+ // precision is 1 and the category name ends with a dot.
+ int end = len - 1;
+ for (int i = precision; i > 0; i--) {
+ end = n.lastIndexOf('.', end - 1);
+ if (end == -1)
+ return n;
+ }
+ return n.substring(end + 1, len);
+ }
+ }
}
- String getFullyQualifiedName(LoggingEvent event) {
- return event.getLocationInformation().getClassName();
- }
- }
+ private class ClassNamePatternConverter extends NamedPatternConverter {
- private class CategoryPatternConverter extends NamedPatternConverter {
+ ClassNamePatternConverter(FormattingInfo formattingInfo, int precision) {
+ super(formattingInfo, precision);
+ }
- CategoryPatternConverter(FormattingInfo formattingInfo, int precision) {
- super(formattingInfo, precision);
+ String getFullyQualifiedName(LoggingEvent event) {
+ return event.getLocationInformation().getClassName();
+ }
}
- String getFullyQualifiedName(LoggingEvent event) {
- return event.getLoggerName();
+ private class CategoryPatternConverter extends NamedPatternConverter {
+
+ CategoryPatternConverter(FormattingInfo formattingInfo, int precision) {
+ super(formattingInfo, precision);
+ }
+
+ String getFullyQualifiedName(LoggingEvent event) {
+ return event.getLoggerName();
+ }
}
- }
}
-
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/helpers/QuietWriter.java b/log4j-1.2-api/src/main/java/org/apache/log4j/helpers/QuietWriter.java
index 1b33ff3..42120d9 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/helpers/QuietWriter.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/helpers/QuietWriter.java
@@ -37,6 +37,7 @@ public class QuietWriter extends FilterWriter {
setErrorHandler(errorHandler);
}
+ @Override
public void write(String string) {
if (string != null) {
try {
@@ -48,6 +49,7 @@ public class QuietWriter extends FilterWriter {
}
}
+ @Override
public void flush() {
try {
out.flush();
@@ -62,8 +64,7 @@ public class QuietWriter extends FilterWriter {
if (eh == null) {
// This is a programming error on the part of the enclosing appender.
throw new IllegalArgumentException("Attempted to set null ErrorHandler.");
- } else {
- this.errorHandler = eh;
}
+ this.errorHandler = eh;
}
}
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/layout/Log4j1XmlLayout.java b/log4j-1.2-api/src/main/java/org/apache/log4j/layout/Log4j1XmlLayout.java
index 420c455..0f39a9c 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/layout/Log4j1XmlLayout.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/layout/Log4j1XmlLayout.java
@@ -20,6 +20,7 @@ import java.io.PrintWriter;
import java.io.StringWriter;
import java.nio.charset.StandardCharsets;
import java.util.List;
+import java.util.Objects;
import org.apache.logging.log4j.core.Layout;
import org.apache.logging.log4j.core.LogEvent;
@@ -30,7 +31,6 @@ import org.apache.logging.log4j.plugins.Node;
import org.apache.logging.log4j.plugins.Plugin;
import org.apache.logging.log4j.plugins.PluginAttribute;
import org.apache.logging.log4j.plugins.PluginFactory;
-import org.apache.logging.log4j.util.BiConsumer;
import org.apache.logging.log4j.util.ReadOnlyStringMap;
import org.apache.logging.log4j.util.Strings;
@@ -42,14 +42,17 @@ import org.apache.logging.log4j.util.Strings;
@Plugin(name = "Log4j1XmlLayout", category = Node.CATEGORY, elementType = Layout.ELEMENT_TYPE, printObject = true)
public final class Log4j1XmlLayout extends AbstractStringLayout {
+ /** We yield to the \r\n heresy. */
+ private static final String EOL = "\r\n";
+
private final boolean locationInfo;
private final boolean properties;
@PluginFactory
public static Log4j1XmlLayout createLayout(
// @formatter:off
- @PluginAttribute final boolean locationInfo,
- @PluginAttribute final boolean properties
+ @PluginAttribute(value = "locationInfo") final boolean locationInfo,
+ @PluginAttribute(value = "properties") final boolean properties
// @formatter:on
) {
return new Log4j1XmlLayout(locationInfo, properties);
@@ -84,8 +87,6 @@ public final class Log4j1XmlLayout extends AbstractStringLayout {
}
private void formatTo(final LogEvent event, final StringBuilder buf) {
- // We yield to the \r\n heresy.
-
buf.append("<log4j:event logger=\"");
buf.append(Transform.escapeHtmlTags(event.getLoggerName()));
buf.append("\" timestamp=\"");
@@ -94,18 +95,21 @@ public final class Log4j1XmlLayout extends AbstractStringLayout {
buf.append(Transform.escapeHtmlTags(String.valueOf(event.getLevel())));
buf.append("\" thread=\"");
buf.append(Transform.escapeHtmlTags(event.getThreadName()));
- buf.append("\">\r\n");
+ buf.append("\">");
+ buf.append(EOL);
buf.append("<log4j:message><![CDATA[");
// Append the rendered message. Also make sure to escape any existing CDATA sections.
Transform.appendEscapingCData(buf, event.getMessage().getFormattedMessage());
- buf.append("]]></log4j:message>\r\n");
+ buf.append("]]></log4j:message>");
+ buf.append(EOL);
final List<String> ndc = event.getContextStack().asList();
if (!ndc.isEmpty()) {
buf.append("<log4j:NDC><![CDATA[");
Transform.appendEscapingCData(buf, Strings.join(ndc, ' '));
- buf.append("]]></log4j:NDC>\r\n");
+ buf.append("]]></log4j:NDC>");
+ buf.append(EOL);
}
@SuppressWarnings("ThrowableResultOfMethodCallIgnored")
@@ -115,7 +119,8 @@ public final class Log4j1XmlLayout extends AbstractStringLayout {
final StringWriter w = new StringWriter();
thrown.printStackTrace(new PrintWriter(w));
Transform.appendEscapingCData(buf, w.toString());
- buf.append("]]></log4j:throwable>\r\n");
+ buf.append("]]></log4j:throwable>");
+ buf.append(EOL);
}
if (locationInfo) {
@@ -129,7 +134,8 @@ public final class Log4j1XmlLayout extends AbstractStringLayout {
buf.append(Transform.escapeHtmlTags(source.getFileName()));
buf.append("\" line=\"");
buf.append(source.getLineNumber());
- buf.append("\"/>\r\n");
+ buf.append("\"/>");
+ buf.append(EOL);
}
}
@@ -137,20 +143,24 @@ public final class Log4j1XmlLayout extends AbstractStringLayout {
final ReadOnlyStringMap contextMap = event.getContextData();
if (!contextMap.isEmpty()) {
buf.append("<log4j:properties>\r\n");
- contextMap.forEach((BiConsumer<String, String>) (key, val) -> {
+ contextMap.forEach((key, val) -> {
if (val != null) {
buf.append("<log4j:data name=\"");
buf.append(Transform.escapeHtmlTags(key));
buf.append("\" value=\"");
- buf.append(Transform.escapeHtmlTags(val));
- buf.append("\"/>\r\n");
+ buf.append(Transform.escapeHtmlTags(Objects.toString(val, null)));
+ buf.append("\"/>");
+ buf.append(EOL);
}
});
- buf.append("</log4j:properties>\r\n");
+ buf.append("</log4j:properties>");
+ buf.append(EOL);
}
}
- buf.append("</log4j:event>\r\n\r\n");
+ buf.append("</log4j:event>");
+ buf.append(EOL);
+ buf.append(EOL);
}
}
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/or/ThreadGroupRenderer.java b/log4j-1.2-api/src/main/java/org/apache/log4j/or/ThreadGroupRenderer.java
index 08233bf..959d927 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/or/ThreadGroupRenderer.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/or/ThreadGroupRenderer.java
@@ -22,6 +22,7 @@ import org.apache.log4j.Layout;
*/
public class ThreadGroupRenderer implements ObjectRenderer {
+ @Override
public
String doRender(Object obj) {
if(obj instanceof ThreadGroup) {
@@ -45,13 +46,12 @@ public class ThreadGroupRenderer implements ObjectRenderer {
sb.append("]");
}
return sb.toString();
- } else {
- try {
- // this is the best we can do
- return obj.toString();
- } catch(Exception ex) {
- return ex.toString();
- }
+ }
+ try {
+ // this is the best we can do
+ return obj.toString();
+ } catch(Exception ex) {
+ return ex.toString();
}
}
}
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/pattern/Log4j1MdcPatternConverter.java b/log4j-1.2-api/src/main/java/org/apache/log4j/pattern/Log4j1MdcPatternConverter.java
index 0d82aa6..13b7266 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/pattern/Log4j1MdcPatternConverter.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/pattern/Log4j1MdcPatternConverter.java
@@ -79,5 +79,5 @@ public final class Log4j1MdcPatternConverter extends LogEventPatternConverter {
}
}
- private static final TriConsumer<String, Object, StringBuilder> APPEND_EACH = (key, value, toAppendTo) -> toAppendTo.append('{').append(key).append(',').append(value).append('}');
+ private static TriConsumer<String, Object, StringBuilder> APPEND_EACH = (key, value, toAppendTo) -> toAppendTo.append('{').append(key).append(',').append(value).append('}');
}
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/rewrite/MapRewritePolicy.java b/log4j-1.2-api/src/main/java/org/apache/log4j/rewrite/MapRewritePolicy.java
index 9cd42a1..f16ed38 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/rewrite/MapRewritePolicy.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/rewrite/MapRewritePolicy.java
@@ -44,11 +44,13 @@ import org.apache.logging.log4j.util.SortedArrayStringMap;
* <p>
* The combination of the RewriteAppender and this policy
* performs the same actions as the MapFilter from log4j 1.3.
+ * </p>
*/
public class MapRewritePolicy implements RewritePolicy {
/**
* {@inheritDoc}
*/
+ @Override
public LoggingEvent rewrite(final LoggingEvent source) {
Object msg = source.getMessage();
if (msg instanceof MapMessage || msg instanceof Map) {
@@ -105,9 +107,8 @@ public class MapRewritePolicy implements RewritePolicy {
.build();
}
return new LogEventAdapter(event);
- } else {
- return source;
}
+ return source;
}
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/rewrite/PropertyRewritePolicy.java b/log4j-1.2-api/src/main/java/org/apache/log4j/rewrite/PropertyRewritePolicy.java
index ab9b2b2..a84deac 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/rewrite/PropertyRewritePolicy.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/rewrite/PropertyRewritePolicy.java
@@ -37,8 +37,8 @@ import org.apache.logging.log4j.util.SortedArrayStringMap;
* <p>
* The combination of the RewriteAppender and this policy
* performs the same actions as the PropertyFilter from log4j 1.3.
+ * </p>
*/
-
public class PropertyRewritePolicy implements RewritePolicy {
private Map<String, String> properties = Collections.EMPTY_MAP;
@@ -48,25 +48,30 @@ public class PropertyRewritePolicy implements RewritePolicy {
/**
* Set a string representing the property name/value pairs.
* <p>
- * Form: propname1=propvalue1,propname2=propvalue2
+ * Form:
+ * </p>
+ * <pre>
+ * propname1=propvalue1,propname2=propvalue2
+ * </pre>
*
- * @param props The properties.
+ * @param properties The properties.
*/
- public void setProperties(String props) {
- Map hashTable = new HashMap();
- StringTokenizer pairs = new StringTokenizer(props, ",");
+ public void setProperties(String properties) {
+ Map<String, String> newMap = new HashMap<>();
+ StringTokenizer pairs = new StringTokenizer(properties, ",");
while (pairs.hasMoreTokens()) {
StringTokenizer entry = new StringTokenizer(pairs.nextToken(), "=");
- hashTable.put(entry.nextElement().toString().trim(), entry.nextElement().toString().trim());
+ newMap.put(entry.nextElement().toString().trim(), entry.nextElement().toString().trim());
}
synchronized (this) {
- properties = hashTable;
+ this.properties = newMap;
}
}
/**
* {@inheritDoc}
*/
+ @Override
public LoggingEvent rewrite(final LoggingEvent source) {
if (!properties.isEmpty()) {
Map<String, String> rewriteProps = source.getProperties() != null ? new HashMap<>(source.getProperties())
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/spi/ThrowableInformation.java b/log4j-1.2-api/src/main/java/org/apache/log4j/spi/ThrowableInformation.java
index cf0002c..2b46dd5 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/spi/ThrowableInformation.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/spi/ThrowableInformation.java
@@ -21,7 +21,7 @@ import java.lang.reflect.Method;
import java.util.List;
import org.apache.log4j.Category;
-import org.apache.logging.log4j.core.util.Throwables;
+import org.apache.logging.log4j.util.Strings;
/**
* Log4j's internal representation of throwables.
@@ -59,7 +59,7 @@ public class ThrowableInformation implements Serializable {
/**
* Constructs new instance.
*/
- public ThrowableInformation(Throwable throwable) {
+ public ThrowableInformation(final Throwable throwable) {
this.throwable = throwable;
}
@@ -76,8 +76,7 @@ public class ThrowableInformation implements Serializable {
this.rep = null;
}
- public
- Throwable getThrowable() {
+ public Throwable getThrowable() {
return throwable;
}
@@ -87,7 +86,7 @@ public class ThrowableInformation implements Serializable {
@SuppressWarnings("unchecked")
final List<String> elements = (List<String>) TO_STRING_LIST.invoke(null, throwable);
if (elements != null) {
- return elements.toArray(new String[0]);
+ return elements.toArray(Strings.EMPTY_ARRAY);
}
} catch (final ReflectiveOperationException ex) {
// Ignore the exception.
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/xml/Log4jEntityResolver.java b/log4j-1.2-api/src/main/java/org/apache/log4j/xml/Log4jEntityResolver.java
index edda022..9c9226b 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/xml/Log4jEntityResolver.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/xml/Log4jEntityResolver.java
@@ -17,14 +17,15 @@
package org.apache.log4j.xml;
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.status.StatusLogger;
+import org.apache.logging.log4j.util.Constants;
import org.xml.sax.EntityResolver;
import org.xml.sax.InputSource;
-import java.io.ByteArrayInputStream;
-import java.io.InputStream;
-
/**
* An {@link EntityResolver} specifically designed to return
* <code>log4j.dtd</code> which is embedded within the log4j jar
@@ -34,18 +35,18 @@ public class Log4jEntityResolver implements EntityResolver {
private static final Logger LOGGER = StatusLogger.getLogger();
private static final String PUBLIC_ID = "-//APACHE//DTD LOG4J 1.2//EN";
+ @Override
public InputSource resolveEntity(String publicId, String systemId) {
if (systemId.endsWith("log4j.dtd") || PUBLIC_ID.equals(publicId)) {
- Class clazz = getClass();
+ Class<?> clazz = getClass();
InputStream in = clazz.getResourceAsStream("/org/apache/log4j/xml/log4j.dtd");
if (in == null) {
LOGGER.warn("Could not find [log4j.dtd] using [{}] class loader, parsed without DTD.",
clazz.getClassLoader());
- in = new ByteArrayInputStream(new byte[0]);
+ in = new ByteArrayInputStream(Constants.EMPTY_BYTE_ARRAY);
}
return new InputSource(in);
- } else {
- return null;
}
+ return null;
}
}
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/xml/UnrecognizedElementHandler.java b/log4j-1.2-api/src/main/java/org/apache/log4j/xml/UnrecognizedElementHandler.java
index 44c832a..81e290b 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/xml/UnrecognizedElementHandler.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/xml/UnrecognizedElementHandler.java
@@ -40,4 +40,4 @@ public interface UnrecognizedElementHandler {
* of the configured object.
*/
boolean parseUnrecognizedElement(Element element, Properties props) throws Exception;
-}
+}
\ No newline at end of file
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/xml/XmlConfiguration.java b/log4j-1.2-api/src/main/java/org/apache/log4j/xml/XmlConfiguration.java
index dc8e940..50c355b 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/xml/XmlConfiguration.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/xml/XmlConfiguration.java
@@ -16,13 +16,13 @@
*/
package org.apache.log4j.xml;
-
import java.io.IOException;
import java.io.InterruptedIOException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
+import java.util.concurrent.atomic.AtomicReference;
import java.util.function.Consumer;
import java.util.stream.IntStream;
@@ -36,7 +36,6 @@ import org.apache.log4j.Level;
import org.apache.log4j.bridge.AppenderAdapter;
import org.apache.log4j.bridge.AppenderWrapper;
import org.apache.log4j.bridge.FilterAdapter;
-import org.apache.log4j.builders.Holder;
import org.apache.log4j.config.Log4j1Configuration;
import org.apache.log4j.config.PropertySetter;
import org.apache.log4j.helpers.OptionConverter;
@@ -44,8 +43,8 @@ import org.apache.log4j.rewrite.RewritePolicy;
import org.apache.log4j.spi.AppenderAttachable;
import org.apache.log4j.spi.ErrorHandler;
import org.apache.log4j.spi.Filter;
-import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.core.Filter.Result;
+import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.core.config.Configuration;
import org.apache.logging.log4j.core.config.ConfigurationSource;
import org.apache.logging.log4j.core.config.LoggerConfig;
@@ -93,11 +92,12 @@ public class XmlConfiguration extends Log4j1Configuration {
private static final String INTERNAL_DEBUG_ATTR = "debug";
private static final String THRESHOLD_ATTR = "threshold";
private static final String EMPTY_STR = "";
- private static final Class[] ONE_STRING_PARAM = new Class[]{String.class};
+ private static final Class<?>[] ONE_STRING_PARAM = new Class[] { String.class };
private static final String dbfKey = "javax.xml.parsers.DocumentBuilderFactory";
private static final String THROWABLE_RENDERER_TAG = "throwableRenderer";
public static final long DEFAULT_DELAY = 60000;
+
/**
* File name prefix for test configurations.
*/
@@ -124,19 +124,22 @@ public class XmlConfiguration extends Log4j1Configuration {
}
/**
- * Configure log4j by reading in a log4j.dtd compliant XML
+ * Configures log4j by reading in a log4j.dtd compliant XML
* configuration file.
*/
@Override
public void doConfigure() throws FactoryConfigurationError {
ConfigurationSource source = getConfigurationSource();
ParseAction action = new ParseAction() {
+ @Override
public Document parse(final DocumentBuilder parser) throws SAXException, IOException {
+ @SuppressWarnings("resource") // The ConfigurationSource and its caller manages the InputStream.
InputSource inputSource = new InputSource(source.getInputStream());
inputSource.setSystemId("dummy://log4j.dtd");
return parser.parse(inputSource);
}
+ @Override
public String toString() {
return getConfigurationSource().getLocation();
}
@@ -319,36 +322,31 @@ public class XmlConfiguration extends Log4j1Configuration {
if (appender != null) {
return appender;
- } else {
- // Doesn't work on DOM Level 1 :
- // Element element = doc.getElementById(appenderName);
-
- // Endre's hack:
- Element element = null;
- NodeList list = doc.getElementsByTagName("appender");
- for (int t = 0; t < list.getLength(); t++) {
- Node node = list.item(t);
- NamedNodeMap map = node.getAttributes();
- Node attrNode = map.getNamedItem("name");
- if (appenderName.equals(attrNode.getNodeValue())) {
- element = (Element) node;
- break;
- }
+ }
+ // Endre's hack:
+ Element element = null;
+ NodeList list = doc.getElementsByTagName("appender");
+ for (int t = 0; t < list.getLength(); t++) {
+ Node node = list.item(t);
+ NamedNodeMap map = node.getAttributes();
+ Node attrNode = map.getNamedItem("name");
+ if (appenderName.equals(attrNode.getNodeValue())) {
+ element = (Element) node;
+ break;
}
- // Hack finished.
+ }
+ // Hack finished.
- if (element == null) {
+ if (element == null) {
- LOGGER.error("No appender named [{}] could be found.", appenderName);
- return null;
- } else {
- appender = parseAppender(element);
- if (appender != null) {
- appenderMap.put(appenderName, appender);
- }
- return appender;
- }
+ LOGGER.error("No appender named [{}] could be found.", appenderName);
+ return null;
}
+ appender = parseAppender(element);
+ if (appender != null) {
+ appenderMap.put(appenderName, appender);
+ }
+ return appender;
}
/**
@@ -383,7 +381,7 @@ public class XmlConfiguration extends Log4j1Configuration {
PropertySetter propSetter = new PropertySetter(appender);
appender.setName(subst(appenderElement.getAttribute(NAME_ATTR)));
- final Holder<Filter> filterChain = new Holder<>();
+ final AtomicReference<Filter> filterChain = new AtomicReference<>();
forEachElement(appenderElement.getChildNodes(), currentElement -> {
// Parse appender parameters
switch (currentElement.getTagName()) {
@@ -442,9 +440,7 @@ public class XmlConfiguration extends Log4j1Configuration {
return null;
}
-
public RewritePolicy parseRewritePolicy(Element rewritePolicyElement) {
-
String className = subst(rewritePolicyElement.getAttribute(CLASS_ATTR));
LOGGER.debug("Class name: [" + className + ']');
RewritePolicy policy = manager.parseRewritePolicy(className, rewritePolicyElement, this);
@@ -459,7 +455,7 @@ public class XmlConfiguration extends Log4j1Configuration {
RewritePolicy policy = LoaderUtil.newInstanceOf(className);
PropertySetter propSetter = new PropertySetter(policy);
- forEachElement(element.getChildNodes(), (currentElement) -> {
+ forEachElement(element.getChildNodes(), currentElement -> {
if (currentElement.getTagName().equalsIgnoreCase(PARAM_TAG)) {
setParameter(currentElement, propSetter);
}
@@ -494,7 +490,7 @@ public class XmlConfiguration extends Log4j1Configuration {
eh.setAppender(appender);
PropertySetter propSetter = new PropertySetter(eh);
- forEachElement(element.getChildNodes(), (currentElement) -> {
+ forEachElement(element.getChildNodes(), currentElement -> {
String tagName = currentElement.getTagName();
if (tagName.equals(PARAM_TAG)) {
setParameter(currentElement, propSetter);
@@ -510,10 +506,9 @@ public class XmlConfiguration extends Log4j1Configuration {
* @param filterElement The Filter Element.
* @return The Filter.
*/
- public void addFilter(final Holder<Filter> ref, final Element filterElement) {
- final Filter filter = parseFilters(filterElement);
- final Filter newFilter = FilterAdapter.addFilter(ref.get(), filter);
- ref.set(newFilter);
+ public void addFilter(final AtomicReference<Filter> ref, final Element filterElement) {
+ final Filter value = parseFilters(filterElement);
+ ref.accumulateAndGet(value, FilterAdapter::addFilter);
}
/**
@@ -534,12 +529,12 @@ public class XmlConfiguration extends Log4j1Configuration {
Filter filter = LoaderUtil.newInstanceOf(className);
PropertySetter propSetter = new PropertySetter(filter);
- forEachElement(filterElement.getChildNodes(), (currentElement) -> {
- String tagName = currentElement.getTagName();
- if (tagName.equals(PARAM_TAG)) {
- setParameter(currentElement, propSetter);
- } else {
- quietParseUnrecognizedElement(filter, currentElement, props);
+ forEachElement(filterElement.getChildNodes(), currentElement -> {
+ // Parse appender parameters
+ switch (currentElement.getTagName()) {
+ case PARAM_TAG :
+ setParameter(currentElement, propSetter);
+ break;
}
});
propSetter.activate();
@@ -591,7 +586,7 @@ public class XmlConfiguration extends Log4j1Configuration {
final PropertySetter propSetter = new PropertySetter(loggerConfig);
loggerConfig.getAppenderRefs().clear();
- forEachElement(catElement.getChildNodes(), (currentElement) -> {
+ forEachElement(catElement.getChildNodes(), currentElement -> {
switch (currentElement.getTagName()) {
case APPENDER_REF_TAG: {
Appender appender = findAppenderByReference(currentElement);
@@ -640,7 +635,7 @@ public class XmlConfiguration extends Log4j1Configuration {
try {
Layout layout = LoaderUtil.newInstanceOf(className);
PropertySetter propSetter = new PropertySetter(layout);
- forEachElement(layout_element.getChildNodes(), (currentElement) -> {
+ forEachElement(layout_element.getChildNodes(), currentElement -> {
String tagName = currentElement.getTagName();
if (tagName.equals(PARAM_TAG)) {
setParameter(currentElement, propSetter);
@@ -695,14 +690,14 @@ public class XmlConfiguration extends Log4j1Configuration {
try {
Class<?> clazz = LoaderUtil.loadClass(className);
Method toLevelMethod = clazz.getMethod("toLevel", ONE_STRING_PARAM);
- Level pri = (Level) toLevelMethod.invoke(null, new Object[]{priStr});
+ Level pri = (Level) toLevelMethod.invoke(null, priStr);
logger.setLevel(OptionConverter.convertLevel(pri));
- } catch (Exception oops) {
- if (oops instanceof InterruptedException || oops instanceof InterruptedIOException) {
+ } catch (Exception e) {
+ if (e instanceof InterruptedException || e instanceof InterruptedIOException) {
Thread.currentThread().interrupt();
}
LOGGER.error("Could not create level [" + priStr +
- "]. Reported error follows.", oops);
+ "]. Reported error follows.", e);
return;
}
}
@@ -765,9 +760,10 @@ public class XmlConfiguration extends Log4j1Configuration {
addFilter(ThresholdFilter.createFilter(level, Result.NEUTRAL, Result.DENY));
}
- forEachElement(element.getChildNodes(), (currentElement) -> {
+ forEachElement(element.getChildNodes(), currentElement -> {
switch (currentElement.getTagName()) {
- case CATEGORY: case LOGGER_ELEMENT:
+ case CATEGORY:
+ case LOGGER_ELEMENT:
parseCategory(currentElement);
break;
case ROOT_TAG:
@@ -779,7 +775,8 @@ public class XmlConfiguration extends Log4j1Configuration {
case THROWABLE_RENDERER_TAG:
LOGGER.warn("Log4j 1 throwable renderers are not supported by Log4j 2 and will be ignored.");
break;
- case CATEGORY_FACTORY_TAG: case LOGGER_FACTORY_TAG:
+ case CATEGORY_FACTORY_TAG:
+ case LOGGER_FACTORY_TAG:
LOGGER.warn("Log4j 1 logger factories are not supported by Log4j 2 and will be ignored.");
break;
case APPENDER_TAG:
@@ -814,14 +811,17 @@ public class XmlConfiguration extends Log4j1Configuration {
private static class SAXErrorHandler implements org.xml.sax.ErrorHandler {
private static final org.apache.logging.log4j.Logger LOGGER = StatusLogger.getLogger();
+ @Override
public void error(final SAXParseException ex) {
emitMessage("Continuable parsing error ", ex);
}
+ @Override
public void fatalError(final SAXParseException ex) {
emitMessage("Fatal parsing error ", ex);
}
+ @Override
public void warning(final SAXParseException ex) {
emitMessage("Parsing warning ", ex);
}
diff --git a/log4j-1.2-api/src/test/java/org/apache/log4j/builders/Log4j2ListAppenderBuilder.java b/log4j-1.2-api/src/test/java/org/apache/log4j/builders/Log4j2ListAppenderBuilder.java
index d7d9021..37b247c 100644
--- a/log4j-1.2-api/src/test/java/org/apache/log4j/builders/Log4j2ListAppenderBuilder.java
+++ b/log4j-1.2-api/src/test/java/org/apache/log4j/builders/Log4j2ListAppenderBuilder.java
@@ -53,8 +53,8 @@ public class Log4j2ListAppenderBuilder extends AbstractBuilder implements Append
@Override
public Appender parseAppender(Element element, XmlConfiguration configuration) {
final String name = getNameAttribute(element);
- final Holder<Layout> layout = new Holder<>();
- final Holder<Filter> filter = new Holder<>();
+ final AtomicReference<Layout> layout = new AtomicReference<>();
+ final AtomicReference<Filter> filter = new AtomicReference<>();
forEachElement(element.getChildNodes(), currentElement -> {
switch (currentElement.getTagName()) {
case LAYOUT_TAG :
diff --git a/log4j-1.2-api/src/test/java/org/apache/log4j/config/AbstractLog4j1ConfigurationConverterTest.java b/log4j-1.2-api/src/test/java/org/apache/log4j/config/AbstractLog4j1ConfigurationConverterTest.java
index 40e8ad8..bee8a50 100644
--- a/log4j-1.2-api/src/test/java/org/apache/log4j/config/AbstractLog4j1ConfigurationConverterTest.java
+++ b/log4j-1.2-api/src/test/java/org/apache/log4j/config/AbstractLog4j1ConfigurationConverterTest.java
@@ -55,7 +55,6 @@ public abstract class AbstractLog4j1ConfigurationConverterTest {
private final Path pathIn;
public AbstractLog4j1ConfigurationConverterTest(final Path path) {
- super();
this.pathIn = path;
}
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/util/Constants.java b/log4j-api/src/main/java/org/apache/logging/log4j/util/Constants.java
index acbd2b9..65b6fac 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/util/Constants.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/util/Constants.java
@@ -85,6 +85,16 @@ public final class Constants {
}
/**
+ * The empty array.
+ */
+ public static final Object[] EMPTY_OBJECT_ARRAY = {};
+
+ /**
+ * The empty array.
+ */
+ public static final byte[] EMPTY_BYTE_ARRAY = {};
+
+ /**
* Prevent class instantiation.
*/
private Constants() {