You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by rp...@apache.org on 2016/08/12 12:11:47 UTC
[01/50] logging-log4j2 git commit: LOG4J2-1448 un-ignore Unit test
Repository: logging-log4j2
Updated Branches:
refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure b3a4e9e7e -> a12913d7c
LOG4J2-1448 un-ignore Unit test
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/5e1bb8b9
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/5e1bb8b9
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/5e1bb8b9
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: 5e1bb8b90b3160a9526363fdae134c43fec69a5d
Parents: c89af8e
Author: rpopma <rp...@apache.org>
Authored: Mon Aug 8 00:17:42 2016 +0900
Committer: rpopma <rp...@apache.org>
Committed: Mon Aug 8 00:17:42 2016 +0900
----------------------------------------------------------------------
.../org/apache/logging/log4j/flume/appender/FlumeAppenderTest.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/5e1bb8b9/log4j-flume-ng/src/test/java/org/apache/logging/log4j/flume/appender/FlumeAppenderTest.java
----------------------------------------------------------------------
diff --git a/log4j-flume-ng/src/test/java/org/apache/logging/log4j/flume/appender/FlumeAppenderTest.java b/log4j-flume-ng/src/test/java/org/apache/logging/log4j/flume/appender/FlumeAppenderTest.java
index 90470b9..10dfb83 100644
--- a/log4j-flume-ng/src/test/java/org/apache/logging/log4j/flume/appender/FlumeAppenderTest.java
+++ b/log4j-flume-ng/src/test/java/org/apache/logging/log4j/flume/appender/FlumeAppenderTest.java
@@ -245,7 +245,7 @@ public class FlumeAppenderTest {
eventSource.stop();
}
- @Ignore
+ //@Ignore //(Remko: this test hangs my build...)
@Test
public void testIncompleteBatch() throws IOException {
final Agent[] agents = new Agent[] { Agent.createAgent("localhost",
[10/50] logging-log4j2 git commit: Sort: fix, add, update.
Posted by rp...@apache.org.
Sort: fix, add, update.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/04828170
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/04828170
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/04828170
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: 0482817088ea61f6c1f219fc11dd45b63e3f0b9f
Parents: 714bfaf
Author: Gary Gregory <gg...@apache.org>
Authored: Mon Aug 8 08:48:36 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Mon Aug 8 08:48:36 2016 -0700
----------------------------------------------------------------------
src/changes/changes.xml | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/04828170/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 87578dd..1f1fa85 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -57,12 +57,12 @@
<action issue="LOG4J2-351" dev="rpopma, ggregory" type="fix" due-to="Roland Weiglhofer">
[OSGi] wrong Fragment-Host in manifest files.
</action>
- <action issue="LOG4J2-1471" dev="ggregory" type="add" due-to="Gary Gregory">
- [PatternLayout] Add an ANSI option to %xThrowable.
- </action>
<action issue="LOG4J2-1313" dev="rpopma" type="fix" due-to="Philipp Knobel">
Properties declared in configuration can now have their value either in the element body or in an attribute named "value".
</action>
+ <action issue="LOG4J2-1471" dev="ggregory" type="add" due-to="Gary Gregory">
+ [PatternLayout] Add an ANSI option to %xThrowable.
+ </action>
<action issue="LOG4J2-1472" dev="ggregory" type="add" due-to="Gary Gregory">
Make org.apache.logging.log4j.core.LoggerContext implement Closeable.
</action>
[46/50] logging-log4j2 git commit: Javadoc: Use the active voice.
Posted by rp...@apache.org.
Javadoc: Use the active voice.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/df2d248d
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/df2d248d
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/df2d248d
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: df2d248dd79e2da8b79d681918658e4a9b431f08
Parents: 3fde6e7
Author: Gary Gregory <gg...@apache.org>
Authored: Thu Aug 11 14:57:23 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Thu Aug 11 14:57:23 2016 -0700
----------------------------------------------------------------------
.../log4j/core/appender/rolling/DefaultRolloverStrategy.java | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/df2d248d/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/DefaultRolloverStrategy.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/DefaultRolloverStrategy.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/DefaultRolloverStrategy.java
index ab31f30..833db41 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/DefaultRolloverStrategy.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/DefaultRolloverStrategy.java
@@ -180,7 +180,7 @@ public class DefaultRolloverStrategy implements RolloverStrategy {
private static final int DEFAULT_WINDOW_SIZE = 7;
/**
- * Create the DefaultRolloverStrategy.
+ * Creates the DefaultRolloverStrategy.
*
* @param max The maximum number of files to keep.
* @param min The minimum number of files to keep.
@@ -307,7 +307,7 @@ public class DefaultRolloverStrategy implements RolloverStrategy {
}
/**
- * Purge and rename old log files in preparation for rollover. The oldest file will have the smallest index, the
+ * Purges and renames old log files in preparation for rollover. The oldest file will have the smallest index, the
* newest the highest.
*
* @param lowIndex low index
@@ -414,7 +414,7 @@ public class DefaultRolloverStrategy implements RolloverStrategy {
}
/**
- * Purge and rename old log files in preparation for rollover. The newest file will have the smallest index, the
+ * Purges and renames old log files in preparation for rollover. The newest file will have the smallest index, the
* oldest will have the highest.
*
* @param lowIndex low index
@@ -509,7 +509,7 @@ public class DefaultRolloverStrategy implements RolloverStrategy {
}
/**
- * Perform the rollover.
+ * Performs the rollover.
*
* @param manager The RollingFileManager name for current active log file.
* @return A RolloverDescription.
[03/50] logging-log4j2 git commit: Comment.
Posted by rp...@apache.org.
Comment.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/cc284d18
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/cc284d18
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/cc284d18
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: cc284d18377c5ae8ce1d2d58f0b31fe66c5ddee4
Parents: 8bb88df
Author: Gary Gregory <gg...@apache.org>
Authored: Sun Aug 7 10:38:21 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Sun Aug 7 10:38:21 2016 -0700
----------------------------------------------------------------------
.../src/test/java/org/apache/logging/log4j/junit/CleanFiles.java | 1 +
1 file changed, 1 insertion(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/cc284d18/log4j-core/src/test/java/org/apache/logging/log4j/junit/CleanFiles.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/junit/CleanFiles.java b/log4j-core/src/test/java/org/apache/logging/log4j/junit/CleanFiles.java
index 3504bf4..5de9c63 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/junit/CleanFiles.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/junit/CleanFiles.java
@@ -59,6 +59,7 @@ public class CleanFiles extends AbstractExternalFileCleaner {
try {
Thread.sleep(200);
} catch (final InterruptedException ignored) {
+ // ignore
}
}
}
[06/50] logging-log4j2 git commit: Comments.
Posted by rp...@apache.org.
Comments.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/e81c6a11
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/e81c6a11
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/e81c6a11
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: e81c6a11d5c5f07c83ad81fc47cbb94f2cbbfc2b
Parents: 96f7d65
Author: Gary Gregory <gg...@apache.org>
Authored: Sun Aug 7 11:27:56 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Sun Aug 7 11:27:56 2016 -0700
----------------------------------------------------------------------
.../test/java/org/apache/logging/log4j/junit/CleanFolders.java | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/e81c6a11/log4j-core/src/test/java/org/apache/logging/log4j/junit/CleanFolders.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/junit/CleanFolders.java b/log4j-core/src/test/java/org/apache/logging/log4j/junit/CleanFolders.java
index a4d9023..ea75a55 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/junit/CleanFolders.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/junit/CleanFolders.java
@@ -53,7 +53,7 @@ public class CleanFolders extends AbstractExternalFileCleaner {
@Override
protected void clean() {
Map<Path, IOException> failures = new HashMap<>();
-
+ // Clean and gather failures
for (final File folder : getFiles()) {
if (folder.exists()) {
final Path path = folder.toPath();
@@ -72,6 +72,7 @@ public class CleanFolders extends AbstractExternalFileCleaner {
}
}
}
+ // Fail on failures
if (failures.size() > 0) {
StringBuilder sb = new StringBuilder();
boolean first = true;
[21/50] logging-log4j2 git commit: [LOG4J2-1501] FileAppender should
be able to create files lazily.
Posted by rp...@apache.org.
[LOG4J2-1501] FileAppender should be able to create files lazily.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/4fc1c5f0
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/4fc1c5f0
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/4fc1c5f0
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: 4fc1c5f07d4be5109bb229542258490b0bf39239
Parents: 16d06e8
Author: Gary Gregory <gg...@apache.org>
Authored: Mon Aug 8 10:42:54 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Mon Aug 8 10:42:54 2016 -0700
----------------------------------------------------------------------
.../logging/log4j/core/config/CustomConfigurationTest.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4fc1c5f0/log4j-core/src/test/java/org/apache/logging/log4j/core/config/CustomConfigurationTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/CustomConfigurationTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/CustomConfigurationTest.java
index b8dad5e..6888204 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/CustomConfigurationTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/CustomConfigurationTest.java
@@ -80,8 +80,8 @@ public class CustomConfigurationTest {
.withPattern(PatternLayout.SIMPLE_CONVERSION_PATTERN)
.withConfiguration(config)
.build();
- final Appender appender = FileAppender.createAppender(LOG_FILE, "false", "false", "File", "true",
- "false", "false", "4000", layout, null, "false", null, config);
+ final Appender appender = FileAppender.createAppender(LOG_FILE, false, false, "File", true,
+ false, false, 4000, layout, null, false, null, false, config);
appender.start();
config.addAppender(appender);
final AppenderRef ref = AppenderRef.createAppenderRef("File", null, null);
[09/50] logging-log4j2 git commit: Improve Kafka appender
documentation.
Posted by rp...@apache.org.
Improve Kafka appender documentation.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/34ee617a
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/34ee617a
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/34ee617a
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: 34ee617a3d667f36b21732a5e274c420183fa010
Parents: 714bfaf
Author: Mikael St�ldal <mi...@magine.com>
Authored: Mon Aug 8 10:35:02 2016 +0200
Committer: Mikael St�ldal <mi...@magine.com>
Committed: Mon Aug 8 10:35:02 2016 +0200
----------------------------------------------------------------------
src/site/xdoc/manual/appenders.xml | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/34ee617a/src/site/xdoc/manual/appenders.xml
----------------------------------------------------------------------
diff --git a/src/site/xdoc/manual/appenders.xml b/src/site/xdoc/manual/appenders.xml
index c04c491..51caab6 100644
--- a/src/site/xdoc/manual/appenders.xml
+++ b/src/site/xdoc/manual/appenders.xml
@@ -1261,7 +1261,7 @@ public class JpaLogEntity extends AbstractLogEventWrapperEntity {
</subsection>
<a name="KafkaAppender"/>
<subsection name="KafkaAppender">
- <p>The KafkaAppender logs events to an <a href="https://kafka.apache.org/">Apache Kafka</a> topic.</p>
+ <p>The KafkaAppender logs events to an <a href="https://kafka.apache.org/">Apache Kafka</a> topic.</p> Each log event is sent as a Kafka record with no key.
<table>
<caption align="top">KafkaAppender Parameters</caption>
<tr>
@@ -1306,8 +1306,9 @@ public class JpaLogEntity extends AbstractLogEventWrapperEntity {
<td>properties</td>
<td>Property[]</td>
<td>
- You can set any properties in <a href="http://kafka.apache.org/documentation.html#producerconfigs">Kafka producer properties</a>.
+ You can set properties in <a href="http://kafka.apache.org/documentation.html#producerconfigs">Kafka producer properties</a>.
You need to set the <code>bootstrap.servers</code> property, there are sensible default values for the others.
+ Do not set the <code>value.serializer</code> property.
</td>
</tr>
</table>
[43/50] logging-log4j2 git commit: Refactor for ConsoleAppender (and
others next) to use inherited Builders.
Posted by rp...@apache.org.
Refactor for ConsoleAppender (and others next) to use inherited
Builders.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/2207cae2
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/2207cae2
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/2207cae2
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: 2207cae2a1213fda34cf94e5f08c49c2c9433e50
Parents: e3e37cc
Author: Gary Gregory <gg...@apache.org>
Authored: Wed Aug 10 20:09:29 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Wed Aug 10 20:09:29 2016 -0700
----------------------------------------------------------------------
.../log4j/core/appender/AbstractAppender.java | 58 +++++++++++++++
.../appender/AbstractOutputStreamAppender.java | 21 ++++++
.../log4j/core/appender/ConsoleAppender.java | 78 +++++++-------------
.../log4j/core/filter/AbstractFilterable.java | 27 +++++++
.../core/appender/ConsoleAppenderTest.java | 6 +-
5 files changed, 134 insertions(+), 56 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/2207cae2/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AbstractAppender.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AbstractAppender.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AbstractAppender.java
index 9f253a0..8df298f 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AbstractAppender.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AbstractAppender.java
@@ -23,7 +23,11 @@ import org.apache.logging.log4j.core.ErrorHandler;
import org.apache.logging.log4j.core.Filter;
import org.apache.logging.log4j.core.Layout;
import org.apache.logging.log4j.core.LogEvent;
+import org.apache.logging.log4j.core.config.plugins.PluginBuilderAttribute;
+import org.apache.logging.log4j.core.config.plugins.PluginElement;
+import org.apache.logging.log4j.core.config.plugins.validation.constraints.Required;
import org.apache.logging.log4j.core.filter.AbstractFilterable;
+import org.apache.logging.log4j.core.layout.PatternLayout;
import org.apache.logging.log4j.core.util.Integers;
/**
@@ -32,6 +36,60 @@ import org.apache.logging.log4j.core.util.Integers;
*/
public abstract class AbstractAppender extends AbstractFilterable implements Appender {
+ /**
+ * Subclasses can extend this abstract Builder.
+ *
+ * @param <B> This builder class.
+ */
+ public abstract static class Builder<B extends Builder<B>> extends AbstractFilterable.Builder<B> {
+
+ @PluginBuilderAttribute
+ private boolean ignoreExceptions = true;
+
+ @PluginElement("Layout")
+ @Required
+ private Layout<? extends Serializable> layout;
+
+ @PluginBuilderAttribute
+ @Required
+ private String name;
+
+ public String getName() {
+ return name;
+ }
+
+ public boolean isIgnoreExceptions() {
+ return ignoreExceptions;
+ }
+
+ public Layout<? extends Serializable> getLayout() {
+ return layout;
+ }
+
+ public B withName(String name) {
+ this.name = name;
+ return asBuilder();
+ }
+
+ public B withIgnoreExceptions(boolean ignoreExceptions) {
+ this.ignoreExceptions = ignoreExceptions;
+ return asBuilder();
+ }
+
+ public B withLayout(Layout<? extends Serializable> layout) {
+ this.layout = layout;
+ return asBuilder();
+ }
+
+ public Layout<? extends Serializable> getOrCreateLayout() {
+ if (layout == null) {
+ return PatternLayout.createDefaultLayout();
+ }
+ return layout;
+ }
+
+ }
+
private final String name;
private final boolean ignoreExceptions;
private final Layout<? extends Serializable> layout;
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/2207cae2/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AbstractOutputStreamAppender.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AbstractOutputStreamAppender.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AbstractOutputStreamAppender.java
index 4a95098..67e835a 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AbstractOutputStreamAppender.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AbstractOutputStreamAppender.java
@@ -21,6 +21,7 @@ import java.io.Serializable;
import org.apache.logging.log4j.core.Filter;
import org.apache.logging.log4j.core.Layout;
import org.apache.logging.log4j.core.LogEvent;
+import org.apache.logging.log4j.core.config.plugins.PluginBuilderAttribute;
import org.apache.logging.log4j.core.util.Constants;
/**
@@ -31,6 +32,26 @@ import org.apache.logging.log4j.core.util.Constants;
public abstract class AbstractOutputStreamAppender<M extends OutputStreamManager> extends AbstractAppender {
/**
+ * Subclasses can extend this abstract Builder.
+ *
+ * @param <B> This builder class.
+ */
+ public abstract static class Builder<B extends Builder<B>> extends AbstractAppender.Builder<B> {
+
+ @PluginBuilderAttribute
+ private boolean immediateFlush;
+
+ public boolean isImmediateFlush() {
+ return immediateFlush;
+ }
+
+ public B withImmediateFlush(boolean immediateFlush) {
+ this.immediateFlush = immediateFlush;
+ return asBuilder();
+ }
+ }
+
+ /**
* Immediate flush means that the underlying writer or output stream will be flushed at the end of each append
* operation. Immediate flush is slower but ensures that each append request is actually written. If
* <code>immediateFlush</code> is set to {@code false}, then there is a good chance that the last few logs events
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/2207cae2/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/ConsoleAppender.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/ConsoleAppender.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/ConsoleAppender.java
index 9747088..eed9319 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/ConsoleAppender.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/ConsoleAppender.java
@@ -29,6 +29,7 @@ import java.util.concurrent.atomic.AtomicInteger;
import org.apache.logging.log4j.core.Filter;
import org.apache.logging.log4j.core.Layout;
+import org.apache.logging.log4j.core.appender.FileAppender.Builder;
import org.apache.logging.log4j.core.config.plugins.Plugin;
import org.apache.logging.log4j.core.config.plugins.PluginAttribute;
import org.apache.logging.log4j.core.config.plugins.PluginBuilderAttribute;
@@ -87,7 +88,7 @@ public final class ConsoleAppender extends AbstractOutputStreamAppender<OutputSt
* @param ignore If {@code "true"} (default) exceptions encountered when appending events are logged; otherwise they
* are propagated to the caller.
* @return The ConsoleAppender.
- * @deprecated Use {@link #createAppender(Layout, Filter, Target, String, boolean, boolean, boolean)}.
+ * @deprecated Use {@link #newBuilder()}.
*/
@Deprecated
public static ConsoleAppender createAppender(Layout<? extends Serializable> layout,
@@ -122,17 +123,18 @@ public final class ConsoleAppender extends AbstractOutputStreamAppender<OutputSt
* @param ignoreExceptions If {@code "true"} (default) exceptions encountered when appending events are logged; otherwise they
* are propagated to the caller.
* @return The ConsoleAppender.
+ * @deprecated Use {@link #newBuilder()}.
*/
- @PluginFactory
+ @Deprecated
public static ConsoleAppender createAppender(
// @formatter:off
- @PluginElement("Layout") Layout<? extends Serializable> layout,
- @PluginElement("Filter") final Filter filter,
- @PluginAttribute(value = "target") Target target,
- @PluginAttribute("name") final String name,
- @PluginAttribute(value = "follow", defaultBoolean = false) final boolean follow,
- @PluginAttribute(value = "direct", defaultBoolean = false) final boolean direct,
- @PluginAttribute(value = "ignoreExceptions", defaultBoolean = true) final boolean ignoreExceptions) {
+ Layout<? extends Serializable> layout,
+ final Filter filter,
+ Target target,
+ final String name,
+ final boolean follow,
+ final boolean direct,
+ final boolean ignoreExceptions) {
// @formatter:on
if (name == null) {
LOGGER.error("No name provided for ConsoleAppender");
@@ -156,72 +158,40 @@ public final class ConsoleAppender extends AbstractOutputStreamAppender<OutputSt
}
@PluginBuilderFactory
- public static Builder newBuilder() {
- return new Builder();
+ public static <B extends Builder<B>> B newBuilder() {
+ return new Builder<B>().asBuilder();
}
/**
* Builds ConsoleAppender instances.
+ * @param <B> This builder class
*/
- public static class Builder implements org.apache.logging.log4j.core.util.Builder<ConsoleAppender> {
-
- @PluginElement("Layout")
- @Required
- private Layout<? extends Serializable> layout = PatternLayout.createDefaultLayout();
-
- @PluginElement("Filter")
- private Filter filter;
+ public static class Builder<B extends Builder<B>> extends AbstractOutputStreamAppender.Builder<B>
+ implements org.apache.logging.log4j.core.util.Builder<ConsoleAppender> {
@PluginBuilderAttribute
@Required
private Target target = DEFAULT_TARGET;
@PluginBuilderAttribute
- @Required
- private String name;
-
- @PluginBuilderAttribute
private boolean follow;
@PluginBuilderAttribute
private boolean direct;
- @PluginBuilderAttribute
- private boolean ignoreExceptions = true;
-
- public Builder setLayout(final Layout<? extends Serializable> aLayout) {
- this.layout = aLayout;
- return this;
- }
-
- public Builder setFilter(final Filter aFilter) {
- this.filter = aFilter;
- return this;
- }
-
- public Builder setTarget(final Target aTarget) {
+ public B setTarget(final Target aTarget) {
this.target = aTarget;
- return this;
+ return asBuilder();
}
- public Builder setName(final String aName) {
- this.name = aName;
- return this;
- }
-
- public Builder setFollow(final boolean shouldFollow) {
+ public B setFollow(final boolean shouldFollow) {
this.follow = shouldFollow;
- return this;
+ return asBuilder();
}
- public Builder setDirect(final boolean shouldDirect) {
+ public B setDirect(final boolean shouldDirect) {
this.direct = shouldDirect;
- return this;
- }
-
- public Builder setIgnoreExceptions(final boolean shouldIgnoreExceptions) {
- this.ignoreExceptions = shouldIgnoreExceptions;
- return this;
+ return asBuilder();
}
@Override
@@ -229,7 +199,9 @@ public final class ConsoleAppender extends AbstractOutputStreamAppender<OutputSt
if (follow && direct) {
throw new IllegalArgumentException("Cannot use both follow and direct on ConsoleAppender");
}
- return new ConsoleAppender(name, layout, filter, getManager(target, follow, direct, layout), ignoreExceptions, target);
+ Layout<? extends Serializable> layout = getOrCreateLayout();
+ return new ConsoleAppender(getName(), layout, getFilter(), getManager(target, follow, direct, layout),
+ isIgnoreExceptions(), target);
}
}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/2207cae2/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/AbstractFilterable.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/AbstractFilterable.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/AbstractFilterable.java
index 140a735..e57b58d 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/AbstractFilterable.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/AbstractFilterable.java
@@ -21,6 +21,7 @@ import java.util.Iterator;
import org.apache.logging.log4j.core.AbstractLifeCycle;
import org.apache.logging.log4j.core.Filter;
import org.apache.logging.log4j.core.LogEvent;
+import org.apache.logging.log4j.core.config.plugins.PluginElement;
/**
* Enhances a Class by allowing it to contain Filters.
@@ -28,6 +29,32 @@ import org.apache.logging.log4j.core.LogEvent;
public abstract class AbstractFilterable extends AbstractLifeCycle implements Filterable {
/**
+ * Subclasses can extend this abstract Builder.
+ *
+ * @param <B> This builder class.
+ */
+ public abstract static class Builder<B extends Builder<B>> {
+
+ @PluginElement("Filter")
+ private Filter filter;
+
+ public Filter getFilter() {
+ return filter;
+ }
+
+ @SuppressWarnings("unchecked")
+ public B asBuilder() {
+ return (B) this;
+ }
+
+ public B withFilter(Filter filter) {
+ this.filter = filter;
+ return asBuilder();
+ }
+
+ }
+
+ /**
* May be null.
*/
private volatile Filter filter;
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/2207cae2/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ConsoleAppenderTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ConsoleAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ConsoleAppenderTest.java
index 9190359..80d024d 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ConsoleAppenderTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ConsoleAppenderTest.java
@@ -98,8 +98,8 @@ public class ConsoleAppenderTest {
mocks.replayAll();
systemSetter.systemSet(psMock);
final Layout<String> layout = PatternLayout.newBuilder().withAlwaysWriteExceptions(true).build();
- final ConsoleAppender app = ConsoleAppender.createAppender(layout, null, targetName, "Console", false, false,
- false);
+ final ConsoleAppender app = ConsoleAppender.newBuilder().withLayout(layout).setTarget(targetName)
+ .withName("Console").withIgnoreExceptions(false).build();
app.start();
assertTrue("Appender did not start", app.isStarted());
@@ -131,7 +131,7 @@ public class ConsoleAppenderTest {
private void testFollowSystemPrintStream(final PrintStream ps, final Target target, final SystemSetter systemSetter) {
final ConsoleAppender app = ConsoleAppender.newBuilder().setTarget(target).setFollow(true)
- .setIgnoreExceptions(false).build();
+ .withIgnoreExceptions(false).build();
Assert.assertEquals(target, app.getTarget());
app.start();
try {
[25/50] logging-log4j2 git commit: [LOG4J2-1505] Create a Builder for
FileAppender.
Posted by rp...@apache.org.
[LOG4J2-1505] Create a Builder for FileAppender.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/06022018
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/06022018
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/06022018
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: 06022018216a54d950ae34afa03f8786f6878f23
Parents: 1b5bcb9
Author: Gary Gregory <gg...@apache.org>
Authored: Mon Aug 8 12:00:09 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Mon Aug 8 12:00:09 2016 -0700
----------------------------------------------------------------------
.../log4j/core/appender/FileAppender.java | 390 ++++++++++++-------
.../log4j/core/appender/FileAppenderTest.java | 59 ++-
.../core/appender/OutputStreamAppenderTest.java | 14 +-
.../core/config/CustomConfigurationTest.java | 13 +-
src/changes/changes.xml | 3 +
5 files changed, 327 insertions(+), 152 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/06022018/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileAppender.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileAppender.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileAppender.java
index b4eb6f6..3f364cc 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileAppender.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileAppender.java
@@ -24,10 +24,10 @@ import org.apache.logging.log4j.core.Filter;
import org.apache.logging.log4j.core.Layout;
import org.apache.logging.log4j.core.config.Configuration;
import org.apache.logging.log4j.core.config.plugins.Plugin;
-import org.apache.logging.log4j.core.config.plugins.PluginAttribute;
+import org.apache.logging.log4j.core.config.plugins.PluginBuilderAttribute;
+import org.apache.logging.log4j.core.config.plugins.PluginBuilderFactory;
import org.apache.logging.log4j.core.config.plugins.PluginConfiguration;
import org.apache.logging.log4j.core.config.plugins.PluginElement;
-import org.apache.logging.log4j.core.config.plugins.PluginFactory;
import org.apache.logging.log4j.core.layout.PatternLayout;
import org.apache.logging.log4j.core.net.Advertiser;
import org.apache.logging.log4j.core.util.Booleans;
@@ -39,43 +39,213 @@ import org.apache.logging.log4j.core.util.Integers;
@Plugin(name = "File", category = "Core", elementType = "appender", printObject = true)
public final class FileAppender extends AbstractOutputStreamAppender<FileManager> {
- static final int DEFAULT_BUFFER_SIZE = 8192;
- private final String fileName;
- private final Advertiser advertiser;
- private Object advertisement;
+ /**
+ * Builds FileAppender instances.
+ */
+ public static class Builder implements org.apache.logging.log4j.core.util.Builder<FileAppender> {
- private FileAppender(final String name, final Layout<? extends Serializable> layout, final Filter filter,
- final FileManager manager, final String filename, final boolean ignoreExceptions,
- final boolean immediateFlush, final Advertiser advertiser) {
+ @PluginBuilderAttribute
+ private String fileName;
- super(name, layout, filter, ignoreExceptions, immediateFlush, manager);
- if (advertiser != null) {
- final Map<String, String> configuration = new HashMap<>(layout.getContentFormat());
- configuration.putAll(manager.getContentFormat());
- configuration.put("contentType", layout.getContentType());
- configuration.put("name", name);
- advertisement = advertiser.advertise(configuration);
+ @PluginBuilderAttribute
+ private boolean append = true;
+
+ @PluginBuilderAttribute
+ private boolean locking;
+
+ @PluginBuilderAttribute
+ private String name;
+
+ @PluginBuilderAttribute
+ private boolean immediateFlush = true;
+
+ @PluginBuilderAttribute
+ private boolean ignoreExceptions = true;
+
+ @PluginBuilderAttribute
+ private boolean bufferedIo = true;
+
+ @PluginBuilderAttribute
+ private int bufferSize = DEFAULT_BUFFER_SIZE;
+
+ @PluginElement("Layout")
+ private Layout<? extends Serializable> layout;
+
+ @PluginElement("Filter")
+ private Filter filter;
+
+ @PluginBuilderAttribute
+ private boolean advertise;
+
+ @PluginBuilderAttribute
+ private String advertiseUri;
+
+ @PluginBuilderAttribute
+ private boolean lazyCreate;
+
+ @PluginConfiguration
+ private Configuration config;
+
+ @Override
+ public FileAppender build() {
+ if (locking && bufferedIo) {
+ LOGGER.warn("Locking and buffering are mutually exclusive. No buffering will occur for {}", fileName);
+ bufferedIo = false;
+ }
+ if (!bufferedIo && bufferSize > 0) {
+ LOGGER.warn("The bufferSize is set to {} but bufferedIo is not true: {}", bufferSize, bufferedIo);
+ }
+ if (name == null) {
+ LOGGER.error("No name provided for FileAppender");
+ return null;
+ }
+ if (fileName == null) {
+ LOGGER.error("No filename provided for FileAppender with name {}", name);
+ return null;
+ }
+ if (layout == null) {
+ layout = PatternLayout.createDefaultLayout();
+ }
+
+ final FileManager manager = FileManager.getFileManager(fileName, append, locking, bufferedIo, lazyCreate,
+ advertiseUri, layout, bufferSize, immediateFlush);
+ if (manager == null) {
+ return null;
+ }
+
+ return new FileAppender(name, layout, filter, manager, fileName, ignoreExceptions,
+ !bufferedIo || immediateFlush, advertise ? config.getAdvertiser() : null);
}
- this.fileName = filename;
- this.advertiser = advertiser;
- }
- @Override
- public void stop() {
- super.stop();
- if (advertiser != null) {
- advertiser.unadvertise(advertisement);
+ public String getAdvertiseUri() {
+ return advertiseUri;
}
- }
- /**
- * Returns the file name this appender is associated with.
- * @return The File name.
- */
- public String getFileName() {
- return this.fileName;
- }
+ public int getBufferSize() {
+ return bufferSize;
+ }
+
+ public Configuration getConfig() {
+ return config;
+ }
+
+ public String getFileName() {
+ return fileName;
+ }
+
+ public Filter getFilter() {
+ return filter;
+ }
+
+ public Layout<? extends Serializable> getLayout() {
+ return layout;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public boolean isAdvertise() {
+ return advertise;
+ }
+
+ public boolean isAppend() {
+ return append;
+ }
+
+ public boolean isBufferedIo() {
+ return bufferedIo;
+ }
+
+ public boolean isIgnoreExceptions() {
+ return ignoreExceptions;
+ }
+
+ public boolean isImmediateFlush() {
+ return immediateFlush;
+ }
+
+ public boolean isLazyCreate() {
+ return lazyCreate;
+ }
+
+ public boolean isLocking() {
+ return locking;
+ }
+
+ public Builder withAdvertise(final boolean advertise) {
+ this.advertise = advertise;
+ return this;
+ }
+
+ public Builder withAdvertiseUri(final String advertiseUri) {
+ this.advertiseUri = advertiseUri;
+ return this;
+ }
+ public Builder withAppend(final boolean append) {
+ this.append = append;
+ return this;
+ }
+
+ public Builder withBufferedIo(final boolean bufferedIo) {
+ this.bufferedIo = bufferedIo;
+ return this;
+ }
+
+ public Builder withBufferSize(final int bufferSize) {
+ this.bufferSize = bufferSize;
+ return this;
+ }
+
+ public Builder withConfig(final Configuration config) {
+ this.config = config;
+ return this;
+ }
+
+ public Builder withFileName(final String fileName) {
+ this.fileName = fileName;
+ return this;
+ }
+
+ public Builder withFilter(final Filter filter) {
+ this.filter = filter;
+ return this;
+ }
+
+ public Builder withIgnoreExceptions(final boolean ignoreExceptions) {
+ this.ignoreExceptions = ignoreExceptions;
+ return this;
+ }
+
+ public Builder withImmediateFlush(final boolean immediateFlush) {
+ this.immediateFlush = immediateFlush;
+ return this;
+ }
+
+ public Builder withLayout(final Layout<? extends Serializable> layout) {
+ this.layout = layout;
+ return this;
+ }
+
+ public Builder withLazyCreate(final boolean lazyCreate) {
+ this.lazyCreate = lazyCreate;
+ return this;
+ }
+
+ public Builder withLocking(final boolean locking) {
+ this.locking = locking;
+ return this;
+ }
+
+ public Builder withName(final String name) {
+ this.name = name;
+ return this;
+ }
+ }
+
+ private static final int DEFAULT_BUFFER_SIZE = 8192;
+
/**
* Create a File Appender.
* @param fileName The name and path of the file.
@@ -96,7 +266,7 @@ public final class FileAppender extends AbstractOutputStreamAppender<FileManager
* @param advertiseUri The advertised URI which can be used to retrieve the file contents.
* @param config The Configuration
* @return The FileAppender.
- * @deprecated Use {@link #createAppender(String, boolean, boolean, String, String, String, boolean, String, Layout<? extends Serializable>, Filter, String, String, boolean, Configuration)}
+ * @deprecated Use {@link #newBuilder()}
*/
@Deprecated
public static FileAppender createAppender(
@@ -109,119 +279,71 @@ public final class FileAppender extends AbstractOutputStreamAppender<FileManager
final String ignore,
final String bufferedIo,
final String bufferSizeStr,
- Layout<? extends Serializable> layout,
+ final Layout<? extends Serializable> layout,
final Filter filter,
final String advertise,
final String advertiseUri,
final Configuration config) {
+ return newBuilder()
+ .withAdvertise(Boolean.parseBoolean(advertise))
+ .withAdvertiseUri(advertiseUri)
+ .withAppend(Booleans.parseBoolean(append, true))
+ .withBufferedIo(Booleans.parseBoolean(bufferedIo, true))
+ .withBufferSize(Integers.parseInt(bufferSizeStr, DEFAULT_BUFFER_SIZE))
+ .withConfig(config)
+ .withFileName(fileName)
+ .withFilter(filter)
+ .withIgnoreExceptions(Booleans.parseBoolean(ignore, true))
+ .withImmediateFlush(Booleans.parseBoolean(immediateFlush, true))
+ .withLayout(layout)
+ .withLocking(Boolean.parseBoolean(locking))
+ .withName(name)
+ .build();
// @formatter:on
- final boolean isAppend = Booleans.parseBoolean(append, true);
- final boolean isLocking = Boolean.parseBoolean(locking);
- boolean isBuffered = Booleans.parseBoolean(bufferedIo, true);
- final boolean isAdvertise = Boolean.parseBoolean(advertise);
- if (isLocking && isBuffered) {
- if (bufferedIo != null) {
- LOGGER.warn("Locking and buffering are mutually exclusive. No buffering will occur for " + fileName);
- }
- isBuffered = false;
- }
- final int bufferSize = Integers.parseInt(bufferSizeStr, DEFAULT_BUFFER_SIZE);
- if (!isBuffered && bufferSize > 0) {
- LOGGER.warn("The bufferSize is set to {} but bufferedIO is not true: {}", bufferSize, bufferedIo);
- }
- final boolean isFlush = Booleans.parseBoolean(immediateFlush, true);
- final boolean ignoreExceptions = Booleans.parseBoolean(ignore, true);
+ }
+
+ @PluginBuilderFactory
+ public static Builder newBuilder() {
+ return new Builder();
+ }
+
+ private final String fileName;
- if (name == null) {
- LOGGER.error("No name provided for FileAppender");
- return null;
- }
+ private final Advertiser advertiser;
- if (fileName == null) {
- LOGGER.error("No filename provided for FileAppender with name " + name);
- return null;
- }
- if (layout == null) {
- layout = PatternLayout.createDefaultLayout();
- }
+ private final Object advertisement;
- final FileManager manager = FileManager.getFileManager(fileName, isAppend, isLocking, isBuffered, false,
- advertiseUri, layout, bufferSize, isFlush);
- if (manager == null) {
- return null;
- }
+ private FileAppender(final String name, final Layout<? extends Serializable> layout, final Filter filter,
+ final FileManager manager, final String filename, final boolean ignoreExceptions,
+ final boolean immediateFlush, final Advertiser advertiser) {
- return new FileAppender(name, layout, filter, manager, fileName, ignoreExceptions, !isBuffered || isFlush,
- isAdvertise ? config.getAdvertiser() : null);
+ super(name, layout, filter, ignoreExceptions, immediateFlush, manager);
+ if (advertiser != null) {
+ final Map<String, String> configuration = new HashMap<>(layout.getContentFormat());
+ configuration.putAll(manager.getContentFormat());
+ configuration.put("contentType", layout.getContentType());
+ configuration.put("name", name);
+ advertisement = advertiser.advertise(configuration);
+ } else {
+ advertisement = null;
+ }
+ this.fileName = filename;
+ this.advertiser = advertiser;
}
/**
- * Create a File Appender.
- * @param fileName The name and path of the file.
- * @param append "True" if the file should be appended to, "false" if it should be overwritten.
- * The default is "true".
- * @param locking "True" if the file should be locked. The default is "false".
- * @param name The name of the Appender.
- * @param immediateFlush "true" if the contents should be flushed on every write, "false" otherwise. The default
- * is "true".
- * @param ignoreExceptions If {@code "true"} (default) exceptions encountered when appending events are logged; otherwise
- * they are propagated to the caller.
- * @param bufferedIo "true" if I/O should be buffered, "false" otherwise. The default is "true".
- * @param bufferSize buffer size for buffered IO (default is 8192).
- * @param layout The layout to use to format the event. If no layout is provided the default PatternLayout
- * will be used.
- * @param filter The filter, if any, to use.
- * @param advertise "true" if the appender configuration should be advertised, "false" otherwise.
- * @param advertiseUri The advertised URI which can be used to retrieve the file contents.
- * @param lazyCreate true if you want to lazy-create the file (a.k.a. on-demand.)
- * @param config The Configuration
- * @return The FileAppender.
- * @since 2.7
+ * Returns the file name this appender is associated with.
+ * @return The File name.
*/
- @PluginFactory
- public static FileAppender createAppender(
- // @formatter:off
- @PluginAttribute("fileName") final String fileName,
- @PluginAttribute(value = "append", defaultBoolean = true) final boolean append,
- @PluginAttribute("locking") final boolean locking,
- @PluginAttribute("name") final String name,
- @PluginAttribute(value = "immediateFlush", defaultBoolean = true) final boolean immediateFlush,
- @PluginAttribute(value = "ignoreExceptions", defaultBoolean = true) final boolean ignoreExceptions,
- @PluginAttribute(value = "bufferedIo", defaultBoolean = true) boolean bufferedIo,
- @PluginAttribute(value = "bufferSize", defaultInt = DEFAULT_BUFFER_SIZE) final int bufferSize,
- @PluginElement("Layout") Layout<? extends Serializable> layout,
- @PluginElement("Filter") final Filter filter,
- @PluginAttribute("advertise") final boolean advertise,
- @PluginAttribute("advertiseUri") final String advertiseUri,
- @PluginAttribute("lazyCreate") final boolean lazyCreate,
- @PluginConfiguration final Configuration config) {
- // @formatter:on
- if (locking && bufferedIo) {
- LOGGER.warn("Locking and buffering are mutually exclusive. No buffering will occur for {}", fileName);
- bufferedIo = false;
- }
- if (!bufferedIo && bufferSize > 0) {
- LOGGER.warn("The bufferSize is set to {} but bufferedIo is not true: {}", bufferSize, bufferedIo);
- }
- if (name == null) {
- LOGGER.error("No name provided for FileAppender");
- return null;
- }
- if (fileName == null) {
- LOGGER.error("No filename provided for FileAppender with name {}", name);
- return null;
- }
- if (layout == null) {
- layout = PatternLayout.createDefaultLayout();
- }
-
- final FileManager manager = FileManager.getFileManager(fileName, append, locking, bufferedIo, lazyCreate,
- advertiseUri, layout, bufferSize, immediateFlush);
- if (manager == null) {
- return null;
- }
-
- return new FileAppender(name, layout, filter, manager, fileName, ignoreExceptions, !bufferedIo || immediateFlush,
- advertise ? config.getAdvertiser() : null);
+ public String getFileName() {
+ return this.fileName;
+ }
+
+ @Override
+ public void stop() {
+ super.stop();
+ if (advertiser != null) {
+ advertiser.unadvertise(advertisement);
+ }
}
}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/06022018/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderTest.java
index 8a9603c..b706c31 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderTest.java
@@ -33,6 +33,7 @@ import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.core.Appender;
import org.apache.logging.log4j.core.Layout;
import org.apache.logging.log4j.core.LogEvent;
import org.apache.logging.log4j.core.impl.Log4jLogEvent;
@@ -89,10 +90,19 @@ public class FileAppenderTest {
@Test
public void testLazyCreate() throws Exception {
- final Layout<String> layout = PatternLayout.newBuilder().withPattern(PatternLayout.SIMPLE_CONVERSION_PATTERN)
- .build();
- final FileAppender appender = FileAppender.createAppender(FILE_NAME, true, false, "test", false, false, false,
- 1, layout, null, false, null, lazyCreate, null);
+ final Layout<String> layout = createPatternLayout();
+ // @formatter:off
+ final FileAppender appender = FileAppender.newBuilder()
+ .withFileName(FILE_NAME)
+ .withName("test")
+ .withImmediateFlush(false)
+ .withIgnoreExceptions(false)
+ .withBufferedIo(false)
+ .withBufferSize(1)
+ .withLayout(layout)
+ .withLazyCreate(lazyCreate)
+ .build();
+ // @formatter:on
Assert.assertEquals(lazyCreate, appender.getManager().isLazyCreate());
try {
Assert.assertNotEquals(lazyCreate, Files.exists(PATH));
@@ -104,12 +114,26 @@ public class FileAppenderTest {
Assert.assertNotEquals(lazyCreate, Files.exists(PATH));
}
+ private static PatternLayout createPatternLayout() {
+ return PatternLayout.newBuilder().withPattern(PatternLayout.SIMPLE_CONVERSION_PATTERN)
+ .build();
+ }
+
@Test
public void testSmallestBufferSize() throws Exception {
- final Layout<String> layout = PatternLayout.newBuilder().withPattern(PatternLayout.SIMPLE_CONVERSION_PATTERN)
- .build();
- final FileAppender appender = FileAppender.createAppender(FILE_NAME, true, false, "test", false, false, false,
- 1, layout, null, false, null, lazyCreate, null);
+ final Layout<String> layout = createPatternLayout();
+ // @formatter:off
+ final FileAppender appender = FileAppender.newBuilder()
+ .withFileName(FILE_NAME)
+ .withName("test")
+ .withImmediateFlush(false)
+ .withIgnoreExceptions(false)
+ .withBufferedIo(false)
+ .withBufferSize(1)
+ .withLayout(layout)
+ .withLazyCreate(lazyCreate)
+ .build();
+ // @formatter:on
try {
appender.start();
final File file = new File(FILE_NAME);
@@ -204,12 +228,21 @@ public class FileAppenderTest {
verifyFile(logEventCount * processCount);
}
- private static void writer(final boolean lock, final int logEventCount, final String name, boolean lazyCreate,
+ private static void writer(final boolean locking, final int logEventCount, final String name, boolean lazyCreate,
boolean concurrent) throws Exception {
- final Layout<String> layout = PatternLayout.newBuilder().withPattern(PatternLayout.SIMPLE_CONVERSION_PATTERN)
- .build();
- final FileAppender appender = FileAppender.createAppender(FILE_NAME, true, lock, "test", false, false, false,
- FileAppender.DEFAULT_BUFFER_SIZE, layout, null, false, null, lazyCreate, null);
+ final Layout<String> layout = createPatternLayout();
+ // @formatter:off
+ final FileAppender appender = FileAppender.newBuilder()
+ .withFileName(FILE_NAME)
+ .withName("test")
+ .withImmediateFlush(false)
+ .withIgnoreExceptions(false)
+ .withLocking(locking)
+ .withBufferedIo(false)
+ .withLayout(layout)
+ .withLazyCreate(lazyCreate)
+ .build();
+ // @formatter:on
Assert.assertEquals(lazyCreate, appender.getManager().isLazyCreate());
try {
appender.start();
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/06022018/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/OutputStreamAppenderTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/OutputStreamAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/OutputStreamAppenderTest.java
index dd17dfb..845f88f 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/OutputStreamAppenderTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/OutputStreamAppenderTest.java
@@ -92,9 +92,17 @@ public class OutputStreamAppenderTest {
public void testUpdatePatternWithFileAppender() {
final LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
final Configuration config = ctx.getConfiguration();
- final Layout<?> layout = PatternLayout.createDefaultLayout();
- final Appender appender = FileAppender.createAppender("target/" + getClass().getName() + ".log", false,
- false, "File", true, false, false, 4000, layout, null, false, null, false, config);
+ // @formatter:off
+ final Appender appender = FileAppender.newBuilder()
+ .withFileName("target/" + getClass().getName() + ".log")
+ .withAppend(false)
+ .withName("File")
+ .withIgnoreExceptions(false)
+ .withBufferedIo(false)
+ .withBufferSize(4000)
+ .withConfig(config)
+ .build();
+ // @formatter:on
appender.start();
config.addAppender(appender);
ConfigurationTestUtils.updateLoggers(appender, config);
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/06022018/log4j-core/src/test/java/org/apache/logging/log4j/core/config/CustomConfigurationTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/CustomConfigurationTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/CustomConfigurationTest.java
index 6888204..6c7b5f0 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/CustomConfigurationTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/CustomConfigurationTest.java
@@ -80,8 +80,17 @@ public class CustomConfigurationTest {
.withPattern(PatternLayout.SIMPLE_CONVERSION_PATTERN)
.withConfiguration(config)
.build();
- final Appender appender = FileAppender.createAppender(LOG_FILE, false, false, "File", true,
- false, false, 4000, layout, null, false, null, false, config);
+ // @formatter:off
+ final FileAppender appender = FileAppender.newBuilder()
+ .withFileName(LOG_FILE)
+ .withAppend(false)
+ .withName("File")
+ .withIgnoreExceptions(false)
+ .withBufferSize(4000)
+ .withBufferedIo(false)
+ .withLayout(layout)
+ .build();
+ // @formatter:on
appender.start();
config.addAppender(appender);
final AppenderRef ref = AppenderRef.createAppenderRef("File", null, null);
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/06022018/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 922aef0..ad03663 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -72,6 +72,9 @@
<action issue="LOG4J2-1458" dev="ggregory" type="add" due-to="Gary Gregory">
[PatternLayout] Add an ANSI option to %message.
</action>
+ <action issue="LOG4J2-1505" dev="ggregory" type="add" due-to="Gary Gregory">
+ Create a Builder for FileAppender.
+ </action>
<action issue="LOG4J2-1458" dev="ggregory" type="update" due-to="Gary Gregory">
Update Jackson from 2.7.5 to 2.8.0.
</action>
[45/50] logging-log4j2 git commit: Unnecessary semicolon.
Posted by rp...@apache.org.
Unnecessary semicolon.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/3fde6e79
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/3fde6e79
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/3fde6e79
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: 3fde6e792a2c69cb679a685c257d08103ddf3b6e
Parents: 7b973ef
Author: Gary Gregory <gg...@apache.org>
Authored: Thu Aug 11 14:56:26 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Thu Aug 11 14:56:26 2016 -0700
----------------------------------------------------------------------
.../log4j/core/appender/rolling/DefaultRolloverStrategy.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/3fde6e79/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/DefaultRolloverStrategy.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/DefaultRolloverStrategy.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/DefaultRolloverStrategy.java
index dd1f42c..ab31f30 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/DefaultRolloverStrategy.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/DefaultRolloverStrategy.java
@@ -169,7 +169,7 @@ public class DefaultRolloverStrategy implements RolloverStrategy {
File target(final String fileName) {
return new File(fileName);
}
- };
+ }
/**
* Allow subclasses access to the status logger without creating another instance.
[33/50] logging-log4j2 git commit: Javadoc: Use the active voice.
Posted by rp...@apache.org.
Javadoc: Use the active voice.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/4eae71ba
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/4eae71ba
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/4eae71ba
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: 4eae71ba75f6b4a147076af0eafeb8b13ddd9a61
Parents: a80ec9d
Author: Gary Gregory <gg...@apache.org>
Authored: Mon Aug 8 17:16:48 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Mon Aug 8 17:16:48 2016 -0700
----------------------------------------------------------------------
.../java/org/apache/logging/log4j/core/config/AppendersPlugin.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4eae71ba/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppendersPlugin.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppendersPlugin.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppendersPlugin.java
index fc939e9..e5ae0db 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppendersPlugin.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppendersPlugin.java
@@ -34,7 +34,7 @@ public final class AppendersPlugin {
}
/**
- * Create a Map of the Appenders.
+ * Creates a Map of the Appenders.
* @param appenders An array of Appenders.
* @return The Appender Map.
*/
[38/50] logging-log4j2 git commit: Add test case of a typed Builder
(Builder).
Posted by rp...@apache.org.
Add test case of a typed Builder (Builder<T>).
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/f95a85b8
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/f95a85b8
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/f95a85b8
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: f95a85b8dc87704a678f70e4f6c5061c67cf26c4
Parents: ba677d8
Author: Gary Gregory <gg...@apache.org>
Authored: Tue Aug 9 17:21:56 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Tue Aug 9 17:21:56 2016 -0700
----------------------------------------------------------------------
.../ValidatingPluginWithTypedBuilder.java | 70 +++++++++++++++++++
.../ValidatingPluginWithTypedBuilderTest.java | 71 ++++++++++++++++++++
2 files changed, 141 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/f95a85b8/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/validation/ValidatingPluginWithTypedBuilder.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/validation/ValidatingPluginWithTypedBuilder.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/validation/ValidatingPluginWithTypedBuilder.java
new file mode 100644
index 0000000..9ebb85e
--- /dev/null
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/validation/ValidatingPluginWithTypedBuilder.java
@@ -0,0 +1,70 @@
+/*
+ * 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.logging.log4j.core.config.plugins.validation;
+
+import java.util.Objects;
+
+import org.apache.logging.log4j.core.config.plugins.Plugin;
+import org.apache.logging.log4j.core.config.plugins.PluginBuilderAttribute;
+import org.apache.logging.log4j.core.config.plugins.PluginBuilderFactory;
+import org.apache.logging.log4j.core.config.plugins.PluginFactory;
+import org.apache.logging.log4j.core.config.plugins.validation.constraints.Required;
+
+/**
+ *
+ */
+@Plugin(name = "ValidatingPluginWithTypedBuilder", category = "Test")
+public class ValidatingPluginWithTypedBuilder {
+
+ private final String name;
+
+ public ValidatingPluginWithTypedBuilder(final String name) {
+ this.name = Objects.requireNonNull(name, "name");
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ @PluginFactory
+ public static ValidatingPluginWithTypedBuilder newValidatingPlugin(
+ @Required(message = "The name given by the factory is null") final String name) {
+ return new ValidatingPluginWithTypedBuilder(name);
+ }
+
+ @PluginBuilderFactory
+ public static Builder<Integer> newBuilder() {
+ return new Builder<>();
+ }
+
+ public static class Builder<T> implements org.apache.logging.log4j.core.util.Builder<ValidatingPluginWithTypedBuilder> {
+
+ @PluginBuilderAttribute
+ @Required(message = "The name given by the builder is null")
+ private String name;
+
+ public Builder<T> withName(final String name) {
+ this.name = name;
+ return this;
+ }
+
+ @Override
+ public ValidatingPluginWithTypedBuilder build() {
+ return new ValidatingPluginWithTypedBuilder(name);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/f95a85b8/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/validation/validators/ValidatingPluginWithTypedBuilderTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/validation/validators/ValidatingPluginWithTypedBuilderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/validation/validators/ValidatingPluginWithTypedBuilderTest.java
new file mode 100644
index 0000000..ae236b4
--- /dev/null
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/validation/validators/ValidatingPluginWithTypedBuilderTest.java
@@ -0,0 +1,71 @@
+/*
+ * 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.logging.log4j.core.config.plugins.validation.validators;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+
+import org.apache.logging.log4j.core.config.Node;
+import org.apache.logging.log4j.core.config.NullConfiguration;
+import org.apache.logging.log4j.core.config.plugins.util.PluginBuilder;
+import org.apache.logging.log4j.core.config.plugins.util.PluginManager;
+import org.apache.logging.log4j.core.config.plugins.util.PluginType;
+import org.apache.logging.log4j.core.config.plugins.validation.ValidatingPluginWithTypedBuilder;
+import org.junit.Before;
+import org.junit.Test;
+
+public class ValidatingPluginWithTypedBuilderTest {
+
+ private PluginType<ValidatingPluginWithTypedBuilder> plugin;
+ private Node node;
+
+ @SuppressWarnings("unchecked")
+ @Before
+ public void setUp() throws Exception {
+ final PluginManager manager = new PluginManager("Test");
+ manager.collectPlugins();
+ plugin = (PluginType<ValidatingPluginWithTypedBuilder>) manager
+ .getPluginType("ValidatingPluginWithTypedBuilder");
+ assertNotNull("Rebuild this module to make sure annotaion processing kicks in.", plugin);
+ node = new Node(null, "Validator", plugin);
+ }
+
+ @Test
+ public void testNullDefaultValue() throws Exception {
+ // @formatter:off
+ final ValidatingPluginWithTypedBuilder validatingPlugin = (ValidatingPluginWithTypedBuilder)
+ new PluginBuilder(plugin).
+ withConfiguration(new NullConfiguration()).
+ withConfigurationNode(node).build();
+ // @formatter:on
+ assertNull(validatingPlugin);
+ }
+
+ @Test
+ public void testNonNullValue() throws Exception {
+ node.getAttributes().put("name", "foo");
+ // @formatter:off
+ final ValidatingPluginWithTypedBuilder validatingPlugin = (ValidatingPluginWithTypedBuilder)
+ new PluginBuilder(plugin).
+ withConfiguration(new NullConfiguration()).
+ withConfigurationNode(node).build();
+ // @formatter:on
+ assertNotNull(validatingPlugin);
+ assertEquals("foo", validatingPlugin.getName());
+ }
+}
[30/50] logging-log4j2 git commit: Revert.
Posted by rp...@apache.org.
Revert.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/eee314cd
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/eee314cd
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/eee314cd
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: eee314cdb3eb189a3b0f7d9e239e3e6b303bcb37
Parents: 4b4a07b
Author: Gary Gregory <gg...@apache.org>
Authored: Mon Aug 8 13:52:21 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Mon Aug 8 13:52:21 2016 -0700
----------------------------------------------------------------------
.../core/appender/rolling/OnStartupTriggeringPolicyTest.java | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/eee314cd/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/OnStartupTriggeringPolicyTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/OnStartupTriggeringPolicyTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/OnStartupTriggeringPolicyTest.java
index b21a7e7..c809ddb 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/OnStartupTriggeringPolicyTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/OnStartupTriggeringPolicyTest.java
@@ -28,6 +28,7 @@ import org.apache.logging.log4j.core.config.Configuration;
import org.apache.logging.log4j.core.config.DefaultConfiguration;
import org.apache.logging.log4j.core.layout.PatternLayout;
import org.apache.logging.log4j.core.util.datetime.FastDateFormat;
+import org.junit.Ignore;
import org.junit.Test;
/**
@@ -67,7 +68,7 @@ public class OnStartupTriggeringPolicyTest {
configuration);
final OnStartupTriggeringPolicy policy = OnStartupTriggeringPolicy.createPolicy(1);
final RollingFileManager manager = RollingFileManager.getFileManager(TARGET_FILE, TARGET_PATTERN, true, false,
- policy, strategy, null, layout, 8192, true, false);
+ policy, strategy, null, layout, 8192, true);
try {
manager.initialize();
assertTrue(Files.exists(target));
[16/50] logging-log4j2 git commit: Javadoc. Clean up formatting.
Posted by rp...@apache.org.
Javadoc. Clean up formatting.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/69f02bd8
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/69f02bd8
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/69f02bd8
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: 69f02bd8a38ed3a31a17274969b63b105eb2c910
Parents: 262f30d
Author: Gary Gregory <gg...@apache.org>
Authored: Mon Aug 8 09:25:05 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Mon Aug 8 09:25:05 2016 -0700
----------------------------------------------------------------------
.../apache/logging/log4j/core/appender/rolling/FileSizeTest.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/69f02bd8/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/FileSizeTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/FileSizeTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/FileSizeTest.java
index 4b7b6bb..8121ce7 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/FileSizeTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/FileSizeTest.java
@@ -20,14 +20,14 @@ import org.junit.Test;
import static org.junit.Assert.*;
/**
- *
+ * Tests {@link FileSize}.
*/
public class FileSizeTest {
private final static long EXPECTED = 10 * 1024;
+
@Test
public void testFileSize() throws Exception {
-
long value = FileSize.parse("10KB", 0);
assertTrue("unexpected value " + value, value == EXPECTED);
value = FileSize.parse("10 KB", 0);
[14/50] logging-log4j2 git commit: [LOG4J2-1501] FileAppender should
be able to create files lazily.
Posted by rp...@apache.org.
[LOG4J2-1501] FileAppender should be able to create files lazily.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/e718a64d
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/e718a64d
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/e718a64d
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: e718a64d5a4dec9108c369fc11370f03734177ea
Parents: 8ff0863
Author: Gary Gregory <gg...@apache.org>
Authored: Mon Aug 8 09:15:14 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Mon Aug 8 09:15:14 2016 -0700
----------------------------------------------------------------------
.../log4j/core/appender/FileAppender.java | 26 ++++++++++----------
1 file changed, 13 insertions(+), 13 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/e718a64d/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileAppender.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileAppender.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileAppender.java
index a69758b..b4eb6f6 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileAppender.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileAppender.java
@@ -101,19 +101,19 @@ public final class FileAppender extends AbstractOutputStreamAppender<FileManager
@Deprecated
public static FileAppender createAppender(
// @formatter:off
- @PluginAttribute("fileName") final String fileName,
- @PluginAttribute("append") final String append,
- @PluginAttribute("locking") final String locking,
- @PluginAttribute("name") final String name,
- @PluginAttribute("immediateFlush") final String immediateFlush,
- @PluginAttribute("ignoreExceptions") final String ignore,
- @PluginAttribute("bufferedIo") final String bufferedIo,
- @PluginAttribute("bufferSize") final String bufferSizeStr,
- @PluginElement("Layout") Layout<? extends Serializable> layout,
- @PluginElement("Filter") final Filter filter,
- @PluginAttribute("advertise") final String advertise,
- @PluginAttribute("advertiseUri") final String advertiseUri,
- @PluginConfiguration final Configuration config) {
+ final String fileName,
+ final String append,
+ final String locking,
+ final String name,
+ final String immediateFlush,
+ final String ignore,
+ final String bufferedIo,
+ final String bufferSizeStr,
+ Layout<? extends Serializable> layout,
+ final Filter filter,
+ final String advertise,
+ final String advertiseUri,
+ final Configuration config) {
// @formatter:on
final boolean isAppend = Booleans.parseBoolean(append, true);
final boolean isLocking = Boolean.parseBoolean(locking);
[04/50] logging-log4j2 git commit: Do not go through the delete retry
loop if a file or folder does not exist.
Posted by rp...@apache.org.
Do not go through the delete retry loop if a file or folder does not
exist.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/a3b5f73a
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/a3b5f73a
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/a3b5f73a
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: a3b5f73a6e08e9d91ba1a82f22727213c7382e46
Parents: cc284d1
Author: Gary Gregory <gg...@apache.org>
Authored: Sun Aug 7 11:19:37 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Sun Aug 7 11:19:37 2016 -0700
----------------------------------------------------------------------
.../apache/logging/log4j/junit/CleanFiles.java | 26 +++++++++++---------
.../logging/log4j/junit/CleanFolders.java | 24 +++++++++---------
2 files changed, 27 insertions(+), 23 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/a3b5f73a/log4j-core/src/test/java/org/apache/logging/log4j/junit/CleanFiles.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/junit/CleanFiles.java b/log4j-core/src/test/java/org/apache/logging/log4j/junit/CleanFiles.java
index 5de9c63..1021bf1 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/junit/CleanFiles.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/junit/CleanFiles.java
@@ -47,19 +47,21 @@ public class CleanFiles extends AbstractExternalFileCleaner {
@Override
protected void clean() {
for (final File file : getFiles()) {
- for (int i = 0; i < MAX_TRIES; i++) {
- try {
- if (Files.deleteIfExists(file.toPath())) {
- // Break from MAX_TRIES and move on to the next file.
- break;
+ if (file.exists()) {
+ for (int i = 0; i < MAX_TRIES; i++) {
+ try {
+ if (Files.deleteIfExists(file.toPath())) {
+ // Break from MAX_TRIES and move on to the next file.
+ break;
+ }
+ } catch (final IOException e) {
+ Assert.fail(file + ": " + e.toString());
+ }
+ try {
+ Thread.sleep(200);
+ } catch (final InterruptedException ignored) {
+ // ignore
}
- } catch (final IOException e) {
- Assert.fail(file + ": " + e.toString());
- }
- try {
- Thread.sleep(200);
- } catch (final InterruptedException ignored) {
- // ignore
}
}
}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/a3b5f73a/log4j-core/src/test/java/org/apache/logging/log4j/junit/CleanFolders.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/junit/CleanFolders.java b/log4j-core/src/test/java/org/apache/logging/log4j/junit/CleanFolders.java
index a3c84c0..6a2f8d6 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/junit/CleanFolders.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/junit/CleanFolders.java
@@ -55,18 +55,20 @@ public class CleanFolders extends AbstractExternalFileCleaner {
Map<Path, IOException> failures = new HashMap<>();
for (final File folder : getFiles()) {
- final Path path = folder.toPath();
- for (int i = 0; i < MAX_TRIES; i++) {
- try {
- cleanFolder(path);
- if (failures.containsKey(path)) {
- failures.remove(path);
+ if (folder.exists()) {
+ final Path path = folder.toPath();
+ for (int i = 0; i < MAX_TRIES; i++) {
+ try {
+ cleanFolder(path);
+ if (failures.containsKey(path)) {
+ failures.remove(path);
+ }
+ // break from MAX_TRIES and goes to the next folder
+ break;
+ } catch (final IOException e) {
+ // We will try again.
+ failures.put(path, e);
}
- // break from MAX_TRIES and goes to the next folder
- break;
- } catch (final IOException e) {
- // We will try again.
- failures.put(path, e);
}
}
}
[24/50] logging-log4j2 git commit: Fix commented out code.
Posted by rp...@apache.org.
Fix commented out code.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/1b5bcb9e
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/1b5bcb9e
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/1b5bcb9e
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: 1b5bcb9e1c7933463f2e45b3d7dcf5da3ea5600e
Parents: 93a9846
Author: Gary Gregory <gg...@apache.org>
Authored: Mon Aug 8 11:58:39 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Mon Aug 8 11:58:39 2016 -0700
----------------------------------------------------------------------
.../appender/rolling/OnStartupTriggeringPolicyTest.java | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/1b5bcb9e/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/OnStartupTriggeringPolicyTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/OnStartupTriggeringPolicyTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/OnStartupTriggeringPolicyTest.java
index 2047ae4..62f3f46 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/OnStartupTriggeringPolicyTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/OnStartupTriggeringPolicyTest.java
@@ -28,6 +28,9 @@ import org.apache.logging.log4j.core.config.Configuration;
import org.apache.logging.log4j.core.config.DefaultConfiguration;
import org.apache.logging.log4j.core.layout.PatternLayout;
import org.apache.logging.log4j.core.util.datetime.FastDateFormat;
+import org.apache.logging.log4j.junit.CleanFiles;
+import org.apache.logging.log4j.junit.CleanFolders;
+import org.junit.Rule;
import org.junit.Test;
/**
@@ -42,8 +45,8 @@ public class OnStartupTriggeringPolicyTest {
private static final String TEST_DATA = "Hello world!";
private static final FastDateFormat formatter = FastDateFormat.getInstance("MM-dd-yyyy");
- //@Rule
- //public CleanFiles rule = new CleanFolders("target/rollOnStartup");
+ // @Rule
+ // public CleanFolders rule = new CleanFolders("target/rollOnStartup");
@Test
public void testPolicy() throws Exception {
@@ -67,7 +70,7 @@ public class OnStartupTriggeringPolicyTest {
configuration);
final OnStartupTriggeringPolicy policy = OnStartupTriggeringPolicy.createPolicy(1);
final RollingFileManager manager = RollingFileManager.getFileManager(TARGET_FILE, TARGET_PATTERN, true, false,
- policy, strategy, null, layout, 8192, true);
+ policy, strategy, null, layout, 8192, true, false);
try {
manager.initialize();
assertTrue(Files.exists(target));
[32/50] logging-log4j2 git commit: No need to initialize booleans to
false.
Posted by rp...@apache.org.
No need to initialize booleans to false.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/a80ec9da
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/a80ec9da
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/a80ec9da
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: a80ec9da0b4db12c5af5630dfb659573124b7367
Parents: 1558b36
Author: Gary Gregory <gg...@apache.org>
Authored: Mon Aug 8 16:29:32 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Mon Aug 8 16:29:32 2016 -0700
----------------------------------------------------------------------
.../java/org/apache/logging/log4j/core/layout/PatternLayout.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/a80ec9da/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/PatternLayout.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/PatternLayout.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/PatternLayout.java
index 8afc7fd..897be86 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/PatternLayout.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/PatternLayout.java
@@ -424,7 +424,7 @@ public final class PatternLayout extends AbstractStringLayout {
private boolean alwaysWriteExceptions = true;
@PluginBuilderAttribute
- private boolean noConsoleNoAnsi = false;
+ private boolean noConsoleNoAnsi;
@PluginBuilderAttribute
private String header;
[36/50] logging-log4j2 git commit: Remove unused method.
Posted by rp...@apache.org.
Remove unused method.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/2d40959a
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/2d40959a
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/2d40959a
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: 2d40959a1ee273bc6e30fe62d1f8f4fe89fe3732
Parents: 9972ee5
Author: ggregory <gg...@US-L-GG02.rocketsoftware.com>
Authored: Tue Aug 9 10:21:15 2016 -0700
Committer: ggregory <gg...@US-L-GG02.rocketsoftware.com>
Committed: Tue Aug 9 10:21:15 2016 -0700
----------------------------------------------------------------------
.../config/plugins/util/PluginManagerPackagesTest.java | 10 +++-------
1 file changed, 3 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/2d40959a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/util/PluginManagerPackagesTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/util/PluginManagerPackagesTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/util/PluginManagerPackagesTest.java
index 2ebefe0..5808b10 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/util/PluginManagerPackagesTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/util/PluginManagerPackagesTest.java
@@ -16,6 +16,9 @@
*/
package org.apache.logging.log4j.core.config.plugins.util;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
@@ -39,20 +42,13 @@ import org.apache.logging.log4j.core.config.Configurator;
import org.apache.logging.log4j.status.StatusLogger;
import org.apache.logging.log4j.test.appender.ListAppender;
import org.junit.AfterClass;
-import org.junit.BeforeClass;
import org.junit.Test;
-import static org.junit.Assert.*;
-
public class PluginManagerPackagesTest {
private static Configuration config;
private static ListAppender listAppender;
private static LoggerContext ctx;
- @BeforeClass
- public static void setupClass() {
- }
-
@AfterClass
public static void cleanupClass() {
System.clearProperty(ConfigurationFactory.CONFIGURATION_FILE_PROPERTY);
[13/50] logging-log4j2 git commit: Javadoc: Use the active voice.
Posted by rp...@apache.org.
Javadoc: Use the active voice.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/8ff08637
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/8ff08637
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/8ff08637
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: 8ff086371372022700e6bee3da4088e51cd66874
Parents: 61f706f
Author: Gary Gregory <gg...@apache.org>
Authored: Mon Aug 8 08:52:58 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Mon Aug 8 08:52:58 2016 -0700
----------------------------------------------------------------------
.../core/appender/RollingFileAppender.java | 404 +++++++++----------
1 file changed, 202 insertions(+), 202 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/8ff08637/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/RollingFileAppender.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/RollingFileAppender.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/RollingFileAppender.java
index 88bbb9a..2b06287 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/RollingFileAppender.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/RollingFileAppender.java
@@ -1,202 +1,202 @@
-/*
- * 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.logging.log4j.core.appender;
-
-import java.io.Serializable;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.zip.Deflater;
-
-import org.apache.logging.log4j.core.Filter;
-import org.apache.logging.log4j.core.Layout;
-import org.apache.logging.log4j.core.LogEvent;
-import org.apache.logging.log4j.core.appender.rolling.DefaultRolloverStrategy;
-import org.apache.logging.log4j.core.appender.rolling.RollingFileManager;
-import org.apache.logging.log4j.core.appender.rolling.RolloverStrategy;
-import org.apache.logging.log4j.core.appender.rolling.TriggeringPolicy;
-import org.apache.logging.log4j.core.config.Configuration;
-import org.apache.logging.log4j.core.config.plugins.Plugin;
-import org.apache.logging.log4j.core.config.plugins.PluginAttribute;
-import org.apache.logging.log4j.core.config.plugins.PluginConfiguration;
-import org.apache.logging.log4j.core.config.plugins.PluginElement;
-import org.apache.logging.log4j.core.config.plugins.PluginFactory;
-import org.apache.logging.log4j.core.layout.PatternLayout;
-import org.apache.logging.log4j.core.net.Advertiser;
-import org.apache.logging.log4j.core.util.Booleans;
-import org.apache.logging.log4j.core.util.Integers;
-
-/**
- * An appender that writes to files and can roll over at intervals.
- */
-@Plugin(name = "RollingFile", category = "Core", elementType = "appender", printObject = true)
-public final class RollingFileAppender extends AbstractOutputStreamAppender<RollingFileManager> {
-
- private static final int DEFAULT_BUFFER_SIZE = 8192;
-
- private final String fileName;
- private final String filePattern;
- private Object advertisement;
- private final Advertiser advertiser;
-
- private RollingFileAppender(final String name, final Layout<? extends Serializable> layout, final Filter filter,
- final RollingFileManager manager, final String fileName, final String filePattern,
- final boolean ignoreExceptions, final boolean immediateFlush, final Advertiser advertiser) {
- super(name, layout, filter, ignoreExceptions, immediateFlush, manager);
- if (advertiser != null) {
- final Map<String, String> configuration = new HashMap<>(layout.getContentFormat());
- configuration.put("contentType", layout.getContentType());
- configuration.put("name", name);
- advertisement = advertiser.advertise(configuration);
- }
- this.fileName = fileName;
- this.filePattern = filePattern;
- this.advertiser = advertiser;
- }
-
- @Override
- public void stop() {
- super.stop();
- if (advertiser != null) {
- advertiser.unadvertise(advertisement);
- }
- }
-
- /**
- * Write the log entry rolling over the file when required.
-
- * @param event The LogEvent.
- */
- @Override
- public void append(final LogEvent event) {
- getManager().checkRollover(event);
- super.append(event);
- }
-
- /**
- * Returns the File name for the Appender.
- * @return The file name.
- */
- public String getFileName() {
- return fileName;
- }
-
- /**
- * Returns the file pattern used when rolling over.
- * @return The file pattern.
- */
- public String getFilePattern() {
- return filePattern;
- }
-
- /**
- * Returns the triggering policy.
- * @param <T> TriggeringPolicy type
- * @return The TriggeringPolicy
- */
- public <T extends TriggeringPolicy> T getTriggeringPolicy() {
- return getManager().getTriggeringPolicy();
- }
-
- /**
- * Create a RollingFileAppender.
- * @param fileName The name of the file that is actively written to. (required).
- * @param filePattern The pattern of the file name to use on rollover. (required).
- * @param append If true, events are appended to the file. If false, the file
- * is overwritten when opened. Defaults to "true"
- * @param name The name of the Appender (required).
- * @param bufferedIO When true, I/O will be buffered. Defaults to "true".
- * @param bufferSizeStr buffer size for buffered IO (default is 8192).
- * @param immediateFlush When true, events are immediately flushed. Defaults to "true".
- * @param policy The triggering policy. (required).
- * @param strategy The rollover strategy. Defaults to DefaultRolloverStrategy.
- * @param layout The layout to use (defaults to the default PatternLayout).
- * @param filter The Filter or null.
- * @param ignore If {@code "true"} (default) exceptions encountered when appending events are logged; otherwise
- * they are propagated to the caller.
- * @param advertise "true" if the appender configuration should be advertised, "false" otherwise.
- * @param advertiseURI The advertised URI which can be used to retrieve the file contents.
- * @param config The Configuration.
- * @return A RollingFileAppender.
- */
- @PluginFactory
- public static RollingFileAppender createAppender(
- @PluginAttribute("fileName") final String fileName,
- @PluginAttribute("filePattern") final String filePattern,
- @PluginAttribute("append") final String append,
- @PluginAttribute("name") final String name,
- @PluginAttribute("bufferedIO") final String bufferedIO,
- @PluginAttribute("bufferSize") final String bufferSizeStr,
- @PluginAttribute("immediateFlush") final String immediateFlush,
- @PluginElement("Policy") final TriggeringPolicy policy,
- @PluginElement("Strategy") RolloverStrategy strategy,
- @PluginElement("Layout") Layout<? extends Serializable> layout,
- @PluginElement("Filter") final Filter filter,
- @PluginAttribute("ignoreExceptions") final String ignore,
- @PluginAttribute("advertise") final String advertise,
- @PluginAttribute("advertiseURI") final String advertiseURI,
- @PluginConfiguration final Configuration config) {
-
- final boolean isAppend = Booleans.parseBoolean(append, true);
- final boolean ignoreExceptions = Booleans.parseBoolean(ignore, true);
- final boolean isBuffered = Booleans.parseBoolean(bufferedIO, true);
- final boolean isFlush = Booleans.parseBoolean(immediateFlush, true);
- final boolean isAdvertise = Boolean.parseBoolean(advertise);
- final int bufferSize = Integers.parseInt(bufferSizeStr, DEFAULT_BUFFER_SIZE);
- if (!isBuffered && bufferSize > 0) {
- LOGGER.warn("The bufferSize is set to {} but bufferedIO is not true: {}", bufferSize, bufferedIO);
- }
- if (name == null) {
- LOGGER.error("No name provided for FileAppender");
- return null;
- }
-
- if (fileName == null) {
- LOGGER.error("No filename was provided for FileAppender with name " + name);
- return null;
- }
-
- if (filePattern == null) {
- LOGGER.error("No filename pattern provided for FileAppender with name " + name);
- return null;
- }
-
- if (policy == null) {
- LOGGER.error("A TriggeringPolicy must be provided");
- return null;
- }
-
- if (strategy == null) {
- strategy = DefaultRolloverStrategy.createStrategy(null, null, null,
- String.valueOf(Deflater.DEFAULT_COMPRESSION), null, true, config);
- }
-
- if (layout == null) {
- layout = PatternLayout.createDefaultLayout();
- }
-
- final RollingFileManager manager = RollingFileManager.getFileManager(fileName, filePattern, isAppend,
- isBuffered, policy, strategy, advertiseURI, layout, bufferSize, isFlush);
- if (manager == null) {
- return null;
- }
-
- manager.initialize();
-
- return new RollingFileAppender(name, layout, filter, manager, fileName, filePattern,
- ignoreExceptions, isFlush, isAdvertise ? config.getAdvertiser() : null);
- }
-}
+/*
+ * 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.logging.log4j.core.appender;
+
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.zip.Deflater;
+
+import org.apache.logging.log4j.core.Filter;
+import org.apache.logging.log4j.core.Layout;
+import org.apache.logging.log4j.core.LogEvent;
+import org.apache.logging.log4j.core.appender.rolling.DefaultRolloverStrategy;
+import org.apache.logging.log4j.core.appender.rolling.RollingFileManager;
+import org.apache.logging.log4j.core.appender.rolling.RolloverStrategy;
+import org.apache.logging.log4j.core.appender.rolling.TriggeringPolicy;
+import org.apache.logging.log4j.core.config.Configuration;
+import org.apache.logging.log4j.core.config.plugins.Plugin;
+import org.apache.logging.log4j.core.config.plugins.PluginAttribute;
+import org.apache.logging.log4j.core.config.plugins.PluginConfiguration;
+import org.apache.logging.log4j.core.config.plugins.PluginElement;
+import org.apache.logging.log4j.core.config.plugins.PluginFactory;
+import org.apache.logging.log4j.core.layout.PatternLayout;
+import org.apache.logging.log4j.core.net.Advertiser;
+import org.apache.logging.log4j.core.util.Booleans;
+import org.apache.logging.log4j.core.util.Integers;
+
+/**
+ * An appender that writes to files and can roll over at intervals.
+ */
+@Plugin(name = "RollingFile", category = "Core", elementType = "appender", printObject = true)
+public final class RollingFileAppender extends AbstractOutputStreamAppender<RollingFileManager> {
+
+ private static final int DEFAULT_BUFFER_SIZE = 8192;
+
+ private final String fileName;
+ private final String filePattern;
+ private Object advertisement;
+ private final Advertiser advertiser;
+
+ private RollingFileAppender(final String name, final Layout<? extends Serializable> layout, final Filter filter,
+ final RollingFileManager manager, final String fileName, final String filePattern,
+ final boolean ignoreExceptions, final boolean immediateFlush, final Advertiser advertiser) {
+ super(name, layout, filter, ignoreExceptions, immediateFlush, manager);
+ if (advertiser != null) {
+ final Map<String, String> configuration = new HashMap<>(layout.getContentFormat());
+ configuration.put("contentType", layout.getContentType());
+ configuration.put("name", name);
+ advertisement = advertiser.advertise(configuration);
+ }
+ this.fileName = fileName;
+ this.filePattern = filePattern;
+ this.advertiser = advertiser;
+ }
+
+ @Override
+ public void stop() {
+ super.stop();
+ if (advertiser != null) {
+ advertiser.unadvertise(advertisement);
+ }
+ }
+
+ /**
+ * Writes the log entry rolling over the file when required.
+
+ * @param event The LogEvent.
+ */
+ @Override
+ public void append(final LogEvent event) {
+ getManager().checkRollover(event);
+ super.append(event);
+ }
+
+ /**
+ * Returns the File name for the Appender.
+ * @return The file name.
+ */
+ public String getFileName() {
+ return fileName;
+ }
+
+ /**
+ * Returns the file pattern used when rolling over.
+ * @return The file pattern.
+ */
+ public String getFilePattern() {
+ return filePattern;
+ }
+
+ /**
+ * Returns the triggering policy.
+ * @param <T> TriggeringPolicy type
+ * @return The TriggeringPolicy
+ */
+ public <T extends TriggeringPolicy> T getTriggeringPolicy() {
+ return getManager().getTriggeringPolicy();
+ }
+
+ /**
+ * Creates a RollingFileAppender.
+ * @param fileName The name of the file that is actively written to. (required).
+ * @param filePattern The pattern of the file name to use on rollover. (required).
+ * @param append If true, events are appended to the file. If false, the file
+ * is overwritten when opened. Defaults to "true"
+ * @param name The name of the Appender (required).
+ * @param bufferedIO When true, I/O will be buffered. Defaults to "true".
+ * @param bufferSizeStr buffer size for buffered IO (default is 8192).
+ * @param immediateFlush When true, events are immediately flushed. Defaults to "true".
+ * @param policy The triggering policy. (required).
+ * @param strategy The rollover strategy. Defaults to DefaultRolloverStrategy.
+ * @param layout The layout to use (defaults to the default PatternLayout).
+ * @param filter The Filter or null.
+ * @param ignore If {@code "true"} (default) exceptions encountered when appending events are logged; otherwise
+ * they are propagated to the caller.
+ * @param advertise "true" if the appender configuration should be advertised, "false" otherwise.
+ * @param advertiseURI The advertised URI which can be used to retrieve the file contents.
+ * @param config The Configuration.
+ * @return A RollingFileAppender.
+ */
+ @PluginFactory
+ public static RollingFileAppender createAppender(
+ @PluginAttribute("fileName") final String fileName,
+ @PluginAttribute("filePattern") final String filePattern,
+ @PluginAttribute("append") final String append,
+ @PluginAttribute("name") final String name,
+ @PluginAttribute("bufferedIO") final String bufferedIO,
+ @PluginAttribute("bufferSize") final String bufferSizeStr,
+ @PluginAttribute("immediateFlush") final String immediateFlush,
+ @PluginElement("Policy") final TriggeringPolicy policy,
+ @PluginElement("Strategy") RolloverStrategy strategy,
+ @PluginElement("Layout") Layout<? extends Serializable> layout,
+ @PluginElement("Filter") final Filter filter,
+ @PluginAttribute("ignoreExceptions") final String ignore,
+ @PluginAttribute("advertise") final String advertise,
+ @PluginAttribute("advertiseURI") final String advertiseURI,
+ @PluginConfiguration final Configuration config) {
+
+ final boolean isAppend = Booleans.parseBoolean(append, true);
+ final boolean ignoreExceptions = Booleans.parseBoolean(ignore, true);
+ final boolean isBuffered = Booleans.parseBoolean(bufferedIO, true);
+ final boolean isFlush = Booleans.parseBoolean(immediateFlush, true);
+ final boolean isAdvertise = Boolean.parseBoolean(advertise);
+ final int bufferSize = Integers.parseInt(bufferSizeStr, DEFAULT_BUFFER_SIZE);
+ if (!isBuffered && bufferSize > 0) {
+ LOGGER.warn("The bufferSize is set to {} but bufferedIO is not true: {}", bufferSize, bufferedIO);
+ }
+ if (name == null) {
+ LOGGER.error("No name provided for FileAppender");
+ return null;
+ }
+
+ if (fileName == null) {
+ LOGGER.error("No filename was provided for FileAppender with name " + name);
+ return null;
+ }
+
+ if (filePattern == null) {
+ LOGGER.error("No filename pattern provided for FileAppender with name " + name);
+ return null;
+ }
+
+ if (policy == null) {
+ LOGGER.error("A TriggeringPolicy must be provided");
+ return null;
+ }
+
+ if (strategy == null) {
+ strategy = DefaultRolloverStrategy.createStrategy(null, null, null,
+ String.valueOf(Deflater.DEFAULT_COMPRESSION), null, true, config);
+ }
+
+ if (layout == null) {
+ layout = PatternLayout.createDefaultLayout();
+ }
+
+ final RollingFileManager manager = RollingFileManager.getFileManager(fileName, filePattern, isAppend,
+ isBuffered, policy, strategy, advertiseURI, layout, bufferSize, isFlush);
+ if (manager == null) {
+ return null;
+ }
+
+ manager.initialize();
+
+ return new RollingFileAppender(name, layout, filter, manager, fileName, filePattern,
+ ignoreExceptions, isFlush, isAdvertise ? config.getAdvertiser() : null);
+ }
+}
[19/50] logging-log4j2 git commit: Save lazy-create setting for
asserts.
Posted by rp...@apache.org.
Save lazy-create setting for asserts.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/32c9b992
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/32c9b992
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/32c9b992
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: 32c9b9923253a2122686f736b27c450fcbce8b11
Parents: dce2134
Author: Gary Gregory <gg...@apache.org>
Authored: Mon Aug 8 10:21:41 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Mon Aug 8 10:21:41 2016 -0700
----------------------------------------------------------------------
.../apache/logging/log4j/core/appender/FileManager.java | 11 +++++++++++
.../logging/log4j/core/appender/FileAppenderTest.java | 2 ++
2 files changed, 13 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/32c9b992/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileManager.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileManager.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileManager.java
index f88005a..c71bd95 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileManager.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileManager.java
@@ -40,6 +40,7 @@ public class FileManager extends OutputStreamManager {
private static final FileManagerFactory FACTORY = new FileManagerFactory();
private final boolean isAppend;
+ private final boolean isLazyCreate;
private final boolean isLocking;
private final String advertiseURI;
private final int bufferSize;
@@ -61,6 +62,7 @@ public class FileManager extends OutputStreamManager {
final ByteBuffer buffer) {
super(os, fileName, layout, writeHeader, buffer);
this.isAppend = append;
+ this.isLazyCreate = false;
this.isLocking = locking;
this.advertiseURI = advertiseURI;
this.bufferSize = buffer.capacity();
@@ -75,6 +77,7 @@ public class FileManager extends OutputStreamManager {
final ByteBuffer buffer) throws IOException {
super(fileName, lazyCreate, layout, writeHeader, buffer);
this.isAppend = append;
+ this.isLazyCreate = lazyCreate;
this.isLocking = locking;
this.advertiseURI = advertiseURI;
this.bufferSize = buffer.capacity();
@@ -153,6 +156,14 @@ public class FileManager extends OutputStreamManager {
}
/**
+ * Returns the lazy-create.
+ * @return true if the file will be lazy-created.
+ */
+ public boolean isLazyCreate() {
+ return isLazyCreate;
+ }
+
+ /**
* Returns the lock status.
* @return true if the file will be locked when writing, false otherwise.
*/
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/32c9b992/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderTest.java
index 7e2ba46..8a9603c 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderTest.java
@@ -93,6 +93,7 @@ public class FileAppenderTest {
.build();
final FileAppender appender = FileAppender.createAppender(FILE_NAME, true, false, "test", false, false, false,
1, layout, null, false, null, lazyCreate, null);
+ Assert.assertEquals(lazyCreate, appender.getManager().isLazyCreate());
try {
Assert.assertNotEquals(lazyCreate, Files.exists(PATH));
appender.start();
@@ -209,6 +210,7 @@ public class FileAppenderTest {
.build();
final FileAppender appender = FileAppender.createAppender(FILE_NAME, true, lock, "test", false, false, false,
FileAppender.DEFAULT_BUFFER_SIZE, layout, null, false, null, lazyCreate, null);
+ Assert.assertEquals(lazyCreate, appender.getManager().isLazyCreate());
try {
appender.start();
assertTrue("Appender did not start", appender.isStarted());
[44/50] logging-log4j2 git commit: FileAppender uses inherited
Builders.
Posted by rp...@apache.org.
FileAppender uses inherited Builders.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/7b973efa
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/7b973efa
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/7b973efa
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: 7b973efa8a02666ee00f6031c795a17181e15dba
Parents: 2207cae
Author: Gary Gregory <gg...@apache.org>
Authored: Wed Aug 10 21:19:57 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Wed Aug 10 21:19:57 2016 -0700
----------------------------------------------------------------------
.../log4j/core/appender/FileAppender.java | 118 +++++--------------
1 file changed, 29 insertions(+), 89 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/7b973efa/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileAppender.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileAppender.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileAppender.java
index a026850..e93e05f 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileAppender.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileAppender.java
@@ -27,9 +27,7 @@ import org.apache.logging.log4j.core.config.plugins.Plugin;
import org.apache.logging.log4j.core.config.plugins.PluginBuilderAttribute;
import org.apache.logging.log4j.core.config.plugins.PluginBuilderFactory;
import org.apache.logging.log4j.core.config.plugins.PluginConfiguration;
-import org.apache.logging.log4j.core.config.plugins.PluginElement;
import org.apache.logging.log4j.core.config.plugins.validation.constraints.Required;
-import org.apache.logging.log4j.core.layout.PatternLayout;
import org.apache.logging.log4j.core.net.Advertiser;
import org.apache.logging.log4j.core.util.Booleans;
import org.apache.logging.log4j.core.util.Integers;
@@ -42,8 +40,12 @@ public final class FileAppender extends AbstractOutputStreamAppender<FileManager
/**
* Builds FileAppender instances.
+ *
+ * @param <B>
+ * This builder class
*/
- public static class Builder implements org.apache.logging.log4j.core.util.Builder<FileAppender> {
+ public static class Builder<B extends Builder<B>> extends AbstractOutputStreamAppender.Builder<B>
+ implements org.apache.logging.log4j.core.util.Builder<FileAppender> {
@PluginBuilderAttribute
@Required
@@ -56,27 +58,11 @@ public final class FileAppender extends AbstractOutputStreamAppender<FileManager
private boolean locking;
@PluginBuilderAttribute
- @Required
- private String name;
-
- @PluginBuilderAttribute
- private boolean immediateFlush = true;
-
- @PluginBuilderAttribute
- private boolean ignoreExceptions = true;
-
- @PluginBuilderAttribute
private boolean bufferedIo = true;
@PluginBuilderAttribute
private int bufferSize = DEFAULT_BUFFER_SIZE;
- @PluginElement("Layout")
- private Layout<? extends Serializable> layout;
-
- @PluginElement("Filter")
- private Filter filter;
-
@PluginBuilderAttribute
private boolean advertise;
@@ -98,18 +84,16 @@ public final class FileAppender extends AbstractOutputStreamAppender<FileManager
if (!bufferedIo && bufferSize > 0) {
LOGGER.warn("The bufferSize is set to {} but bufferedIo is not true: {}", bufferSize, bufferedIo);
}
- if (layout == null) {
- layout = PatternLayout.createDefaultLayout();
- }
+ Layout<? extends Serializable> layout = getOrCreateLayout();
final FileManager manager = FileManager.getFileManager(fileName, append, locking, bufferedIo, lazyCreate,
- advertiseUri, layout, bufferSize, immediateFlush);
+ advertiseUri, layout, bufferSize, isImmediateFlush());
if (manager == null) {
return null;
}
- return new FileAppender(name, layout, filter, manager, fileName, ignoreExceptions,
- !bufferedIo || immediateFlush, advertise ? config.getAdvertiser() : null);
+ return new FileAppender(getName(), layout, getFilter(), manager, fileName, isIgnoreExceptions(),
+ !bufferedIo || isImmediateFlush(), advertise ? config.getAdvertiser() : null);
}
public String getAdvertiseUri() {
@@ -128,18 +112,6 @@ public final class FileAppender extends AbstractOutputStreamAppender<FileManager
return fileName;
}
- public Filter getFilter() {
- return filter;
- }
-
- public Layout<? extends Serializable> getLayout() {
- return layout;
- }
-
- public String getName() {
- return name;
- }
-
public boolean isAdvertise() {
return advertise;
}
@@ -152,14 +124,6 @@ public final class FileAppender extends AbstractOutputStreamAppender<FileManager
return bufferedIo;
}
- public boolean isIgnoreExceptions() {
- return ignoreExceptions;
- }
-
- public boolean isImmediateFlush() {
- return immediateFlush;
- }
-
public boolean isLazyCreate() {
return lazyCreate;
}
@@ -168,75 +132,51 @@ public final class FileAppender extends AbstractOutputStreamAppender<FileManager
return locking;
}
- public Builder withAdvertise(final boolean advertise) {
+ public B withAdvertise(final boolean advertise) {
this.advertise = advertise;
- return this;
+ return asBuilder();
}
- public Builder withAdvertiseUri(final String advertiseUri) {
+ public B withAdvertiseUri(final String advertiseUri) {
this.advertiseUri = advertiseUri;
- return this;
+ return asBuilder();
}
- public Builder withAppend(final boolean append) {
+ public B withAppend(final boolean append) {
this.append = append;
- return this;
+ return asBuilder();
}
- public Builder withBufferedIo(final boolean bufferedIo) {
+ public B withBufferedIo(final boolean bufferedIo) {
this.bufferedIo = bufferedIo;
- return this;
+ return asBuilder();
}
- public Builder withBufferSize(final int bufferSize) {
+ public B withBufferSize(final int bufferSize) {
this.bufferSize = bufferSize;
- return this;
+ return asBuilder();
}
- public Builder withConfig(final Configuration config) {
+ public B withConfig(final Configuration config) {
this.config = config;
- return this;
+ return asBuilder();
}
- public Builder withFileName(final String fileName) {
+ public B withFileName(final String fileName) {
this.fileName = fileName;
- return this;
- }
-
- public Builder withFilter(final Filter filter) {
- this.filter = filter;
- return this;
+ return asBuilder();
}
- public Builder withIgnoreExceptions(final boolean ignoreExceptions) {
- this.ignoreExceptions = ignoreExceptions;
- return this;
- }
-
- public Builder withImmediateFlush(final boolean immediateFlush) {
- this.immediateFlush = immediateFlush;
- return this;
- }
-
- public Builder withLayout(final Layout<? extends Serializable> layout) {
- this.layout = layout;
- return this;
- }
-
- public Builder withLazyCreate(final boolean lazyCreate) {
+ public B withLazyCreate(final boolean lazyCreate) {
this.lazyCreate = lazyCreate;
- return this;
+ return asBuilder();
}
- public Builder withLocking(final boolean locking) {
+ public B withLocking(final boolean locking) {
this.locking = locking;
- return this;
+ return asBuilder();
}
- public Builder withName(final String name) {
- this.name = name;
- return this;
- }
}
private static final int DEFAULT_BUFFER_SIZE = 8192;
@@ -298,8 +238,8 @@ public final class FileAppender extends AbstractOutputStreamAppender<FileManager
}
@PluginBuilderFactory
- public static Builder newBuilder() {
- return new Builder();
+ public static <B extends Builder<B>> B newBuilder() {
+ return new Builder<B>().asBuilder();
}
private final String fileName;
[29/50] logging-log4j2 git commit: Better panme.
Posted by rp...@apache.org.
Better panme.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/4b4a07b4
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/4b4a07b4
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/4b4a07b4
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: 4b4a07b41ef54f88fb6811ce935108ac86dd6aac
Parents: 50a1422
Author: Gary Gregory <gg...@apache.org>
Authored: Mon Aug 8 13:48:46 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Mon Aug 8 13:48:46 2016 -0700
----------------------------------------------------------------------
.../org/apache/logging/log4j/core/appender/FileAppender.java | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4b4a07b4/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileAppender.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileAppender.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileAppender.java
index b13cb01..a026850 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileAppender.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileAppender.java
@@ -250,7 +250,7 @@ public final class FileAppender extends AbstractOutputStreamAppender<FileManager
* @param name The name of the Appender.
* @param immediateFlush "true" if the contents should be flushed on every write, "false" otherwise. The default
* is "true".
- * @param ignore If {@code "true"} (default) exceptions encountered when appending events are logged; otherwise
+ * @param ignoreExceptions If {@code "true"} (default) exceptions encountered when appending events are logged; otherwise
* they are propagated to the caller.
* @param bufferedIo "true" if I/O should be buffered, "false" otherwise. The default is "true".
* @param bufferSizeStr buffer size for buffered IO (default is 8192).
@@ -271,7 +271,7 @@ public final class FileAppender extends AbstractOutputStreamAppender<FileManager
final String locking,
final String name,
final String immediateFlush,
- final String ignore,
+ final String ignoreExceptions,
final String bufferedIo,
final String bufferSizeStr,
final Layout<? extends Serializable> layout,
@@ -288,7 +288,7 @@ public final class FileAppender extends AbstractOutputStreamAppender<FileManager
.withConfig(config)
.withFileName(fileName)
.withFilter(filter)
- .withIgnoreExceptions(Booleans.parseBoolean(ignore, true))
+ .withIgnoreExceptions(Booleans.parseBoolean(ignoreExceptions, true))
.withImmediateFlush(Booleans.parseBoolean(immediateFlush, true))
.withLayout(layout)
.withLocking(Boolean.parseBoolean(locking))
[41/50] logging-log4j2 git commit: Update test with a better logging
message. Add a comment.
Posted by rp...@apache.org.
Update test with a better logging message. Add a comment.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/685881a2
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/685881a2
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/685881a2
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: 685881a249f261b18bfd11838796054b6da6fc3c
Parents: 2404f7c
Author: Gary Gregory <gg...@apache.org>
Authored: Wed Aug 10 13:49:05 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Wed Aug 10 13:49:05 2016 -0700
----------------------------------------------------------------------
.../log4j/core/appender/rolling/RollingAppenderCronTest.java | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/685881a2/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderCronTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderCronTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderCronTest.java
index a6498bf..6de7d7d 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderCronTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderCronTest.java
@@ -56,6 +56,7 @@ public class RollingAppenderCronTest {
@Test
public void testAppender() throws Exception {
+ // TODO Is there a better way to test than putting the thread to sleep all over the place?
final Logger logger = loggerContextRule.getLogger();
File file = new File(FILE);
assertTrue("Log file does not exist", file.exists());
@@ -73,7 +74,7 @@ public class RollingAppenderCronTest {
succeeded = true;
break;
}
- logger.debug("Adding additional event " + i);
+ logger.debug("Sleeping #" + i);
Thread.sleep(100); // Allow time for rollover to complete
}
if (!succeeded) {
[23/50] logging-log4j2 git commit: Build PatternLayout with a builder
instead of the create API.
Posted by rp...@apache.org.
Build PatternLayout with a builder instead of the create API.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/93a9846f
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/93a9846f
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/93a9846f
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: 93a9846f3464a765720583497eb2b53fe0648b6d
Parents: 4edd7ad
Author: Gary Gregory <gg...@apache.org>
Authored: Mon Aug 8 11:01:36 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Mon Aug 8 11:01:36 2016 -0700
----------------------------------------------------------------------
.../apache/logging/log4j/core/appender/ConsoleAppenderTest.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/93a9846f/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ConsoleAppenderTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ConsoleAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ConsoleAppenderTest.java
index 78ca50e..9190359 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ConsoleAppenderTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ConsoleAppenderTest.java
@@ -97,7 +97,7 @@ public class ConsoleAppenderTest {
mocks.replayAll();
systemSetter.systemSet(psMock);
- final Layout<String> layout = PatternLayout.createLayout(null, null, null, null, null, false, false, null, null);
+ final Layout<String> layout = PatternLayout.newBuilder().withAlwaysWriteExceptions(true).build();
final ConsoleAppender app = ConsoleAppender.createAppender(layout, null, targetName, "Console", false, false,
false);
app.start();
[11/50] logging-log4j2 git commit: Merge branch 'master' of
https://git-wip-us.apache.org/repos/asf/logging-log4j2.git
Posted by rp...@apache.org.
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/logging-log4j2.git
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/887e028a
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/887e028a
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/887e028a
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: 887e028a1521f6696b399573043b558495191b4e
Parents: 0482817 34ee617
Author: Gary Gregory <gg...@apache.org>
Authored: Mon Aug 8 08:48:46 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Mon Aug 8 08:48:46 2016 -0700
----------------------------------------------------------------------
src/site/xdoc/manual/appenders.xml | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
[18/50] logging-log4j2 git commit: Better test name.
Posted by rp...@apache.org.
Better test name.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/dce21341
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/dce21341
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/dce21341
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: dce2134184de90a53270f6dfa66b5f7de87a2e59
Parents: e950cb5
Author: Gary Gregory <gg...@apache.org>
Authored: Mon Aug 8 10:19:05 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Mon Aug 8 10:19:05 2016 -0700
----------------------------------------------------------------------
.../org/apache/logging/log4j/core/appender/FileAppenderTest.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/dce21341/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderTest.java
index 760715d..7e2ba46 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderTest.java
@@ -88,7 +88,7 @@ public class FileAppenderTest {
}
@Test
- public void testLazyStart() throws Exception {
+ public void testLazyCreate() throws Exception {
final Layout<String> layout = PatternLayout.newBuilder().withPattern(PatternLayout.SIMPLE_CONVERSION_PATTERN)
.build();
final FileAppender appender = FileAppender.createAppender(FILE_NAME, true, false, "test", false, false, false,
[15/50] logging-log4j2 git commit: Port from String to native types.
Deprecate previous API.
Posted by rp...@apache.org.
Port from String to native types. Deprecate previous API.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/262f30d3
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/262f30d3
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/262f30d3
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: 262f30d310805d8e277e0d95adaf835de89f1044
Parents: e718a64
Author: Gary Gregory <gg...@apache.org>
Authored: Mon Aug 8 09:21:03 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Mon Aug 8 09:21:03 2016 -0700
----------------------------------------------------------------------
.../core/appender/RollingFileAppender.java | 119 ++++++++++++++++---
.../rolling/RollingFileAppenderAccessTest.java | 23 +++-
2 files changed, 125 insertions(+), 17 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/262f30d3/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/RollingFileAppender.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/RollingFileAppender.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/RollingFileAppender.java
index 2b06287..01ef50d 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/RollingFileAppender.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/RollingFileAppender.java
@@ -132,23 +132,25 @@ public final class RollingFileAppender extends AbstractOutputStreamAppender<Roll
* @param config The Configuration.
* @return A RollingFileAppender.
*/
- @PluginFactory
+ @Deprecated
public static RollingFileAppender createAppender(
- @PluginAttribute("fileName") final String fileName,
- @PluginAttribute("filePattern") final String filePattern,
- @PluginAttribute("append") final String append,
- @PluginAttribute("name") final String name,
- @PluginAttribute("bufferedIO") final String bufferedIO,
- @PluginAttribute("bufferSize") final String bufferSizeStr,
- @PluginAttribute("immediateFlush") final String immediateFlush,
- @PluginElement("Policy") final TriggeringPolicy policy,
- @PluginElement("Strategy") RolloverStrategy strategy,
- @PluginElement("Layout") Layout<? extends Serializable> layout,
- @PluginElement("Filter") final Filter filter,
- @PluginAttribute("ignoreExceptions") final String ignore,
- @PluginAttribute("advertise") final String advertise,
- @PluginAttribute("advertiseURI") final String advertiseURI,
- @PluginConfiguration final Configuration config) {
+ // @formatter:off
+ final String fileName,
+ final String filePattern,
+ final String append,
+ final String name,
+ final String bufferedIO,
+ final String bufferSizeStr,
+ final String immediateFlush,
+ final TriggeringPolicy policy,
+ RolloverStrategy strategy,
+ Layout<? extends Serializable> layout,
+ final Filter filter,
+ final String ignore,
+ final String advertise,
+ final String advertiseURI,
+ final Configuration config) {
+ // @formatter:on
final boolean isAppend = Booleans.parseBoolean(append, true);
final boolean ignoreExceptions = Booleans.parseBoolean(ignore, true);
@@ -199,4 +201,89 @@ public final class RollingFileAppender extends AbstractOutputStreamAppender<Roll
return new RollingFileAppender(name, layout, filter, manager, fileName, filePattern,
ignoreExceptions, isFlush, isAdvertise ? config.getAdvertiser() : null);
}
+
+ /**
+ * Creates a RollingFileAppender.
+ * @param fileName The name of the file that is actively written to. (required).
+ * @param filePattern The pattern of the file name to use on rollover. (required).
+ * @param append If true, events are appended to the file. If false, the file
+ * is overwritten when opened. Defaults to "true"
+ * @param name The name of the Appender (required).
+ * @param bufferedIo When true, I/O will be buffered. Defaults to "true".
+ * @param bufferSize buffer size for buffered IO (default is 8192).
+ * @param immediateFlush When true, events are immediately flushed. Defaults to "true".
+ * @param policy The triggering policy. (required).
+ * @param strategy The rollover strategy. Defaults to DefaultRolloverStrategy.
+ * @param layout The layout to use (defaults to the default PatternLayout).
+ * @param filter The Filter or null.
+ * @param ignoreExceptions If {@code "true"} (default) exceptions encountered when appending events are logged; otherwise
+ * they are propagated to the caller.
+ * @param advertise "true" if the appender configuration should be advertised, "false" otherwise.
+ * @param advertiseURI The advertised URI which can be used to retrieve the file contents.
+ * @param config The Configuration.
+ * @return A RollingFileAppender.
+ * @since 2.7
+ */
+ @PluginFactory
+ public static RollingFileAppender createAppender(
+ // @formatter:off
+ @PluginAttribute("fileName") final String fileName,
+ @PluginAttribute("filePattern") final String filePattern,
+ @PluginAttribute(value = "append", defaultBoolean = true) final boolean append,
+ @PluginAttribute("name") final String name,
+ @PluginAttribute(value = "bufferedIO", defaultBoolean = true) final boolean bufferedIo,
+ @PluginAttribute(value = "bufferSize", defaultInt = DEFAULT_BUFFER_SIZE) final int bufferSize,
+ @PluginAttribute(value = "immediateFlush" , defaultBoolean = true) final boolean immediateFlush,
+ @PluginElement("Policy") final TriggeringPolicy policy,
+ @PluginElement("Strategy") RolloverStrategy strategy,
+ @PluginElement("Layout") Layout<? extends Serializable> layout,
+ @PluginElement("Filter") final Filter filter,
+ @PluginAttribute(value = "ignoreExceptions", defaultBoolean = true) final boolean ignoreExceptions,
+ @PluginAttribute("advertise") final boolean advertise,
+ @PluginAttribute("advertiseURI") final String advertiseURI,
+ @PluginConfiguration final Configuration config) {
+ // @formatter:on
+ if (!bufferedIo && bufferSize > 0) {
+ LOGGER.warn("The bufferSize is set to {} but bufferedIO is not true: {}", bufferSize, bufferedIo);
+ }
+ if (name == null) {
+ LOGGER.error("No name provided for FileAppender");
+ return null;
+ }
+
+ if (fileName == null) {
+ LOGGER.error("No filename was provided for FileAppender with name " + name);
+ return null;
+ }
+
+ if (filePattern == null) {
+ LOGGER.error("No filename pattern provided for FileAppender with name " + name);
+ return null;
+ }
+
+ if (policy == null) {
+ LOGGER.error("A TriggeringPolicy must be provided");
+ return null;
+ }
+
+ if (strategy == null) {
+ strategy = DefaultRolloverStrategy.createStrategy(null, null, null,
+ String.valueOf(Deflater.DEFAULT_COMPRESSION), null, true, config);
+ }
+
+ if (layout == null) {
+ layout = PatternLayout.createDefaultLayout();
+ }
+
+ final RollingFileManager manager = RollingFileManager.getFileManager(fileName, filePattern, append,
+ bufferedIo, policy, strategy, advertiseURI, layout, bufferSize, immediateFlush);
+ if (manager == null) {
+ return null;
+ }
+
+ manager.initialize();
+
+ return new RollingFileAppender(name, layout, filter, manager, fileName, filePattern,
+ ignoreExceptions, immediateFlush, advertise ? config.getAdvertiser() : null);
+ }
}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/262f30d3/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingFileAppenderAccessTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingFileAppenderAccessTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingFileAppenderAccessTest.java
index ad6cd4c..d22fc6a 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingFileAppenderAccessTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingFileAppenderAccessTest.java
@@ -32,7 +32,7 @@ public class RollingFileAppenderAccessTest {
* @throws IOException
*/
@Test
- public void testAccessManager() throws IOException {
+ public void testAccessManagerWithStrings() throws IOException {
final LoggerContext ctx = LoggerContext.getContext(false);
final Configuration config = ctx.getConfiguration();
final File file = File.createTempFile("RollingFileAppenderAccessTest", ".tmp");
@@ -46,4 +46,25 @@ public class RollingFileAppenderAccessTest {
manager.getRolloverStrategy();
manager.getTriggeringPolicy();
}
+
+ /**
+ * Not a real test, just make sure we can compile access to the typed manager.
+ *
+ * @throws IOException
+ */
+ @Test
+ public void testAccessManagerWithPrimitives() throws IOException {
+ final LoggerContext ctx = LoggerContext.getContext(false);
+ final Configuration config = ctx.getConfiguration();
+ final File file = File.createTempFile("RollingFileAppenderAccessTest", ".tmp");
+ file.deleteOnExit();
+ final RollingFileAppender appender = RollingFileAppender.createAppender(file.getCanonicalPath(), "FilePattern",
+ true, "Name", true, 8192, true, OnStartupTriggeringPolicy.createPolicy(1), null, null, null, true, false,
+ null, config);
+ final RollingFileManager manager = appender.getManager();
+ // Since the RolloverStrategy and TriggeringPolicy are immutable, we could also use generics to type their
+ // access.
+ manager.getRolloverStrategy();
+ manager.getTriggeringPolicy();
+ }
}
[08/50] logging-log4j2 git commit: Refactor cleaners to be Path-based
(I am using this in a WIP test.)
Posted by rp...@apache.org.
Refactor cleaners to be Path-based (I am using this in a WIP test.)
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/714bfafd
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/714bfafd
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/714bfafd
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: 714bfafddfcea9986a0079fe1395760336ba393c
Parents: e52b016
Author: Gary Gregory <gg...@apache.org>
Authored: Sun Aug 7 11:51:30 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Sun Aug 7 11:51:30 2016 -0700
----------------------------------------------------------------------
.../junit/AbstractExternalFileCleaner.java | 40 +++++++++++++-------
.../apache/logging/log4j/junit/CleanFiles.java | 4 ++
.../logging/log4j/junit/CleanFolders.java | 4 ++
3 files changed, 34 insertions(+), 14 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/714bfafd/log4j-core/src/test/java/org/apache/logging/log4j/junit/AbstractExternalFileCleaner.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/junit/AbstractExternalFileCleaner.java b/log4j-core/src/test/java/org/apache/logging/log4j/junit/AbstractExternalFileCleaner.java
index fa15c67..ce7eafd 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/junit/AbstractExternalFileCleaner.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/junit/AbstractExternalFileCleaner.java
@@ -18,7 +18,9 @@ package org.apache.logging.log4j.junit;
import java.io.File;
import java.io.IOException;
+import java.nio.file.Files;
import java.nio.file.Path;
+import java.nio.file.Paths;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
@@ -33,26 +35,37 @@ public abstract class AbstractExternalFileCleaner extends ExternalResource {
private static final int SLEEP_RETRY_MILLIS = 200;
private final boolean cleanAfter;
private final boolean cleanBefore;
- private final Set<File> files;
+ private final Set<Path> files;
private final int maxTries;
public AbstractExternalFileCleaner(final boolean before, final boolean after, final int maxTries,
final File... files) {
this.cleanBefore = before;
this.cleanAfter = after;
- this.files = new HashSet<>(Arrays.asList(files));
this.maxTries = maxTries;
+ this.files = new HashSet<>(files.length);
+ for (final File file : files) {
+ this.files.add(file.toPath());
+ }
+ }
+
+ public AbstractExternalFileCleaner(final boolean before, final boolean after, final int maxTries,
+ final Path... files) {
+ this.cleanBefore = before;
+ this.cleanAfter = after;
+ this.maxTries = maxTries;
+ this.files = new HashSet<>(Arrays.asList(files));
}
public AbstractExternalFileCleaner(final boolean before, final boolean after, final int maxTries,
final String... fileNames) {
this.cleanBefore = before;
this.cleanAfter = after;
+ this.maxTries = maxTries;
this.files = new HashSet<>(fileNames.length);
for (final String fileName : fileNames) {
- this.files.add(new File(fileName));
+ this.files.add(Paths.get(fileName));
}
- this.maxTries = maxTries;
}
@Override
@@ -70,11 +83,10 @@ public abstract class AbstractExternalFileCleaner extends ExternalResource {
}
protected void clean() {
- Map<Path, IOException> failures = new HashMap<>();
+ final Map<Path, IOException> failures = new HashMap<>();
// Clean and gather failures
- for (final File file : getFiles()) {
- if (file.exists()) {
- final Path path = file.toPath();
+ for (final Path path : getPaths()) {
+ if (Files.exists(path)) {
for (int i = 0; i < getMaxTries(); i++) {
try {
if (clean(path, i)) {
@@ -97,9 +109,9 @@ public abstract class AbstractExternalFileCleaner extends ExternalResource {
}
// Fail on failures
if (failures.size() > 0) {
- StringBuilder sb = new StringBuilder();
+ final StringBuilder sb = new StringBuilder();
boolean first = true;
- for (Map.Entry<Path, IOException> failure : failures.entrySet()) {
+ for (final Map.Entry<Path, IOException> failure : failures.entrySet()) {
failure.getValue().printStackTrace();
if (!first) {
sb.append(", ");
@@ -122,14 +134,14 @@ public abstract class AbstractExternalFileCleaner extends ExternalResource {
return cleanBefore;
}
- public Set<File> getFiles() {
- return files;
- }
-
public int getMaxTries() {
return maxTries;
}
+ public Set<Path> getPaths() {
+ return files;
+ }
+
@Override
public String toString() {
return getClass().getSimpleName() + " [files=" + files + ", cleanAfter=" + cleanAfter + ", cleanBefore="
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/714bfafd/log4j-core/src/test/java/org/apache/logging/log4j/junit/CleanFiles.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/junit/CleanFiles.java b/log4j-core/src/test/java/org/apache/logging/log4j/junit/CleanFiles.java
index fdd4cdd..39a2324 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/junit/CleanFiles.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/junit/CleanFiles.java
@@ -39,6 +39,10 @@ public class CleanFiles extends AbstractExternalFileCleaner {
super(true, true, MAX_TRIES, files);
}
+ public CleanFiles(final Path... paths) {
+ super(true, true, MAX_TRIES, paths);
+ }
+
public CleanFiles(final String... fileNames) {
super(true, true, MAX_TRIES, fileNames);
}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/714bfafd/log4j-core/src/test/java/org/apache/logging/log4j/junit/CleanFolders.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/junit/CleanFolders.java b/log4j-core/src/test/java/org/apache/logging/log4j/junit/CleanFolders.java
index 52ade89..5bddd12 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/junit/CleanFolders.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/junit/CleanFolders.java
@@ -42,6 +42,10 @@ public class CleanFolders extends AbstractExternalFileCleaner {
super(true, true, MAX_TRIES, folders);
}
+ public CleanFolders(final Path... paths) {
+ super(true, true, MAX_TRIES, paths);
+ }
+
public CleanFolders(final String... folderNames) {
super(true, true, MAX_TRIES, folderNames);
}
[42/50] logging-log4j2 git commit: [LOG4J2-1508] Allow a Builder to
sublcass another Builder.
Posted by rp...@apache.org.
[LOG4J2-1508] Allow a Builder to sublcass another Builder.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/e3e37ccb
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/e3e37ccb
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/e3e37ccb
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: e3e37ccbd6ff8237cc693d32a1b687589b11d059
Parents: 685881a
Author: Gary Gregory <gg...@apache.org>
Authored: Wed Aug 10 13:50:13 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Wed Aug 10 13:50:13 2016 -0700
----------------------------------------------------------------------
.../core/config/plugins/util/PluginBuilder.java | 6 +-
.../logging/log4j/core/util/TypeUtil.java | 21 ++++++
.../AbstractPluginWithGenericBuilder.java | 59 +++++++++++++++++
.../PluginWithGenericSubclassFoo1Builder.java | 55 ++++++++++++++++
.../ValidatingPluginWithGenericBuilder.java | 2 +-
...luginWithGenericSubclassFoo1BuilderTest.java | 68 ++++++++++++++++++++
src/changes/changes.xml | 6 ++
7 files changed, 214 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/e3e37ccb/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/PluginBuilder.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/PluginBuilder.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/PluginBuilder.java
index 7ba9981..8da7356 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/PluginBuilder.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/PluginBuilder.java
@@ -23,6 +23,8 @@ import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
+import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.Map;
@@ -156,8 +158,8 @@ public class PluginBuilder implements Builder<Object> {
}
private void injectFields(final Builder<?> builder) throws IllegalAccessException {
- final Field[] fields = builder.getClass().getDeclaredFields();
- AccessibleObject.setAccessible(fields, true);
+ final List<Field> fields = TypeUtil.getAllDeclaredFields(builder.getClass());
+ AccessibleObject.setAccessible(fields.toArray(new Field[] {}), true);
final StringBuilder log = new StringBuilder();
boolean invalid = false;
for (final Field field : fields) {
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/e3e37ccb/log4j-core/src/main/java/org/apache/logging/log4j/core/util/TypeUtil.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/TypeUtil.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/TypeUtil.java
index 81a8de2..e8db1ed 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/TypeUtil.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/TypeUtil.java
@@ -16,10 +16,13 @@
*/
package org.apache.logging.log4j.core.util;
+import java.lang.reflect.Field;
import java.lang.reflect.GenericArrayType;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.lang.reflect.WildcardType;
+import java.util.ArrayList;
+import java.util.List;
import java.util.Objects;
/**
@@ -36,10 +39,28 @@ import java.util.Objects;
* @since 2.1
*/
public final class TypeUtil {
+
private TypeUtil() {
}
/**
+ * Gets all declared fields for the given class (including superclasses).
+ *
+ * @param cls the class to examine
+ * @return all declared fields for the given class (including superclasses).
+ * @see Class#getDeclaredFields()
+ */
+ public static List<Field> getAllDeclaredFields(Class<?> cls) {
+ final List<Field> fields = new ArrayList<>();
+ while (cls != null) {
+ for (Field field : cls.getDeclaredFields()) {
+ fields.add(field);
+ }
+ cls = cls.getSuperclass();
+ }
+ return fields;
+ }
+ /**
* Indicates if two {@link Type}s are assignment compatible.
*
* @param lhs the left hand side to check assignability to
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/e3e37ccb/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/validation/AbstractPluginWithGenericBuilder.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/validation/AbstractPluginWithGenericBuilder.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/validation/AbstractPluginWithGenericBuilder.java
new file mode 100644
index 0000000..7b2a0f8
--- /dev/null
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/validation/AbstractPluginWithGenericBuilder.java
@@ -0,0 +1,59 @@
+/*
+ * 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.logging.log4j.core.config.plugins.validation;
+
+import org.apache.logging.log4j.core.config.plugins.PluginBuilderAttribute;
+import org.apache.logging.log4j.core.config.plugins.validation.constraints.Required;
+
+/**
+ *
+ */
+public class AbstractPluginWithGenericBuilder {
+
+ public static abstract class Builder<B extends Builder<B>> {
+
+ @PluginBuilderAttribute
+ @Required(message = "The thing given by the builder is null")
+ private String thing;
+
+ @SuppressWarnings("unchecked")
+ public B asBuilder() {
+ return (B) this;
+ }
+
+ public String getThing() {
+ return thing;
+ }
+
+ public B withThing(final String name) {
+ this.thing = name;
+ return asBuilder();
+ }
+
+ }
+
+ private final String thing;
+
+ public AbstractPluginWithGenericBuilder(final String thing) {
+ super();
+ this.thing = thing;
+ }
+
+ public String getThing() {
+ return thing;
+ }
+}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/e3e37ccb/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/validation/PluginWithGenericSubclassFoo1Builder.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/validation/PluginWithGenericSubclassFoo1Builder.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/validation/PluginWithGenericSubclassFoo1Builder.java
new file mode 100644
index 0000000..727b848
--- /dev/null
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/validation/PluginWithGenericSubclassFoo1Builder.java
@@ -0,0 +1,55 @@
+package org.apache.logging.log4j.core.config.plugins.validation;
+
+import org.apache.logging.log4j.core.config.plugins.Plugin;
+import org.apache.logging.log4j.core.config.plugins.PluginBuilderAttribute;
+import org.apache.logging.log4j.core.config.plugins.PluginBuilderFactory;
+import org.apache.logging.log4j.core.config.plugins.validation.constraints.Required;
+
+@Plugin(name = "PluginWithGenericSubclassFoo1Builder", category = "Test")
+public class PluginWithGenericSubclassFoo1Builder extends AbstractPluginWithGenericBuilder {
+
+ public static class Builder<B extends Builder<B>> extends AbstractPluginWithGenericBuilder.Builder<B>
+ implements org.apache.logging.log4j.core.util.Builder<PluginWithGenericSubclassFoo1Builder> {
+
+ @PluginBuilderFactory
+ public static <B extends Builder<B>> B newBuilder() {
+ return new Builder<B>().asBuilder();
+ }
+
+ @PluginBuilderAttribute
+ @Required(message = "The foo1 given by the builder is null")
+ private String foo1;
+
+ @Override
+ public PluginWithGenericSubclassFoo1Builder build() {
+ return new PluginWithGenericSubclassFoo1Builder(getThing(), getFoo1());
+ }
+
+ public String getFoo1() {
+ return foo1;
+ }
+
+ public B withFoo1(final String foo1) {
+ this.foo1 = foo1;
+ return asBuilder();
+ }
+
+ }
+
+ @PluginBuilderFactory
+ public static <B extends Builder<B>> B newBuilder() {
+ return new Builder<B>().asBuilder();
+ }
+
+ private final String foo1;
+
+ public PluginWithGenericSubclassFoo1Builder(final String thing, final String foo1) {
+ super(thing);
+ this.foo1 = foo1;
+ }
+
+ public String getFoo1() {
+ return foo1;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/e3e37ccb/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/validation/ValidatingPluginWithGenericBuilder.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/validation/ValidatingPluginWithGenericBuilder.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/validation/ValidatingPluginWithGenericBuilder.java
index 34297e2..5ca9b6e 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/validation/ValidatingPluginWithGenericBuilder.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/validation/ValidatingPluginWithGenericBuilder.java
@@ -63,7 +63,7 @@ public class ValidatingPluginWithGenericBuilder {
}
@SuppressWarnings("unchecked")
- private B asBuilder() {
+ public B asBuilder() {
return (B) this;
}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/e3e37ccb/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/validation/validators/ValidatingPluginWithGenericSubclassFoo1BuilderTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/validation/validators/ValidatingPluginWithGenericSubclassFoo1BuilderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/validation/validators/ValidatingPluginWithGenericSubclassFoo1BuilderTest.java
new file mode 100644
index 0000000..d6f3966
--- /dev/null
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/validation/validators/ValidatingPluginWithGenericSubclassFoo1BuilderTest.java
@@ -0,0 +1,68 @@
+/*
+ * 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.logging.log4j.core.config.plugins.validation.validators;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+
+import org.apache.logging.log4j.core.config.Node;
+import org.apache.logging.log4j.core.config.NullConfiguration;
+import org.apache.logging.log4j.core.config.plugins.util.PluginBuilder;
+import org.apache.logging.log4j.core.config.plugins.util.PluginManager;
+import org.apache.logging.log4j.core.config.plugins.util.PluginType;
+import org.apache.logging.log4j.core.config.plugins.validation.PluginWithGenericSubclassFoo1Builder;
+import org.junit.Before;
+import org.junit.Test;
+
+public class ValidatingPluginWithGenericSubclassFoo1BuilderTest {
+
+ private PluginType<PluginWithGenericSubclassFoo1Builder> plugin;
+ private Node node;
+
+ @SuppressWarnings("unchecked")
+ @Before
+ public void setUp() throws Exception {
+ final PluginManager manager = new PluginManager("Test");
+ manager.collectPlugins();
+ plugin = (PluginType<PluginWithGenericSubclassFoo1Builder>) manager.getPluginType("PluginWithGenericSubclassFoo1Builder");
+ assertNotNull("Rebuild this module to make sure annotaion processing kicks in.", plugin);
+ node = new Node(null, "Validator", plugin);
+ }
+
+ @Test
+ public void testNullDefaultValue() throws Exception {
+ final PluginWithGenericSubclassFoo1Builder validatingPlugin = (PluginWithGenericSubclassFoo1Builder) new PluginBuilder(plugin)
+ .withConfiguration(new NullConfiguration())
+ .withConfigurationNode(node)
+ .build();
+ assertNull(validatingPlugin);
+ }
+
+ @Test
+ public void testNonNullValue() throws Exception {
+ node.getAttributes().put("thing", "thing1");
+ node.getAttributes().put("foo1", "foo1");
+ final PluginWithGenericSubclassFoo1Builder validatingPlugin = (PluginWithGenericSubclassFoo1Builder) new PluginBuilder(plugin)
+ .withConfiguration(new NullConfiguration())
+ .withConfigurationNode(node)
+ .build();
+ assertNotNull(validatingPlugin);
+ assertEquals("thing1", validatingPlugin.getThing());
+ assertEquals("foo1", validatingPlugin.getFoo1());
+ }
+}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/e3e37ccb/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index ad03663..a4fac9e 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -75,6 +75,12 @@
<action issue="LOG4J2-1505" dev="ggregory" type="add" due-to="Gary Gregory">
Create a Builder for FileAppender.
</action>
+ <action issue="LOG4J2-1507" dev="ggregory" type="add" due-to="Gary Gregory">
+ Allow Builders to be completely generic.
+ </action>
+ <action issue="LOG4J2-1508" dev="ggregory" type="add" due-to="Gary Gregory">
+ Allow a Builder to sublcass another Builder.
+ </action>
<action issue="LOG4J2-1458" dev="ggregory" type="update" due-to="Gary Gregory">
Update Jackson from 2.7.5 to 2.8.0.
</action>
[26/50] logging-log4j2 git commit: Fix commented out code.
Posted by rp...@apache.org.
Fix commented out code.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/de528c5f
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/de528c5f
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/de528c5f
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: de528c5f8a590098ce6ffc6cd5151e6ae3595ea5
Parents: 0602201
Author: Gary Gregory <gg...@apache.org>
Authored: Mon Aug 8 12:00:19 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Mon Aug 8 12:00:19 2016 -0700
----------------------------------------------------------------------
.../core/appender/rolling/OnStartupTriggeringPolicyTest.java | 3 ---
1 file changed, 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/de528c5f/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/OnStartupTriggeringPolicyTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/OnStartupTriggeringPolicyTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/OnStartupTriggeringPolicyTest.java
index 62f3f46..b21a7e7 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/OnStartupTriggeringPolicyTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/OnStartupTriggeringPolicyTest.java
@@ -28,9 +28,6 @@ import org.apache.logging.log4j.core.config.Configuration;
import org.apache.logging.log4j.core.config.DefaultConfiguration;
import org.apache.logging.log4j.core.layout.PatternLayout;
import org.apache.logging.log4j.core.util.datetime.FastDateFormat;
-import org.apache.logging.log4j.junit.CleanFiles;
-import org.apache.logging.log4j.junit.CleanFolders;
-import org.junit.Rule;
import org.junit.Test;
/**
[07/50] logging-log4j2 git commit: Refactor clean files and clean
folder rules.
Posted by rp...@apache.org.
Refactor clean files and clean folder rules.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/e52b0161
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/e52b0161
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/e52b0161
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: e52b01618474ee5888b3698171ee381d6ae2add5
Parents: e81c6a1
Author: Gary Gregory <gg...@apache.org>
Authored: Sun Aug 7 11:43:50 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Sun Aug 7 11:43:50 2016 -0700
----------------------------------------------------------------------
.../junit/AbstractExternalFileCleaner.java | 69 +++++++++++++++++---
.../apache/logging/log4j/junit/CleanFiles.java | 25 +------
.../logging/log4j/junit/CleanFolders.java | 48 ++------------
3 files changed, 69 insertions(+), 73 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/e52b0161/log4j-core/src/test/java/org/apache/logging/log4j/junit/AbstractExternalFileCleaner.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/junit/AbstractExternalFileCleaner.java b/log4j-core/src/test/java/org/apache/logging/log4j/junit/AbstractExternalFileCleaner.java
index 7860917..fa15c67 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/junit/AbstractExternalFileCleaner.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/junit/AbstractExternalFileCleaner.java
@@ -17,30 +17,38 @@
package org.apache.logging.log4j.junit;
import java.io.File;
-import java.util.ArrayList;
+import java.io.IOException;
+import java.nio.file.Path;
import java.util.Arrays;
-import java.util.List;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import org.junit.Assert;
import org.junit.rules.ExternalResource;
public abstract class AbstractExternalFileCleaner extends ExternalResource {
+ private static final int SLEEP_RETRY_MILLIS = 200;
private final boolean cleanAfter;
private final boolean cleanBefore;
- private final List<File> files;
+ private final Set<File> files;
private final int maxTries;
- public AbstractExternalFileCleaner(final boolean before, final boolean after, final int maxTries, final File... files) {
+ public AbstractExternalFileCleaner(final boolean before, final boolean after, final int maxTries,
+ final File... files) {
this.cleanBefore = before;
this.cleanAfter = after;
- this.files = Arrays.asList(files);
+ this.files = new HashSet<>(Arrays.asList(files));
this.maxTries = maxTries;
}
- public AbstractExternalFileCleaner(final boolean before, final boolean after, final int maxTries, final String... fileNames) {
+ public AbstractExternalFileCleaner(final boolean before, final boolean after, final int maxTries,
+ final String... fileNames) {
this.cleanBefore = before;
this.cleanAfter = after;
- this.files = new ArrayList<>(fileNames.length);
+ this.files = new HashSet<>(fileNames.length);
for (final String fileName : fileNames) {
this.files.add(new File(fileName));
}
@@ -61,7 +69,50 @@ public abstract class AbstractExternalFileCleaner extends ExternalResource {
}
}
- abstract protected void clean();
+ protected void clean() {
+ Map<Path, IOException> failures = new HashMap<>();
+ // Clean and gather failures
+ for (final File file : getFiles()) {
+ if (file.exists()) {
+ final Path path = file.toPath();
+ for (int i = 0; i < getMaxTries(); i++) {
+ try {
+ if (clean(path, i)) {
+ if (failures.containsKey(path)) {
+ failures.remove(path);
+ }
+ break;
+ }
+ } catch (final IOException e) {
+ // We will try again.
+ failures.put(path, e);
+ }
+ try {
+ Thread.sleep(SLEEP_RETRY_MILLIS);
+ } catch (final InterruptedException ignored) {
+ // ignore
+ }
+ }
+ }
+ }
+ // Fail on failures
+ if (failures.size() > 0) {
+ StringBuilder sb = new StringBuilder();
+ boolean first = true;
+ for (Map.Entry<Path, IOException> failure : failures.entrySet()) {
+ failure.getValue().printStackTrace();
+ if (!first) {
+ sb.append(", ");
+ }
+ sb.append(failure.getKey()).append(" failed with ").append(failure.getValue());
+ first = false;
+ }
+ Assert.fail(sb.toString());
+ }
+
+ }
+
+ protected abstract boolean clean(Path path, int tryIndex) throws IOException;
public boolean cleanAfter() {
return cleanAfter;
@@ -71,7 +122,7 @@ public abstract class AbstractExternalFileCleaner extends ExternalResource {
return cleanBefore;
}
- public List<File> getFiles() {
+ public Set<File> getFiles() {
return files;
}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/e52b0161/log4j-core/src/test/java/org/apache/logging/log4j/junit/CleanFiles.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/junit/CleanFiles.java b/log4j-core/src/test/java/org/apache/logging/log4j/junit/CleanFiles.java
index d38ca85..fdd4cdd 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/junit/CleanFiles.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/junit/CleanFiles.java
@@ -19,8 +19,7 @@ package org.apache.logging.log4j.junit;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
-
-import org.junit.Assert;
+import java.nio.file.Path;
/**
* A JUnit test rule to automatically delete files after a test is run.
@@ -45,26 +44,8 @@ public class CleanFiles extends AbstractExternalFileCleaner {
}
@Override
- protected void clean() {
- for (final File file : getFiles()) {
- if (file.exists()) {
- for (int i = 0; i < getMaxTries(); i++) {
- try {
- if (Files.deleteIfExists(file.toPath())) {
- // Break from MAX_TRIES and move on to the next file.
- break;
- }
- } catch (final IOException e) {
- Assert.fail(file + ": " + e.toString());
- }
- try {
- Thread.sleep(200);
- } catch (final InterruptedException ignored) {
- // ignore
- }
- }
- }
- }
+ protected boolean clean(Path path, int tryIndex) throws IOException {
+ return Files.deleteIfExists(path);
}
}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/e52b0161/log4j-core/src/test/java/org/apache/logging/log4j/junit/CleanFolders.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/junit/CleanFolders.java b/log4j-core/src/test/java/org/apache/logging/log4j/junit/CleanFolders.java
index ea75a55..52ade89 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/junit/CleanFolders.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/junit/CleanFolders.java
@@ -23,10 +23,6 @@ import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.junit.Assert;
/**
* A JUnit test rule to automatically delete folders recursively before (optional) and after (optional) a test is run.
@@ -50,44 +46,6 @@ public class CleanFolders extends AbstractExternalFileCleaner {
super(true, true, MAX_TRIES, folderNames);
}
- @Override
- protected void clean() {
- Map<Path, IOException> failures = new HashMap<>();
- // Clean and gather failures
- for (final File folder : getFiles()) {
- if (folder.exists()) {
- final Path path = folder.toPath();
- for (int i = 0; i < getMaxTries(); i++) {
- try {
- cleanFolder(path);
- if (failures.containsKey(path)) {
- failures.remove(path);
- }
- // break from MAX_TRIES and goes to the next folder
- break;
- } catch (final IOException e) {
- // We will try again.
- failures.put(path, e);
- }
- }
- }
- }
- // Fail on failures
- if (failures.size() > 0) {
- StringBuilder sb = new StringBuilder();
- boolean first = true;
- for (Map.Entry<Path, IOException> failure : failures.entrySet()) {
- failure.getValue().printStackTrace();
- if (!first) {
- sb.append(", ");
- }
- sb.append(failure.getKey()).append(" failed with ").append(failure.getValue());
- first = false;
- }
- Assert.fail(sb.toString());
- }
- }
-
private void cleanFolder(final Path folder) throws IOException {
if (Files.exists(folder) && Files.isDirectory(folder)) {
Files.walkFileTree(folder, new SimpleFileVisitor<Path>() {
@@ -105,4 +63,10 @@ public class CleanFolders extends AbstractExternalFileCleaner {
});
}
}
+
+ @Override
+ protected boolean clean(Path path, int tryIndex) throws IOException {
+ cleanFolder(path);
+ return true;
+ }
}
[12/50] logging-log4j2 git commit: [LOG4J2-1501] FileAppender should
be able to create files lazily.
Posted by rp...@apache.org.
[LOG4J2-1501] FileAppender should be able to create files lazily.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/61f706fc
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/61f706fc
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/61f706fc
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: 61f706fc0a811c3184e941f2e8d1e012b5cbdb39
Parents: 887e028
Author: Gary Gregory <gg...@apache.org>
Authored: Mon Aug 8 08:50:11 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Mon Aug 8 08:50:11 2016 -0700
----------------------------------------------------------------------
.../log4j/core/appender/FileAppender.java | 79 +++++-
.../log4j/core/appender/FileManager.java | 79 ++++--
.../core/appender/OutputStreamManager.java | 59 +++-
.../log4j/core/appender/FileAppenderTest.java | 270 +++++++++++--------
.../log4j/test/appender/InMemoryAppender.java | 7 +-
src/changes/changes.xml | 3 +
6 files changed, 346 insertions(+), 151 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/61f706fc/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileAppender.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileAppender.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileAppender.java
index 90c088e..a69758b 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileAppender.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileAppender.java
@@ -39,7 +39,7 @@ import org.apache.logging.log4j.core.util.Integers;
@Plugin(name = "File", category = "Core", elementType = "appender", printObject = true)
public final class FileAppender extends AbstractOutputStreamAppender<FileManager> {
- private static final int DEFAULT_BUFFER_SIZE = 8192;
+ static final int DEFAULT_BUFFER_SIZE = 8192;
private final String fileName;
private final Advertiser advertiser;
private Object advertisement;
@@ -96,8 +96,9 @@ public final class FileAppender extends AbstractOutputStreamAppender<FileManager
* @param advertiseUri The advertised URI which can be used to retrieve the file contents.
* @param config The Configuration
* @return The FileAppender.
+ * @deprecated Use {@link #createAppender(String, boolean, boolean, String, String, String, boolean, String, Layout<? extends Serializable>, Filter, String, String, boolean, Configuration)}
*/
- @PluginFactory
+ @Deprecated
public static FileAppender createAppender(
// @formatter:off
@PluginAttribute("fileName") final String fileName,
@@ -144,8 +145,8 @@ public final class FileAppender extends AbstractOutputStreamAppender<FileManager
layout = PatternLayout.createDefaultLayout();
}
- final FileManager manager = FileManager.getFileManager(fileName, isAppend, isLocking, isBuffered, advertiseUri,
- layout, bufferSize, isFlush);
+ final FileManager manager = FileManager.getFileManager(fileName, isAppend, isLocking, isBuffered, false,
+ advertiseUri, layout, bufferSize, isFlush);
if (manager == null) {
return null;
}
@@ -153,4 +154,74 @@ public final class FileAppender extends AbstractOutputStreamAppender<FileManager
return new FileAppender(name, layout, filter, manager, fileName, ignoreExceptions, !isBuffered || isFlush,
isAdvertise ? config.getAdvertiser() : null);
}
+
+ /**
+ * Create a File Appender.
+ * @param fileName The name and path of the file.
+ * @param append "True" if the file should be appended to, "false" if it should be overwritten.
+ * The default is "true".
+ * @param locking "True" if the file should be locked. The default is "false".
+ * @param name The name of the Appender.
+ * @param immediateFlush "true" if the contents should be flushed on every write, "false" otherwise. The default
+ * is "true".
+ * @param ignoreExceptions If {@code "true"} (default) exceptions encountered when appending events are logged; otherwise
+ * they are propagated to the caller.
+ * @param bufferedIo "true" if I/O should be buffered, "false" otherwise. The default is "true".
+ * @param bufferSize buffer size for buffered IO (default is 8192).
+ * @param layout The layout to use to format the event. If no layout is provided the default PatternLayout
+ * will be used.
+ * @param filter The filter, if any, to use.
+ * @param advertise "true" if the appender configuration should be advertised, "false" otherwise.
+ * @param advertiseUri The advertised URI which can be used to retrieve the file contents.
+ * @param lazyCreate true if you want to lazy-create the file (a.k.a. on-demand.)
+ * @param config The Configuration
+ * @return The FileAppender.
+ * @since 2.7
+ */
+ @PluginFactory
+ public static FileAppender createAppender(
+ // @formatter:off
+ @PluginAttribute("fileName") final String fileName,
+ @PluginAttribute(value = "append", defaultBoolean = true) final boolean append,
+ @PluginAttribute("locking") final boolean locking,
+ @PluginAttribute("name") final String name,
+ @PluginAttribute(value = "immediateFlush", defaultBoolean = true) final boolean immediateFlush,
+ @PluginAttribute(value = "ignoreExceptions", defaultBoolean = true) final boolean ignoreExceptions,
+ @PluginAttribute(value = "bufferedIo", defaultBoolean = true) boolean bufferedIo,
+ @PluginAttribute(value = "bufferSize", defaultInt = DEFAULT_BUFFER_SIZE) final int bufferSize,
+ @PluginElement("Layout") Layout<? extends Serializable> layout,
+ @PluginElement("Filter") final Filter filter,
+ @PluginAttribute("advertise") final boolean advertise,
+ @PluginAttribute("advertiseUri") final String advertiseUri,
+ @PluginAttribute("lazyCreate") final boolean lazyCreate,
+ @PluginConfiguration final Configuration config) {
+ // @formatter:on
+ if (locking && bufferedIo) {
+ LOGGER.warn("Locking and buffering are mutually exclusive. No buffering will occur for {}", fileName);
+ bufferedIo = false;
+ }
+ if (!bufferedIo && bufferSize > 0) {
+ LOGGER.warn("The bufferSize is set to {} but bufferedIo is not true: {}", bufferSize, bufferedIo);
+ }
+ if (name == null) {
+ LOGGER.error("No name provided for FileAppender");
+ return null;
+ }
+ if (fileName == null) {
+ LOGGER.error("No filename provided for FileAppender with name {}", name);
+ return null;
+ }
+ if (layout == null) {
+ layout = PatternLayout.createDefaultLayout();
+ }
+
+ final FileManager manager = FileManager.getFileManager(fileName, append, locking, bufferedIo, lazyCreate,
+ advertiseUri, layout, bufferSize, immediateFlush);
+ if (manager == null) {
+ return null;
+ }
+
+ return new FileAppender(name, layout, filter, manager, fileName, ignoreExceptions, !bufferedIo || immediateFlush,
+ advertise ? config.getAdvertiser() : null);
+ }
}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/61f706fc/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileManager.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileManager.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileManager.java
index af10d25..71d152b 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileManager.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileManager.java
@@ -51,7 +51,11 @@ public class FileManager extends OutputStreamManager {
this(fileName, os, append, locking, advertiseURI, layout, writeHeader, ByteBuffer.wrap(new byte[bufferSize]));
}
- /** @since 2.6 */
+ /**
+ * @deprecated
+ * @since 2.6
+ */
+ @Deprecated
protected FileManager(final String fileName, final OutputStream os, final boolean append, final boolean locking,
final String advertiseURI, final Layout<? extends Serializable> layout, final boolean writeHeader,
final ByteBuffer buffer) {
@@ -62,12 +66,27 @@ public class FileManager extends OutputStreamManager {
this.bufferSize = buffer.capacity();
}
+ /**
+ * @throws IOException
+ * @since 2.7
+ */
+ protected FileManager(final String fileName, final boolean append, final boolean locking, final boolean lazyCreate,
+ final String advertiseURI, final Layout<? extends Serializable> layout, final boolean writeHeader,
+ final ByteBuffer buffer) throws IOException {
+ super(fileName, lazyCreate, layout, writeHeader, buffer);
+ this.isAppend = append;
+ this.isLocking = locking;
+ this.advertiseURI = advertiseURI;
+ this.bufferSize = buffer.capacity();
+ }
+
/**
* Returns the FileManager.
* @param fileName The name of the file to manage.
* @param append true if the file should be appended to, false if it should be overwritten.
* @param locking true if the file should be locked while writing, false otherwise.
* @param bufferedIo true if the contents should be buffered as they are written.
+ * @param lazyCreate true if you want to lazy-create the file (a.k.a. on-demand.)
* @param advertiseUri the URI to use when advertising the file
* @param layout The layout
* @param bufferSize buffer size for buffered IO
@@ -75,31 +94,40 @@ public class FileManager extends OutputStreamManager {
* @return A FileManager for the File.
*/
public static FileManager getFileManager(final String fileName, final boolean append, boolean locking,
- final boolean bufferedIo, final String advertiseUri, final Layout<? extends Serializable> layout,
- final int bufferSize, final boolean immediateFlush) {
+ final boolean bufferedIo, boolean lazyCreate, final String advertiseUri,
+ final Layout<? extends Serializable> layout, final int bufferSize, final boolean immediateFlush) {
if (locking && bufferedIo) {
locking = false;
}
- return (FileManager) getManager(fileName, new FactoryData(append, locking, bufferedIo, bufferSize,
- immediateFlush, advertiseUri, layout), FACTORY);
+ return (FileManager) getManager(fileName,
+ new FactoryData(append, locking, bufferedIo, bufferSize, immediateFlush, lazyCreate, advertiseUri, layout),
+ FACTORY);
}
@Override
- protected synchronized void write(final byte[] bytes, final int offset, final int length, final boolean immediateFlush) {
-
+ protected OutputStream createOutputStream() throws FileNotFoundException {
+ return new FileOutputStream(getFileName(), isAppend);
+ }
+
+ @Override
+ protected synchronized void write(final byte[] bytes, final int offset, final int length,
+ final boolean immediateFlush) {
if (isLocking) {
- final FileChannel channel = ((FileOutputStream) getOutputStream()).getChannel();
- /*
- * Lock the whole file. This could be optimized to only lock from the current file position. Note that
- * locking may be advisory on some systems and mandatory on others, so locking just from the current
- * position would allow reading on systems where locking is mandatory. Also, Java 6 will throw an exception
- * if the region of the file is already locked by another FileChannel in the same JVM. Hopefully, that will
- * be avoided since every file should have a single file manager - unless two different files strings are
- * configured that somehow map to the same file.
- */
- try (final FileLock lock = channel.lock(0, Long.MAX_VALUE, false)) {
- super.write(bytes, offset, length, immediateFlush);
+ try {
+ @SuppressWarnings("resource")
+ final FileChannel channel = ((FileOutputStream) getOutputStream()).getChannel();
+ /*
+ * Lock the whole file. This could be optimized to only lock from the current file position. Note that
+ * locking may be advisory on some systems and mandatory on others, so locking just from the current
+ * position would allow reading on systems where locking is mandatory. Also, Java 6 will throw an
+ * exception if the region of the file is already locked by another FileChannel in the same JVM.
+ * Hopefully, that will be avoided since every file should have a single file manager - unless two
+ * different files strings are configured that somehow map to the same file.
+ */
+ try (final FileLock lock = channel.lock(0, Long.MAX_VALUE, false)) {
+ super.write(bytes, offset, length, immediateFlush);
+ }
} catch (final IOException ex) {
throw new AppenderLoggingException("Unable to obtain lock on " + getName(), ex);
}
@@ -162,6 +190,7 @@ public class FileManager extends OutputStreamManager {
private final boolean bufferedIO;
private final int bufferSize;
private final boolean immediateFlush;
+ private final boolean lazyCreate;
private final String advertiseURI;
private final Layout<? extends Serializable> layout;
@@ -172,15 +201,19 @@ public class FileManager extends OutputStreamManager {
* @param bufferedIO Buffering flag.
* @param bufferSize Buffer size.
* @param immediateFlush flush on every write or not
+ * @param lazyCreate if you want to lazy-create the file (a.k.a. on-demand.)
* @param advertiseURI the URI to use when advertising the file
+ * @param layout The layout
*/
public FactoryData(final boolean append, final boolean locking, final boolean bufferedIO, final int bufferSize,
- final boolean immediateFlush, final String advertiseURI, final Layout<? extends Serializable> layout) {
+ final boolean immediateFlush, final boolean lazyCreate, final String advertiseURI,
+ final Layout<? extends Serializable> layout) {
this.append = append;
this.locking = locking;
this.bufferedIO = bufferedIO;
this.bufferSize = bufferSize;
this.immediateFlush = immediateFlush;
+ this.lazyCreate = lazyCreate;
this.advertiseURI = advertiseURI;
this.layout = layout;
}
@@ -192,12 +225,11 @@ public class FileManager extends OutputStreamManager {
private static class FileManagerFactory implements ManagerFactory<FileManager, FactoryData> {
/**
- * Create a FileManager.
+ * Creates a FileManager.
* @param name The name of the File.
* @param data The FactoryData
* @return The FileManager for the File.
*/
- @SuppressWarnings("resource")
@Override
public FileManager createManager(final String name, final FactoryData data) {
final File file = new File(name);
@@ -208,12 +240,11 @@ public class FileManager extends OutputStreamManager {
final boolean writeHeader = !data.append || !file.exists();
try {
- final FileOutputStream fos = new FileOutputStream(name, data.append);
final int actualSize = data.bufferedIO ? data.bufferSize : Constants.ENCODER_BYTE_BUFFER_SIZE;
final ByteBuffer buffer = ByteBuffer.wrap(new byte[actualSize]);
- return new FileManager(name, fos, data.append, data.locking, data.advertiseURI, data.layout,
+ return new FileManager(name, data.append, data.locking, data.lazyCreate, data.advertiseURI, data.layout,
writeHeader, buffer);
- } catch (final FileNotFoundException ex) {
+ } catch (final IOException ex) {
LOGGER.error("FileManager (" + name + ") " + ex, ex);
}
return null;
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/61f706fc/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/OutputStreamManager.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/OutputStreamManager.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/OutputStreamManager.java
index 794610c..e707bea 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/OutputStreamManager.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/OutputStreamManager.java
@@ -18,6 +18,7 @@ package org.apache.logging.log4j.core.appender;
import java.io.IOException;
import java.io.OutputStream;
+import java.io.Serializable;
import java.nio.ByteBuffer;
import java.util.Objects;
@@ -37,6 +38,7 @@ public class OutputStreamManager extends AbstractManager implements ByteBufferDe
protected OutputStreamManager(final OutputStream os, final String streamName, final Layout<?> layout,
final boolean writeHeader) {
+ // Can't use new ctor because it throws an exception
this(os, streamName, layout, writeHeader, ByteBuffer.wrap(new byte[Constants.ENCODER_BYTE_BUFFER_SIZE]));
}
@@ -48,7 +50,9 @@ public class OutputStreamManager extends AbstractManager implements ByteBufferDe
* @param writeHeader
* @param byteBuffer
* @since 2.6
+ * @deprecated
*/
+ @Deprecated
protected OutputStreamManager(final OutputStream os, final String streamName, final Layout<?> layout,
final boolean writeHeader, final ByteBuffer byteBuffer) {
super(streamName);
@@ -58,7 +62,7 @@ public class OutputStreamManager extends AbstractManager implements ByteBufferDe
final byte[] header = layout.getHeader();
if (header != null) {
try {
- this.os.write(header, 0, header.length);
+ getOutputStream().write(header, 0, header.length);
} catch (final IOException e) {
logError("Unable to write header", e);
}
@@ -68,6 +72,30 @@ public class OutputStreamManager extends AbstractManager implements ByteBufferDe
}
/**
+ * @param byteBuffer
+ * @throws IOException
+ * @since 2.7
+ */
+ protected OutputStreamManager(final String streamName, final boolean lazyCreate, final Layout<? extends Serializable> layout,
+ final boolean writeHeader, final ByteBuffer byteBuffer)
+ throws IOException {
+ super(streamName);
+ this.layout = layout;
+ this.byteBuffer = Objects.requireNonNull(byteBuffer, "byteBuffer");
+ this.os = lazyCreate ? null : createOutputStream();
+ if (writeHeader && layout != null) {
+ final byte[] header = layout.getHeader();
+ if (header != null) {
+ try {
+ getOutputStream().write(header, 0, header.length);
+ } catch (final IOException e) {
+ logError("Unable to write header for " + streamName, e);
+ }
+ }
+ }
+ }
+
+ /**
* Creates a Manager.
*
* @param name The name of the stream to manage.
@@ -81,6 +109,11 @@ public class OutputStreamManager extends AbstractManager implements ByteBufferDe
return AbstractManager.getManager(name, factory, data);
}
+ @SuppressWarnings("unused")
+ protected OutputStream createOutputStream() throws IOException {
+ throw new IllegalStateException(getClass().getCanonicalName() + " must implement createOutputStream()");
+ }
+
/**
* Indicate whether the footer should be skipped or not.
* @param skipFooter true if the footer should be skipped.
@@ -119,7 +152,10 @@ public class OutputStreamManager extends AbstractManager implements ByteBufferDe
return getCount() > 0;
}
- protected OutputStream getOutputStream() {
+ protected OutputStream getOutputStream() throws IOException {
+ if (os == null) {
+ os = createOutputStream();
+ }
return os;
}
@@ -208,10 +244,9 @@ public class OutputStreamManager extends AbstractManager implements ByteBufferDe
*/
protected synchronized void writeToDestination(final byte[] bytes, final int offset, final int length) {
try {
- os.write(bytes, offset, length);
+ getOutputStream().write(bytes, offset, length);
} catch (final IOException ex) {
- final String msg = "Error writing to stream " + getName();
- throw new AppenderLoggingException(msg, ex);
+ throw new AppenderLoggingException("Error writing to stream " + getName(), ex);
}
}
@@ -220,11 +255,13 @@ public class OutputStreamManager extends AbstractManager implements ByteBufferDe
* @since 2.6
*/
protected synchronized void flushDestination() {
- try {
- os.flush();
- } catch (final IOException ex) {
- final String msg = "Error flushing stream " + getName();
- throw new AppenderLoggingException(msg, ex);
+ final OutputStream stream = os; // access volatile field only once per method
+ if (stream != null) {
+ try {
+ stream.flush();
+ } catch (final IOException ex) {
+ throw new AppenderLoggingException("Error flushing stream " + getName(), ex);
+ }
}
}
@@ -255,7 +292,7 @@ public class OutputStreamManager extends AbstractManager implements ByteBufferDe
protected synchronized void close() {
flush();
final OutputStream stream = os; // access volatile field only once per method
- if (stream == System.out || stream == System.err) {
+ if (stream == null || stream == System.out || stream == System.err) {
return;
}
try {
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/61f706fc/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderTest.java
index 9934d10..760715d 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderTest.java
@@ -24,6 +24,7 @@ import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.nio.file.Files;
+import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
@@ -44,117 +45,151 @@ import org.junit.Assert;
import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
/**
- *
+ * Tests {@link FileAppender}.
*/
+@RunWith(Parameterized.class)
public class FileAppenderTest {
- private static final String FILENAME = "target/fileAppenderTest.log";
+ @Parameters(name = "lazyCreate = {0}")
+ public static Boolean[] getParameters() {
+ return new Boolean[] { false, true };
+ }
+
+ private static final String FILE_NAME = "target/fileAppenderTest.log";
+ private static final Path PATH = Paths.get(FILE_NAME);
private static final int THREADS = 2;
+ public FileAppenderTest(boolean lazyCreate) {
+ super();
+ this.lazyCreate = lazyCreate;
+ }
+
+ private final boolean lazyCreate;
+ private final int threadCount = THREADS;
+
@Rule
- public CleanFiles files = new CleanFiles(FILENAME);
+ public CleanFiles files = new CleanFiles(PATH);
@AfterClass
public static void cleanupClass() {
- assertTrue("Manager for " + FILENAME + " not removed", !AbstractManager.hasManager(FILENAME));
+ assertTrue("Manager for " + FILE_NAME + " not removed", !AbstractManager.hasManager(FILE_NAME));
}
@Test
public void testAppender() throws Exception {
- writer(false, 1, "test");
- verifyFile(1);
+ final int logEventCount = 1;
+ writer(false, logEventCount, "test", lazyCreate, false);
+ verifyFile(logEventCount);
+ }
+
+ @Test
+ public void testLazyStart() throws Exception {
+ final Layout<String> layout = PatternLayout.newBuilder().withPattern(PatternLayout.SIMPLE_CONVERSION_PATTERN)
+ .build();
+ final FileAppender appender = FileAppender.createAppender(FILE_NAME, true, false, "test", false, false, false,
+ 1, layout, null, false, null, lazyCreate, null);
+ try {
+ Assert.assertNotEquals(lazyCreate, Files.exists(PATH));
+ appender.start();
+ Assert.assertNotEquals(lazyCreate, Files.exists(PATH));
+ } finally {
+ appender.stop();
+ }
+ Assert.assertNotEquals(lazyCreate, Files.exists(PATH));
}
@Test
public void testSmallestBufferSize() throws Exception {
- final Layout<String> layout = PatternLayout.newBuilder().withPattern(PatternLayout.SIMPLE_CONVERSION_PATTERN).build();
- final String bufferSizeStr = "1";
- final FileAppender appender = FileAppender.createAppender(FILENAME, "true", "false", "test", "false", "false",
- "false", bufferSizeStr, layout, null, "false", null, null);
- appender.start();
- final File file = new File(FILENAME);
- assertTrue("Appender did not start", appender.isStarted());
- long curLen = file.length();
- long prevLen = curLen;
- assertTrue("File length: " + curLen, curLen == 0);
- for (int i = 0; i < 100; ++i) {
- final LogEvent event = Log4jLogEvent.newBuilder().setLoggerName("TestLogger") //
- .setLoggerFqcn(FileAppenderTest.class.getName()).setLevel(Level.INFO) //
- .setMessage(new SimpleMessage("Test")).setThreadName(this.getClass().getSimpleName()) //
- .setTimeMillis(System.currentTimeMillis()).build();
- try {
- appender.append(event);
- curLen = file.length();
- assertTrue("File length: " + curLen, curLen > prevLen);
- Thread.sleep(25); // Give up control long enough for another thread/process to occasionally do
- // something.
- } catch (final Exception ex) {
- throw ex;
+ final Layout<String> layout = PatternLayout.newBuilder().withPattern(PatternLayout.SIMPLE_CONVERSION_PATTERN)
+ .build();
+ final FileAppender appender = FileAppender.createAppender(FILE_NAME, true, false, "test", false, false, false,
+ 1, layout, null, false, null, lazyCreate, null);
+ try {
+ appender.start();
+ final File file = new File(FILE_NAME);
+ assertTrue("Appender did not start", appender.isStarted());
+ Assert.assertNotEquals(lazyCreate, Files.exists(PATH));
+ long curLen = file.length();
+ long prevLen = curLen;
+ assertTrue("File length: " + curLen, curLen == 0);
+ for (int i = 0; i < 100; ++i) {
+ final LogEvent event = Log4jLogEvent.newBuilder().setLoggerName("TestLogger") //
+ .setLoggerFqcn(FileAppenderTest.class.getName()).setLevel(Level.INFO) //
+ .setMessage(new SimpleMessage("Test")).setThreadName(this.getClass().getSimpleName()) //
+ .setTimeMillis(System.currentTimeMillis()).build();
+ try {
+ appender.append(event);
+ curLen = file.length();
+ assertTrue("File length: " + curLen, curLen > prevLen);
+ // Give up control long enough for another thread/process to occasionally do something.
+ Thread.sleep(25);
+ } catch (final Exception ex) {
+ throw ex;
+ }
+ prevLen = curLen;
}
- prevLen = curLen;
+ } finally {
+ appender.stop();
}
- appender.stop();
assertFalse("Appender did not stop", appender.isStarted());
}
@Test
public void testLockingAppender() throws Exception {
- writer(true, 1, "test");
- verifyFile(1);
+ final int logEventCount = 1;
+ writer(true, logEventCount, "test", lazyCreate, false);
+ verifyFile(logEventCount);
}
@Test
- public void testMultipleAppenders() throws Exception {
- final ExecutorService pool = Executors.newFixedThreadPool(THREADS);
- final Exception[] error = new Exception[1];
- final int count = 100;
- final Runnable runnable = new FileWriterRunnable(false, count, error);
- for (int i = 0; i < THREADS; ++i) {
- pool.execute(runnable);
+ public void testMultipleAppenderThreads() throws Exception {
+ testMultipleLockingAppenderThreads(false, threadCount);
+ }
+
+ private void testMultipleLockingAppenderThreads(final boolean lock, int threadCount)
+ throws InterruptedException, Exception {
+ final ExecutorService threadPool = Executors.newFixedThreadPool(threadCount);
+ final Exception[] exceptionRef = new Exception[1];
+ final int logEventCount = 100;
+ final Runnable runnable = new FileWriterRunnable(lock, logEventCount, exceptionRef);
+ for (int i = 0; i < threadCount; ++i) {
+ threadPool.execute(runnable);
}
- pool.shutdown();
- pool.awaitTermination(10, TimeUnit.SECONDS);
- if (error[0] != null) {
- throw error[0];
+ threadPool.shutdown();
+ Assert.assertTrue("The thread pool has not shutdown: " + threadPool,
+ threadPool.awaitTermination(10, TimeUnit.SECONDS));
+ if (exceptionRef[0] != null) {
+ throw exceptionRef[0];
}
- verifyFile(THREADS * count);
+ verifyFile(threadCount * logEventCount);
}
@Test
- public void testMultipleLockedAppenders() throws Exception {
- final ExecutorService pool = Executors.newFixedThreadPool(THREADS);
- final Exception[] error = new Exception[1];
- final int count = 100;
- final Runnable runnable = new FileWriterRunnable(true, count, error);
- for (int i = 0; i < THREADS; ++i) {
- pool.execute(runnable);
- }
- pool.shutdown();
- pool.awaitTermination(10, TimeUnit.SECONDS);
- if (error[0] != null) {
- throw error[0];
- }
- verifyFile(THREADS * count);
+ public void testMultipleLockingAppenders() throws Exception {
+ testMultipleLockingAppenderThreads(true, threadCount);
}
@Test
@Ignore
public void testMultipleVMs() throws Exception {
final String classPath = System.getProperty("java.class.path");
- final Integer count = 10;
- final int processeCount = 3;
- final Process[] processes = new Process[processeCount];
- final ProcessBuilder[] builders = new ProcessBuilder[processeCount];
- for (int index = 0; index < processeCount; ++index) {
+ final Integer logEventCount = 10;
+ final int processCount = 3;
+ final Process[] processes = new Process[processCount];
+ final ProcessBuilder[] builders = new ProcessBuilder[processCount];
+ for (int index = 0; index < processCount; ++index) {
builders[index] = new ProcessBuilder("java", "-cp", classPath, ProcessTest.class.getName(),
- "Process " + index, count.toString(), "true");
+ "Process " + index, logEventCount.toString(), "true", Boolean.toString(lazyCreate));
}
- for (int index = 0; index < processeCount; ++index) {
+ for (int index = 0; index < processCount; ++index) {
processes[index] = builders[index].start();
}
- for (int index = 0; index < processeCount; ++index) {
+ for (int index = 0; index < processCount; ++index) {
final Process process = processes[index];
// System.out.println("Process " + index + " exited with " + p.waitFor());
try (final BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()))) {
@@ -165,63 +200,75 @@ public class FileAppenderTest {
}
process.destroy();
}
- verifyFile(count * processeCount);
+ verifyFile(logEventCount * processCount);
}
- private static void writer(final boolean lock, final int count, final String name) throws Exception {
- final Layout<String> layout = PatternLayout.newBuilder().withPattern(PatternLayout.SIMPLE_CONVERSION_PATTERN).build();
- final FileAppender app = FileAppender.createAppender(FILENAME, "true", Boolean.toString(lock), "test", "false",
- "false", "false", null, layout, null, "false", null, null);
- app.start();
- assertTrue("Appender did not start", app.isStarted());
- Assert.assertTrue(Files.exists(Paths.get(FILENAME)));
- for (int i = 0; i < count; ++i) {
- final LogEvent event = Log4jLogEvent.newBuilder().setLoggerName("TestLogger")
- .setLoggerFqcn(FileAppenderTest.class.getName()).setLevel(Level.INFO)
- .setMessage(new SimpleMessage("Test")).setThreadName(name).setTimeMillis(System.currentTimeMillis())
- .build();
- try {
- app.append(event);
- Thread.sleep(25); // Give up control long enough for another thread/process to occasionally do
- // something.
- } catch (final Exception ex) {
- throw ex;
+ private static void writer(final boolean lock, final int logEventCount, final String name, boolean lazyCreate,
+ boolean concurrent) throws Exception {
+ final Layout<String> layout = PatternLayout.newBuilder().withPattern(PatternLayout.SIMPLE_CONVERSION_PATTERN)
+ .build();
+ final FileAppender appender = FileAppender.createAppender(FILE_NAME, true, lock, "test", false, false, false,
+ FileAppender.DEFAULT_BUFFER_SIZE, layout, null, false, null, lazyCreate, null);
+ try {
+ appender.start();
+ assertTrue("Appender did not start", appender.isStarted());
+ final boolean exists = Files.exists(PATH);
+ String msg = String.format("concurrent = %s, lazyCreate = %s, file exists = %s", concurrent, lazyCreate,
+ exists);
+ // If concurrent the file might have been created (or not.)
+ // Can't really test lazyCreate && concurrent.
+ final boolean expectFileCreated = !lazyCreate;
+ if (concurrent && expectFileCreated) {
+ Assert.assertTrue(msg, exists);
+ } else if (expectFileCreated) {
+ Assert.assertNotEquals(msg, lazyCreate, exists);
}
+ for (int i = 0; i < logEventCount; ++i) {
+ final LogEvent logEvent = Log4jLogEvent.newBuilder().setLoggerName("TestLogger")
+ .setLoggerFqcn(FileAppenderTest.class.getName()).setLevel(Level.INFO)
+ .setMessage(new SimpleMessage("Test")).setThreadName(name)
+ .setTimeMillis(System.currentTimeMillis()).build();
+ try {
+ appender.append(logEvent);
+ Thread.sleep(25); // Give up control long enough for another thread/process to occasionally do
+ // something.
+ } catch (final Exception ex) {
+ throw ex;
+ }
+ }
+ } finally {
+ appender.stop();
}
- app.stop();
- assertFalse("Appender did not stop", app.isStarted());
+ assertFalse("Appender did not stop", appender.isStarted());
}
private void verifyFile(final int count) throws Exception {
// String expected = "[\\w]* \\[\\s*\\] INFO TestLogger - Test$";
final String expected = "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2},\\d{3} \\[[^\\]]*\\] INFO TestLogger - Test";
final Pattern pattern = Pattern.compile(expected);
- final FileInputStream fis = new FileInputStream(FILENAME);
- final BufferedReader is = new BufferedReader(new InputStreamReader(fis));
- int counter = 0;
- String str = Strings.EMPTY;
- while (is.ready()) {
- str = is.readLine();
- // System.out.println(str);
- ++counter;
- final Matcher matcher = pattern.matcher(str);
- assertTrue("Bad data: " + str, matcher.matches());
+ int lines = 0;
+ try (final BufferedReader is = new BufferedReader(new InputStreamReader(new FileInputStream(FILE_NAME)))) {
+ String str = Strings.EMPTY;
+ while (is.ready()) {
+ str = is.readLine();
+ // System.out.println(str);
+ ++lines;
+ final Matcher matcher = pattern.matcher(str);
+ assertTrue("Unexpected data: " + str, matcher.matches());
+ }
}
- fis.close();
- assertTrue("Incorrect count: was " + counter + " should be " + count, count == counter);
- fis.close();
-
+ Assert.assertEquals(count, lines);
}
public class FileWriterRunnable implements Runnable {
private final boolean lock;
- private final int count;
- private final Exception[] error;
+ private final int logEventCount;
+ private final Exception[] exceptionRef;
- public FileWriterRunnable(final boolean lock, final int count, final Exception[] error) {
+ public FileWriterRunnable(final boolean lock, final int logEventCount, final Exception[] exceptionRef) {
this.lock = lock;
- this.count = count;
- this.error = error;
+ this.logEventCount = logEventCount;
+ this.exceptionRef = exceptionRef;
}
@Override
@@ -229,10 +276,9 @@ public class FileAppenderTest {
final Thread thread = Thread.currentThread();
try {
- writer(lock, count, thread.getName());
-
+ writer(lock, logEventCount, thread.getName(), lazyCreate, true);
} catch (final Exception ex) {
- error[0] = ex;
+ exceptionRef[0] = ex;
throw new RuntimeException(ex);
}
}
@@ -256,10 +302,12 @@ public class FileAppenderTest {
}
final boolean lock = Boolean.parseBoolean(args[2]);
+ final boolean lazyCreate = Boolean.parseBoolean(args[2]);
+
// System.out.println("Got arguments " + id + ", " + count + ", " + lock);
try {
- writer(lock, count, id);
+ writer(lock, count, id, lazyCreate, true);
// thread.sleep(50);
} catch (final Exception ex) {
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/61f706fc/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/InMemoryAppender.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/InMemoryAppender.java b/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/InMemoryAppender.java
index 2d7ccaa..da8b71a 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/InMemoryAppender.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/InMemoryAppender.java
@@ -17,6 +17,7 @@
package org.apache.logging.log4j.test.appender;
import java.io.ByteArrayOutputStream;
+import java.io.IOException;
import java.io.Serializable;
import org.apache.logging.log4j.core.Layout;
@@ -48,7 +49,11 @@ public class InMemoryAppender extends AbstractOutputStreamAppender<InMemoryAppen
@Override
public String toString() {
- return getOutputStream().toString();
+ try {
+ return getOutputStream().toString();
+ } catch (IOException e) {
+ throw new IllegalStateException(e);
+ }
}
}
}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/61f706fc/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 1f1fa85..922aef0 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -60,6 +60,9 @@
<action issue="LOG4J2-1313" dev="rpopma" type="fix" due-to="Philipp Knobel">
Properties declared in configuration can now have their value either in the element body or in an attribute named "value".
</action>
+ <action issue="LOG4J2-1501" dev="ggregory" type="add" due-to="Gary Gregory">
+ [LOG4J2-1501] FileAppender should be able to create files lazily.
+ </action>
<action issue="LOG4J2-1471" dev="ggregory" type="add" due-to="Gary Gregory">
[PatternLayout] Add an ANSI option to %xThrowable.
</action>
[37/50] logging-log4j2 git commit: Add assert.
Posted by rp...@apache.org.
Add assert.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/ba677d82
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/ba677d82
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/ba677d82
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: ba677d82dc4bf8bec3c9f129653ac13862bbcf38
Parents: 2d40959
Author: ggregory <gg...@US-L-GG02.rocketsoftware.com>
Authored: Tue Aug 9 10:41:22 2016 -0700
Committer: ggregory <gg...@US-L-GG02.rocketsoftware.com>
Committed: Tue Aug 9 10:41:22 2016 -0700
----------------------------------------------------------------------
.../config/plugins/validation/validators/RequiredValidatorTest.java | 1 +
1 file changed, 1 insertion(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ba677d82/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/validation/validators/RequiredValidatorTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/validation/validators/RequiredValidatorTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/validation/validators/RequiredValidatorTest.java
index fbb7660..15a51ae 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/validation/validators/RequiredValidatorTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/validation/validators/RequiredValidatorTest.java
@@ -38,6 +38,7 @@ public class RequiredValidatorTest {
final PluginManager manager = new PluginManager("Test");
manager.collectPlugins();
plugin = (PluginType<ValidatingPlugin>) manager.getPluginType("Validator");
+ assertNotNull("Rebuild this module to make sure annotaion processing kicks in.", plugin);
node = new Node(null, "Validator", plugin);
}
[02/50] logging-log4j2 git commit: Make
AbstractStringLayout.getLogEventFactory() private per Remko's suggestion.
Posted by rp...@apache.org.
Make AbstractStringLayout.getLogEventFactory() private per Remko's
suggestion.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/8bb88dfa
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/8bb88dfa
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/8bb88dfa
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: 8bb88dfa137c63936e719834d8e688ca764e2809
Parents: 5e1bb8b
Author: Gary Gregory <gg...@apache.org>
Authored: Sun Aug 7 09:48:43 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Sun Aug 7 09:48:43 2016 -0700
----------------------------------------------------------------------
.../org/apache/logging/log4j/core/layout/AbstractStringLayout.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/8bb88dfa/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/AbstractStringLayout.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/AbstractStringLayout.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/AbstractStringLayout.java
index 9e7deb5..52ca082 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/AbstractStringLayout.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/AbstractStringLayout.java
@@ -212,7 +212,7 @@ public abstract class AbstractStringLayout extends AbstractLayout<String> implem
return headerSerializer;
}
- protected DefaultLogEventFactory getLogEventFactory() {
+ private DefaultLogEventFactory getLogEventFactory() {
return DefaultLogEventFactory.getInstance();
}
[50/50] logging-log4j2 git commit: Merge remote-tracking branch
'remotes/origin/master' into
LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Posted by rp...@apache.org.
Merge remote-tracking branch 'remotes/origin/master' into LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/a12913d7
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/a12913d7
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/a12913d7
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: a12913d7ca2c109e31cc2c65eca1631d8b0d6d81
Parents: 6b5a80a c0cb21e
Author: rpopma <rp...@apache.org>
Authored: Fri Aug 12 21:11:44 2016 +0900
Committer: rpopma <rp...@apache.org>
Committed: Fri Aug 12 21:11:44 2016 +0900
----------------------------------------------------------------------
src/site/xdoc/manual/layouts.xml.vm | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
[20/50] logging-log4j2 git commit: [LOG4J2-1501] FileAppender should
be able to create files lazily. Use final.
Posted by rp...@apache.org.
[LOG4J2-1501] FileAppender should be able to create files lazily. Use
final.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/16d06e8c
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/16d06e8c
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/16d06e8c
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: 16d06e8c0450548ec155f68a1f75adc47f1384a8
Parents: 32c9b99
Author: Gary Gregory <gg...@apache.org>
Authored: Mon Aug 8 10:42:09 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Mon Aug 8 10:42:09 2016 -0700
----------------------------------------------------------------------
.../core/appender/OutputStreamAppenderTest.java | 206 +++++++++----------
1 file changed, 103 insertions(+), 103 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/16d06e8c/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/OutputStreamAppenderTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/OutputStreamAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/OutputStreamAppenderTest.java
index 206e98b..dd17dfb 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/OutputStreamAppenderTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/OutputStreamAppenderTest.java
@@ -1,103 +1,103 @@
-/*
- * 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.logging.log4j.core.appender;
-
-import java.io.BufferedOutputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.OutputStream;
-import java.sql.SQLException;
-
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.core.Appender;
-import org.apache.logging.log4j.core.Layout;
-import org.apache.logging.log4j.core.LoggerContext;
-import org.apache.logging.log4j.core.config.Configuration;
-import org.apache.logging.log4j.core.layout.PatternLayout;
-import org.junit.Assert;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.TestName;
-
-/**
- * Tests {@link OutputStreamAppender}.
- */
-public class OutputStreamAppenderTest {
-
- private static final String TEST_MSG = "FOO ERROR";
-
- @Rule
- public TestName testName = new TestName();
-
- private String getName(final OutputStream out) {
- return out.getClass().getSimpleName() + "." + testName.getMethodName();
- }
-
- /**
- * Tests that you can add an output stream appender dynamically.
- */
- private void addAppender(final OutputStream outputStream, final String outputStreamName) {
- final LoggerContext context = LoggerContext.getContext(false);
- final Configuration config = context.getConfiguration();
- final PatternLayout layout = PatternLayout.createDefaultLayout(config);
- final Appender appender = OutputStreamAppender.createAppender(layout, null, outputStream, outputStreamName, false, true);
- appender.start();
- config.addAppender(appender);
- ConfigurationTestUtils.updateLoggers(appender, config);
- }
-
- @Test
- public void testOutputStreamAppenderToBufferedOutputStream() throws SQLException {
- final ByteArrayOutputStream out = new ByteArrayOutputStream();
- final OutputStream os = new BufferedOutputStream(out);
- final String name = getName(out);
- final Logger logger = LogManager.getLogger(name);
- addAppender(os, name);
- logger.error(TEST_MSG);
- final String actual = out.toString();
- Assert.assertTrue(actual, actual.contains(TEST_MSG));
- }
-
- @Test
- public void testOutputStreamAppenderToByteArrayOutputStream() throws SQLException {
- final OutputStream out = new ByteArrayOutputStream();
- final String name = getName(out);
- final Logger logger = LogManager.getLogger(name);
- addAppender(out, name);
- logger.error(TEST_MSG);
- final String actual = out.toString();
- Assert.assertTrue(actual, actual.contains(TEST_MSG));
- }
-
- /**
- * Validates that the code pattern we use to add an appender on the fly
- * works with a basic appender that is not the new OutputStream appender or
- * new Writer appender.
- */
- @Test
- public void testUpdatePatternWithFileAppender() {
- final LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
- final Configuration config = ctx.getConfiguration();
- final Layout<?> layout = PatternLayout.createDefaultLayout();
- final Appender appender = FileAppender.createAppender("target/" + getClass().getName() + ".log", "false",
- "false", "File", "true", "false", "false", "4000", layout, null, "false", null, config);
- appender.start();
- config.addAppender(appender);
- ConfigurationTestUtils.updateLoggers(appender, config);
- LogManager.getLogger().error("FOO MSG");
- }
-}
+/*
+ * 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.logging.log4j.core.appender;
+
+import java.io.BufferedOutputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.OutputStream;
+import java.sql.SQLException;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.core.Appender;
+import org.apache.logging.log4j.core.Layout;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.core.config.Configuration;
+import org.apache.logging.log4j.core.layout.PatternLayout;
+import org.junit.Assert;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TestName;
+
+/**
+ * Tests {@link OutputStreamAppender}.
+ */
+public class OutputStreamAppenderTest {
+
+ private static final String TEST_MSG = "FOO ERROR";
+
+ @Rule
+ public TestName testName = new TestName();
+
+ private String getName(final OutputStream out) {
+ return out.getClass().getSimpleName() + "." + testName.getMethodName();
+ }
+
+ /**
+ * Tests that you can add an output stream appender dynamically.
+ */
+ private void addAppender(final OutputStream outputStream, final String outputStreamName) {
+ final LoggerContext context = LoggerContext.getContext(false);
+ final Configuration config = context.getConfiguration();
+ final PatternLayout layout = PatternLayout.createDefaultLayout(config);
+ final Appender appender = OutputStreamAppender.createAppender(layout, null, outputStream, outputStreamName, false, true);
+ appender.start();
+ config.addAppender(appender);
+ ConfigurationTestUtils.updateLoggers(appender, config);
+ }
+
+ @Test
+ public void testOutputStreamAppenderToBufferedOutputStream() throws SQLException {
+ final ByteArrayOutputStream out = new ByteArrayOutputStream();
+ final OutputStream os = new BufferedOutputStream(out);
+ final String name = getName(out);
+ final Logger logger = LogManager.getLogger(name);
+ addAppender(os, name);
+ logger.error(TEST_MSG);
+ final String actual = out.toString();
+ Assert.assertTrue(actual, actual.contains(TEST_MSG));
+ }
+
+ @Test
+ public void testOutputStreamAppenderToByteArrayOutputStream() throws SQLException {
+ final OutputStream out = new ByteArrayOutputStream();
+ final String name = getName(out);
+ final Logger logger = LogManager.getLogger(name);
+ addAppender(out, name);
+ logger.error(TEST_MSG);
+ final String actual = out.toString();
+ Assert.assertTrue(actual, actual.contains(TEST_MSG));
+ }
+
+ /**
+ * Validates that the code pattern we use to add an appender on the fly
+ * works with a basic appender that is not the new OutputStream appender or
+ * new Writer appender.
+ */
+ @Test
+ public void testUpdatePatternWithFileAppender() {
+ final LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
+ final Configuration config = ctx.getConfiguration();
+ final Layout<?> layout = PatternLayout.createDefaultLayout();
+ final Appender appender = FileAppender.createAppender("target/" + getClass().getName() + ".log", false,
+ false, "File", true, false, false, 4000, layout, null, false, null, false, config);
+ appender.start();
+ config.addAppender(appender);
+ ConfigurationTestUtils.updateLoggers(appender, config);
+ LogManager.getLogger().error("FOO MSG");
+ }
+}
[39/50] logging-log4j2 git commit: Use "with" as the Builder setter
method prefix.
Posted by rp...@apache.org.
Use "with" as the Builder setter method prefix.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/e9cec779
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/e9cec779
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/e9cec779
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: e9cec779d2f6722f97c6e403502a5789ebcaeaa8
Parents: f95a85b
Author: Gary Gregory <gg...@apache.org>
Authored: Tue Aug 9 17:27:19 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Tue Aug 9 17:27:19 2016 -0700
----------------------------------------------------------------------
.../log4j/core/config/plugins/validation/ValidatingPlugin.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/e9cec779/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/validation/ValidatingPlugin.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/validation/ValidatingPlugin.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/validation/ValidatingPlugin.java
index 95a4209..6068f46 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/validation/ValidatingPlugin.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/validation/ValidatingPlugin.java
@@ -57,7 +57,7 @@ public class ValidatingPlugin {
@Required(message = "The name given by the builder is null")
private String name;
- public Builder setName(final String name) {
+ public Builder withName(final String name) {
this.name = name;
return this;
}
[34/50] logging-log4j2 git commit: (GC) We know the length in advance,
so use it.
Posted by rp...@apache.org.
(GC) We know the length in advance, so use it.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/d4dca3f2
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/d4dca3f2
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/d4dca3f2
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: d4dca3f27643053ba53651b5e446fcf44157975f
Parents: 4eae71b
Author: Gary Gregory <gg...@apache.org>
Authored: Mon Aug 8 17:19:42 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Mon Aug 8 17:19:42 2016 -0700
----------------------------------------------------------------------
.../java/org/apache/logging/log4j/core/config/AppendersPlugin.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/d4dca3f2/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppendersPlugin.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppendersPlugin.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppendersPlugin.java
index e5ae0db..3545d2c 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppendersPlugin.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppendersPlugin.java
@@ -42,7 +42,7 @@ public final class AppendersPlugin {
public static ConcurrentMap<String, Appender> createAppenders(
@PluginElement("Appenders") final Appender[] appenders) {
- final ConcurrentMap<String, Appender> map = new ConcurrentHashMap<>();
+ final ConcurrentMap<String, Appender> map = new ConcurrentHashMap<>(appenders.length);
for (final Appender appender : appenders) {
map.put(appender.getName(), appender);
[27/50] logging-log4j2 git commit: [LOG4J2-1505] Create a Builder for
FileAppender. Use @Required per Matt's suggestion. Thank you Matt!
Posted by rp...@apache.org.
[LOG4J2-1505] Create a Builder for FileAppender. Use @Required per
Matt's suggestion. Thank you Matt!
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/9401a1f1
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/9401a1f1
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/9401a1f1
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: 9401a1f1e52e271727c2b07a5b7aeafcb7f1768b
Parents: de528c5
Author: Gary Gregory <gg...@apache.org>
Authored: Mon Aug 8 12:54:49 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Mon Aug 8 12:54:49 2016 -0700
----------------------------------------------------------------------
.../apache/logging/log4j/core/appender/FileAppender.java | 11 +++--------
1 file changed, 3 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/9401a1f1/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileAppender.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileAppender.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileAppender.java
index 3f364cc..b13cb01 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileAppender.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileAppender.java
@@ -28,6 +28,7 @@ import org.apache.logging.log4j.core.config.plugins.PluginBuilderAttribute;
import org.apache.logging.log4j.core.config.plugins.PluginBuilderFactory;
import org.apache.logging.log4j.core.config.plugins.PluginConfiguration;
import org.apache.logging.log4j.core.config.plugins.PluginElement;
+import org.apache.logging.log4j.core.config.plugins.validation.constraints.Required;
import org.apache.logging.log4j.core.layout.PatternLayout;
import org.apache.logging.log4j.core.net.Advertiser;
import org.apache.logging.log4j.core.util.Booleans;
@@ -45,6 +46,7 @@ public final class FileAppender extends AbstractOutputStreamAppender<FileManager
public static class Builder implements org.apache.logging.log4j.core.util.Builder<FileAppender> {
@PluginBuilderAttribute
+ @Required
private String fileName;
@PluginBuilderAttribute
@@ -54,6 +56,7 @@ public final class FileAppender extends AbstractOutputStreamAppender<FileManager
private boolean locking;
@PluginBuilderAttribute
+ @Required
private String name;
@PluginBuilderAttribute
@@ -95,14 +98,6 @@ public final class FileAppender extends AbstractOutputStreamAppender<FileManager
if (!bufferedIo && bufferSize > 0) {
LOGGER.warn("The bufferSize is set to {} but bufferedIo is not true: {}", bufferSize, bufferedIo);
}
- if (name == null) {
- LOGGER.error("No name provided for FileAppender");
- return null;
- }
- if (fileName == null) {
- LOGGER.error("No filename provided for FileAppender with name {}", name);
- return null;
- }
if (layout == null) {
layout = PatternLayout.createDefaultLayout();
}
[17/50] logging-log4j2 git commit: [LOG4J2-1501] FileAppender should
be able to create files lazily. Use final.
Posted by rp...@apache.org.
[LOG4J2-1501] FileAppender should be able to create files lazily. Use
final.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/e950cb51
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/e950cb51
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/e950cb51
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: e950cb5173ef15e6e7c5346f74b1b8193c3aa340
Parents: 69f02bd
Author: Gary Gregory <gg...@apache.org>
Authored: Mon Aug 8 09:51:55 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Mon Aug 8 09:51:55 2016 -0700
----------------------------------------------------------------------
.../java/org/apache/logging/log4j/core/appender/FileManager.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/e950cb51/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileManager.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileManager.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileManager.java
index 71d152b..f88005a 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileManager.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileManager.java
@@ -94,7 +94,7 @@ public class FileManager extends OutputStreamManager {
* @return A FileManager for the File.
*/
public static FileManager getFileManager(final String fileName, final boolean append, boolean locking,
- final boolean bufferedIo, boolean lazyCreate, final String advertiseUri,
+ final boolean bufferedIo, final boolean lazyCreate, final String advertiseUri,
final Layout<? extends Serializable> layout, final int bufferSize, final boolean immediateFlush) {
if (locking && bufferedIo) {
[05/50] logging-log4j2 git commit: Parameterize MAX_TRIES.
Posted by rp...@apache.org.
Parameterize MAX_TRIES.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/96f7d65c
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/96f7d65c
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/96f7d65c
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: 96f7d65c7c14dd92022a42a09d9787f7f81e67bb
Parents: a3b5f73
Author: Gary Gregory <gg...@apache.org>
Authored: Sun Aug 7 11:26:39 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Sun Aug 7 11:26:39 2016 -0700
----------------------------------------------------------------------
.../junit/AbstractExternalFileCleaner.java | 169 ++++++++++---------
.../apache/logging/log4j/junit/CleanFiles.java | 14 +-
.../logging/log4j/junit/CleanFolders.java | 14 +-
.../logging/log4j/junit/LoggerContextRule.java | 4 +-
4 files changed, 104 insertions(+), 97 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/96f7d65c/log4j-core/src/test/java/org/apache/logging/log4j/junit/AbstractExternalFileCleaner.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/junit/AbstractExternalFileCleaner.java b/log4j-core/src/test/java/org/apache/logging/log4j/junit/AbstractExternalFileCleaner.java
index 393b847..7860917 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/junit/AbstractExternalFileCleaner.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/junit/AbstractExternalFileCleaner.java
@@ -1,81 +1,88 @@
-/*
- * 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.logging.log4j.junit;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import org.junit.rules.ExternalResource;
-
-public abstract class AbstractExternalFileCleaner extends ExternalResource {
-
- private final boolean cleanAfter;
- private final boolean cleanBefore;
- private final List<File> files;
-
- public AbstractExternalFileCleaner(final boolean before, final boolean after, final File... files) {
- this.cleanBefore = before;
- this.cleanAfter = after;
- this.files = Arrays.asList(files);
- }
-
- public AbstractExternalFileCleaner(final boolean before, final boolean after, final String... fileNames) {
- this.cleanBefore = before;
- this.cleanAfter = after;
- this.files = new ArrayList<>(fileNames.length);
- for (final String fileName : fileNames) {
- this.files.add(new File(fileName));
- }
- }
-
- @Override
- protected void after() {
- if (cleanAfter()) {
- this.clean();
- }
- }
-
- @Override
- protected void before() {
- if (cleanBefore()) {
- this.clean();
- }
- }
-
- abstract protected void clean();
-
- public boolean cleanAfter() {
- return cleanAfter;
- }
-
- public boolean cleanBefore() {
- return cleanBefore;
- }
-
- public List<File> getFiles() {
- return files;
- }
-
- @Override
- public String toString() {
- return getClass().getSimpleName() + " [files=" + files + ", cleanAfter=" + cleanAfter + ", cleanBefore="
- + cleanBefore + "]";
- }
-
-}
+/*
+ * 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.logging.log4j.junit;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.junit.rules.ExternalResource;
+
+public abstract class AbstractExternalFileCleaner extends ExternalResource {
+
+ private final boolean cleanAfter;
+ private final boolean cleanBefore;
+ private final List<File> files;
+ private final int maxTries;
+
+ public AbstractExternalFileCleaner(final boolean before, final boolean after, final int maxTries, final File... files) {
+ this.cleanBefore = before;
+ this.cleanAfter = after;
+ this.files = Arrays.asList(files);
+ this.maxTries = maxTries;
+ }
+
+ public AbstractExternalFileCleaner(final boolean before, final boolean after, final int maxTries, final String... fileNames) {
+ this.cleanBefore = before;
+ this.cleanAfter = after;
+ this.files = new ArrayList<>(fileNames.length);
+ for (final String fileName : fileNames) {
+ this.files.add(new File(fileName));
+ }
+ this.maxTries = maxTries;
+ }
+
+ @Override
+ protected void after() {
+ if (cleanAfter()) {
+ this.clean();
+ }
+ }
+
+ @Override
+ protected void before() {
+ if (cleanBefore()) {
+ this.clean();
+ }
+ }
+
+ abstract protected void clean();
+
+ public boolean cleanAfter() {
+ return cleanAfter;
+ }
+
+ public boolean cleanBefore() {
+ return cleanBefore;
+ }
+
+ public List<File> getFiles() {
+ return files;
+ }
+
+ public int getMaxTries() {
+ return maxTries;
+ }
+
+ @Override
+ public String toString() {
+ return getClass().getSimpleName() + " [files=" + files + ", cleanAfter=" + cleanAfter + ", cleanBefore="
+ + cleanBefore + "]";
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/96f7d65c/log4j-core/src/test/java/org/apache/logging/log4j/junit/CleanFiles.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/junit/CleanFiles.java b/log4j-core/src/test/java/org/apache/logging/log4j/junit/CleanFiles.java
index 1021bf1..d38ca85 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/junit/CleanFiles.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/junit/CleanFiles.java
@@ -28,27 +28,27 @@ import org.junit.Assert;
public class CleanFiles extends AbstractExternalFileCleaner {
private static final int MAX_TRIES = 10;
- public CleanFiles(final boolean before, final boolean after, final File... files) {
- super(before, after, files);
+ public CleanFiles(final boolean before, final boolean after, final int maxTries, final File... files) {
+ super(before, after, maxTries, files);
}
- public CleanFiles(final boolean before, final boolean after, final String... fileNames) {
- super(before, after, fileNames);
+ public CleanFiles(final boolean before, final boolean after, final int maxTries, final String... fileNames) {
+ super(before, after, maxTries, fileNames);
}
public CleanFiles(final File... files) {
- super(true, true, files);
+ super(true, true, MAX_TRIES, files);
}
public CleanFiles(final String... fileNames) {
- super(true, true, fileNames);
+ super(true, true, MAX_TRIES, fileNames);
}
@Override
protected void clean() {
for (final File file : getFiles()) {
if (file.exists()) {
- for (int i = 0; i < MAX_TRIES; i++) {
+ for (int i = 0; i < getMaxTries(); i++) {
try {
if (Files.deleteIfExists(file.toPath())) {
// Break from MAX_TRIES and move on to the next file.
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/96f7d65c/log4j-core/src/test/java/org/apache/logging/log4j/junit/CleanFolders.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/junit/CleanFolders.java b/log4j-core/src/test/java/org/apache/logging/log4j/junit/CleanFolders.java
index 6a2f8d6..a4d9023 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/junit/CleanFolders.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/junit/CleanFolders.java
@@ -34,20 +34,20 @@ import org.junit.Assert;
public class CleanFolders extends AbstractExternalFileCleaner {
private static final int MAX_TRIES = 10;
- public CleanFolders(final boolean before, final boolean after, final File... files) {
- super(before, after, files);
+ public CleanFolders(final boolean before, final boolean after, final int maxTries, final File... files) {
+ super(before, after, maxTries, files);
}
- public CleanFolders(final boolean before, final boolean after, final String... fileNames) {
- super(before, after, fileNames);
+ public CleanFolders(final boolean before, final boolean after, final int maxTries, final String... fileNames) {
+ super(before, after, maxTries, fileNames);
}
public CleanFolders(final File... folders) {
- super(true, true, folders);
+ super(true, true, MAX_TRIES, folders);
}
public CleanFolders(final String... folderNames) {
- super(true, true, folderNames);
+ super(true, true, MAX_TRIES, folderNames);
}
@Override
@@ -57,7 +57,7 @@ public class CleanFolders extends AbstractExternalFileCleaner {
for (final File folder : getFiles()) {
if (folder.exists()) {
final Path path = folder.toPath();
- for (int i = 0; i < MAX_TRIES; i++) {
+ for (int i = 0; i < getMaxTries(); i++) {
try {
cleanFolder(path);
if (failures.containsKey(path)) {
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/96f7d65c/log4j-core/src/test/java/org/apache/logging/log4j/junit/LoggerContextRule.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/junit/LoggerContextRule.java b/log4j-core/src/test/java/org/apache/logging/log4j/junit/LoggerContextRule.java
index 3468e3f..c9b07aa 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/junit/LoggerContextRule.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/junit/LoggerContextRule.java
@@ -248,8 +248,8 @@ public class LoggerContextRule implements TestRule {
return RuleChain.outerRule(new CleanFiles(files)).around(this);
}
- public RuleChain withCleanFoldersRule(final boolean before, final boolean after, final String... folders) {
- return RuleChain.outerRule(new CleanFolders(before, after, folders)).around(this);
+ public RuleChain withCleanFoldersRule(final boolean before, final boolean after, final int maxTries, final String... folders) {
+ return RuleChain.outerRule(new CleanFolders(before, after, maxTries, folders)).around(this);
}
public RuleChain withCleanFoldersRule(final String... folders) {
[28/50] logging-log4j2 git commit: Remove unused import.
Posted by rp...@apache.org.
Remove unused import.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/50a14227
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/50a14227
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/50a14227
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: 50a142272ed243a0f74d9ef33c23fbdab8295f84
Parents: 9401a1f
Author: Gary Gregory <gg...@apache.org>
Authored: Mon Aug 8 13:01:47 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Mon Aug 8 13:01:47 2016 -0700
----------------------------------------------------------------------
.../org/apache/logging/log4j/core/appender/FileAppenderTest.java | 1 -
1 file changed, 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/50a14227/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderTest.java
index b706c31..feb9f11 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderTest.java
@@ -33,7 +33,6 @@ import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.logging.log4j.Level;
-import org.apache.logging.log4j.core.Appender;
import org.apache.logging.log4j.core.Layout;
import org.apache.logging.log4j.core.LogEvent;
import org.apache.logging.log4j.core.impl.Log4jLogEvent;
[47/50] logging-log4j2 git commit: Javadoc.
Posted by rp...@apache.org.
Javadoc.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/87026a9d
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/87026a9d
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/87026a9d
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: 87026a9d38473ba644f0fa57003f278d706761df
Parents: df2d248
Author: Gary Gregory <gg...@apache.org>
Authored: Thu Aug 11 14:58:43 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Thu Aug 11 14:58:43 2016 -0700
----------------------------------------------------------------------
.../org/apache/logging/log4j/core/appender/rolling/FileSize.java | 1 +
1 file changed, 1 insertion(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/87026a9d/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/FileSize.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/FileSize.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/FileSize.java
index 08e6b9e..bd5dce8 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/FileSize.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/FileSize.java
@@ -51,6 +51,7 @@ public final class FileSize {
* abbreviations KB, MB, and GB are also accepted. Matching is case insensitive.
*
* @param string The string to convert
+ * @param defaultValue The default value if a problem is detected parsing.
* @return The Bytes value for the string
*/
public static long parse(final String string, final long defaultValue) {
[31/50] logging-log4j2 git commit: No need to initialize objects to
null.
Posted by rp...@apache.org.
No need to initialize objects to null.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/1558b362
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/1558b362
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/1558b362
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: 1558b3625ecf2c54e27269bfb1b4c671574c93d7
Parents: eee314c
Author: Gary Gregory <gg...@apache.org>
Authored: Mon Aug 8 16:29:08 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Mon Aug 8 16:29:08 2016 -0700
----------------------------------------------------------------------
.../apache/logging/log4j/core/layout/PatternLayout.java | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/1558b362/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/PatternLayout.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/PatternLayout.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/PatternLayout.java
index 7fde3c8..8afc7fd 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/PatternLayout.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/PatternLayout.java
@@ -408,13 +408,13 @@ public final class PatternLayout extends AbstractStringLayout {
private String pattern = PatternLayout.DEFAULT_CONVERSION_PATTERN;
@PluginElement("PatternSelector")
- private PatternSelector patternSelector = null;
+ private PatternSelector patternSelector;
@PluginConfiguration
- private Configuration configuration = null;
+ private Configuration configuration;
@PluginElement("Replace")
- private RegexReplacement regexReplacement = null;
+ private RegexReplacement regexReplacement;
// LOG4J2-783 use platform default by default
@PluginBuilderAttribute
@@ -427,10 +427,10 @@ public final class PatternLayout extends AbstractStringLayout {
private boolean noConsoleNoAnsi = false;
@PluginBuilderAttribute
- private String header = null;
+ private String header;
@PluginBuilderAttribute
- private String footer = null;
+ private String footer;
private Builder() {
}
[49/50] logging-log4j2 git commit: Merge remote-tracking branch
'remotes/origin/master' into
LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Posted by rp...@apache.org.
Merge remote-tracking branch 'remotes/origin/master' into LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/6b5a80ab
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/6b5a80ab
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/6b5a80ab
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: 6b5a80ab8ca417c577075f0cdd8849f368d442e6
Parents: b3a4e9e 87026a9
Author: rpopma <rp...@apache.org>
Authored: Fri Aug 12 20:47:12 2016 +0900
Committer: rpopma <rp...@apache.org>
Committed: Fri Aug 12 20:47:12 2016 +0900
----------------------------------------------------------------------
.../apache/logging/log4j/util/Constants.java | 2 +-
.../log4j/core/appender/AbstractAppender.java | 58 +++
.../appender/AbstractOutputStreamAppender.java | 21 +
.../log4j/core/appender/ConsoleAppender.java | 82 +---
.../log4j/core/appender/FileAppender.java | 292 +++++++----
.../log4j/core/appender/FileManager.java | 90 +++-
.../core/appender/MemoryMappedFileAppender.java | 2 +-
.../core/appender/OutputStreamManager.java | 59 ++-
.../core/appender/RandomAccessFileAppender.java | 2 +-
.../core/appender/RollingFileAppender.java | 491 +++++++++++--------
.../RollingRandomAccessFileAppender.java | 2 +-
.../rolling/DefaultRolloverStrategy.java | 10 +-
.../log4j/core/appender/rolling/FileSize.java | 1 +
.../core/async/AsyncQueueFullPolicyFactory.java | 4 +-
.../log4j/core/config/AppendersPlugin.java | 4 +-
.../core/config/plugins/util/PluginBuilder.java | 8 +-
.../log4j/core/filter/AbstractFilterable.java | 27 +
.../log4j/core/layout/AbstractStringLayout.java | 2 +-
.../log4j/core/layout/PatternLayout.java | 12 +-
.../logging/log4j/core/util/Constants.java | 4 +-
.../logging/log4j/core/util/TypeUtil.java | 21 +
.../core/appender/ConsoleAppenderTest.java | 8 +-
.../log4j/core/appender/FileAppenderTest.java | 304 +++++++-----
.../core/appender/OutputStreamAppenderTest.java | 214 ++++----
.../core/appender/rolling/FileSizeTest.java | 4 +-
.../rolling/OnStartupTriggeringPolicyTest.java | 34 +-
.../rolling/RollingAppenderCronTest.java | 3 +-
.../rolling/RollingFileAppenderAccessTest.java | 23 +-
.../core/config/CustomConfigurationTest.java | 13 +-
.../plugins/util/PluginManagerPackagesTest.java | 10 +-
.../AbstractPluginWithGenericBuilder.java | 59 +++
.../PluginWithGenericSubclassFoo1Builder.java | 55 +++
.../plugins/validation/ValidatingPlugin.java | 2 +-
.../ValidatingPluginWithGenericBuilder.java | 75 +++
.../ValidatingPluginWithTypedBuilder.java | 70 +++
.../validators/RequiredValidatorTest.java | 1 +
.../ValidatingPluginWithGenericBuilderTest.java | 66 +++
...luginWithGenericSubclassFoo1BuilderTest.java | 68 +++
.../ValidatingPluginWithTypedBuilderTest.java | 71 +++
.../junit/AbstractExternalFileCleaner.java | 232 ++++++---
.../apache/logging/log4j/junit/CleanFiles.java | 38 +-
.../logging/log4j/junit/CleanFolders.java | 59 +--
.../logging/log4j/junit/LoggerContextRule.java | 4 +-
.../log4j/test/appender/InMemoryAppender.java | 7 +-
.../log4j/flume/appender/FlumeAppender.java | 41 +-
.../log4j/flume/appender/FlumeAppenderTest.java | 49 +-
src/changes/changes.xml | 21 +-
src/site/xdoc/manual/appenders.xml | 5 +-
48 files changed, 1903 insertions(+), 827 deletions(-)
----------------------------------------------------------------------
[40/50] logging-log4j2 git commit: [LOG4J2-1507] Allow Builders to be
completely generic.
Posted by rp...@apache.org.
[LOG4J2-1507] Allow Builders to be completely generic.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/2404f7cb
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/2404f7cb
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/2404f7cb
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: 2404f7cb6877f42ddc4818480c13ecec4d1d2739
Parents: e9cec77
Author: Gary Gregory <gg...@apache.org>
Authored: Tue Aug 9 17:36:10 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Tue Aug 9 17:36:10 2016 -0700
----------------------------------------------------------------------
.../core/config/plugins/util/PluginBuilder.java | 2 +-
.../ValidatingPluginWithGenericBuilder.java | 75 ++++++++++++++++++++
.../ValidatingPluginWithGenericBuilderTest.java | 66 +++++++++++++++++
3 files changed, 142 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/2404f7cb/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/PluginBuilder.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/PluginBuilder.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/PluginBuilder.java
index 1827caf..7ba9981 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/PluginBuilder.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/PluginBuilder.java
@@ -147,7 +147,7 @@ public class PluginBuilder implements Builder<Object> {
for (final Method method : clazz.getDeclaredMethods()) {
if (method.isAnnotationPresent(PluginBuilderFactory.class) &&
Modifier.isStatic(method.getModifiers()) &&
- TypeUtil.isAssignable(Builder.class, method.getGenericReturnType())) {
+ TypeUtil.isAssignable(Builder.class, method.getReturnType())) {
ReflectionUtil.makeAccessible(method);
return (Builder<?>) method.invoke(null);
}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/2404f7cb/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/validation/ValidatingPluginWithGenericBuilder.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/validation/ValidatingPluginWithGenericBuilder.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/validation/ValidatingPluginWithGenericBuilder.java
new file mode 100644
index 0000000..34297e2
--- /dev/null
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/validation/ValidatingPluginWithGenericBuilder.java
@@ -0,0 +1,75 @@
+/*
+ * 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.logging.log4j.core.config.plugins.validation;
+
+import java.util.Objects;
+
+import org.apache.logging.log4j.core.config.plugins.Plugin;
+import org.apache.logging.log4j.core.config.plugins.PluginBuilderAttribute;
+import org.apache.logging.log4j.core.config.plugins.PluginBuilderFactory;
+import org.apache.logging.log4j.core.config.plugins.PluginFactory;
+import org.apache.logging.log4j.core.config.plugins.validation.constraints.Required;
+
+/**
+ *
+ */
+@Plugin(name = "ValidatingPluginWithGenericBuilder", category = "Test")
+public class ValidatingPluginWithGenericBuilder {
+
+ private final String name;
+
+ public ValidatingPluginWithGenericBuilder(final String name) {
+ this.name = Objects.requireNonNull(name, "name");
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ @PluginFactory
+ public static ValidatingPluginWithGenericBuilder newValidatingPlugin(
+ @Required(message = "The name given by the factory is null") final String name) {
+ return new ValidatingPluginWithGenericBuilder(name);
+ }
+
+ @PluginBuilderFactory
+ public static <B extends Builder<B>> B newBuilder() {
+ return new Builder<B>().asBuilder();
+ }
+
+ public static class Builder<B extends Builder<B>> implements org.apache.logging.log4j.core.util.Builder<ValidatingPluginWithGenericBuilder> {
+
+ @PluginBuilderAttribute
+ @Required(message = "The name given by the builder is null")
+ private String name;
+
+ public B withName(final String name) {
+ this.name = name;
+ return asBuilder();
+ }
+
+ @SuppressWarnings("unchecked")
+ private B asBuilder() {
+ return (B) this;
+ }
+
+ @Override
+ public ValidatingPluginWithGenericBuilder build() {
+ return new ValidatingPluginWithGenericBuilder(name);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/2404f7cb/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/validation/validators/ValidatingPluginWithGenericBuilderTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/validation/validators/ValidatingPluginWithGenericBuilderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/validation/validators/ValidatingPluginWithGenericBuilderTest.java
new file mode 100644
index 0000000..8e02f20
--- /dev/null
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/validation/validators/ValidatingPluginWithGenericBuilderTest.java
@@ -0,0 +1,66 @@
+/*
+ * 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.logging.log4j.core.config.plugins.validation.validators;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+
+import org.apache.logging.log4j.core.config.Node;
+import org.apache.logging.log4j.core.config.NullConfiguration;
+import org.apache.logging.log4j.core.config.plugins.util.PluginBuilder;
+import org.apache.logging.log4j.core.config.plugins.util.PluginManager;
+import org.apache.logging.log4j.core.config.plugins.util.PluginType;
+import org.apache.logging.log4j.core.config.plugins.validation.ValidatingPluginWithGenericBuilder;
+import org.junit.Before;
+import org.junit.Test;
+
+public class ValidatingPluginWithGenericBuilderTest {
+
+ private PluginType<ValidatingPluginWithGenericBuilder> plugin;
+ private Node node;
+
+ @SuppressWarnings("unchecked")
+ @Before
+ public void setUp() throws Exception {
+ final PluginManager manager = new PluginManager("Test");
+ manager.collectPlugins();
+ plugin = (PluginType<ValidatingPluginWithGenericBuilder>) manager.getPluginType("ValidatingPluginWithGenericBuilder");
+ assertNotNull("Rebuild this module to make sure annotaion processing kicks in.", plugin);
+ node = new Node(null, "Validator", plugin);
+ }
+
+ @Test
+ public void testNullDefaultValue() throws Exception {
+ final ValidatingPluginWithGenericBuilder validatingPlugin = (ValidatingPluginWithGenericBuilder) new PluginBuilder(plugin)
+ .withConfiguration(new NullConfiguration())
+ .withConfigurationNode(node)
+ .build();
+ assertNull(validatingPlugin);
+ }
+
+ @Test
+ public void testNonNullValue() throws Exception {
+ node.getAttributes().put("name", "foo");
+ final ValidatingPluginWithGenericBuilder validatingPlugin = (ValidatingPluginWithGenericBuilder) new PluginBuilder(plugin)
+ .withConfiguration(new NullConfiguration())
+ .withConfigurationNode(node)
+ .build();
+ assertNotNull(validatingPlugin);
+ assertEquals("foo", validatingPlugin.getName());
+ }
+}
[22/50] logging-log4j2 git commit: No need to initialize booleans to
false.
Posted by rp...@apache.org.
No need to initialize booleans to false.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/4edd7add
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/4edd7add
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/4edd7add
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: 4edd7add11a71171d139058e1adbf95e14f8289f
Parents: 4fc1c5f
Author: Gary Gregory <gg...@apache.org>
Authored: Mon Aug 8 10:51:09 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Mon Aug 8 10:51:09 2016 -0700
----------------------------------------------------------------------
.../org/apache/logging/log4j/core/appender/ConsoleAppender.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4edd7add/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/ConsoleAppender.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/ConsoleAppender.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/ConsoleAppender.java
index 2e3b38f..9747088 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/ConsoleAppender.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/ConsoleAppender.java
@@ -181,10 +181,10 @@ public final class ConsoleAppender extends AbstractOutputStreamAppender<OutputSt
private String name;
@PluginBuilderAttribute
- private boolean follow = false;
+ private boolean follow;
@PluginBuilderAttribute
- private boolean direct = false;
+ private boolean direct;
@PluginBuilderAttribute
private boolean ignoreExceptions = true;
[35/50] logging-log4j2 git commit: Bullet proofing.
Posted by rp...@apache.org.
Bullet proofing.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/9972ee5f
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/9972ee5f
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/9972ee5f
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: 9972ee5f8bef6086b284e023203ac0a7389b65bf
Parents: d4dca3f
Author: Gary Gregory <gg...@apache.org>
Authored: Mon Aug 8 19:33:07 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Mon Aug 8 19:33:07 2016 -0700
----------------------------------------------------------------------
.../rolling/OnStartupTriggeringPolicyTest.java | 31 +++++++++++++-------
1 file changed, 20 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/9972ee5f/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/OnStartupTriggeringPolicyTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/OnStartupTriggeringPolicyTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/OnStartupTriggeringPolicyTest.java
index c809ddb..eacf7c6 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/OnStartupTriggeringPolicyTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/OnStartupTriggeringPolicyTest.java
@@ -16,29 +16,35 @@
*/
package org.apache.logging.log4j.core.appender.rolling;
+import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.io.ByteArrayInputStream;
+import java.io.File;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
+import java.nio.file.StandardCopyOption;
+import java.util.Arrays;
import org.apache.logging.log4j.core.config.Configuration;
import org.apache.logging.log4j.core.config.DefaultConfiguration;
import org.apache.logging.log4j.core.layout.PatternLayout;
import org.apache.logging.log4j.core.util.datetime.FastDateFormat;
-import org.junit.Ignore;
+import org.junit.Assert;
import org.junit.Test;
/**
- *
+ * Tests {@link OnStartupTriggeringPolicy}.
*/
+//@Ignore
public class OnStartupTriggeringPolicyTest {
- private static final String TARGET_FILE = "target/rollOnStartup/testfile";
- private static final String TARGET_PATTERN = "target/rollOnStartup/test1-%d{MM-dd-yyyy}-%i.log";
- private static final String ROLLED_FILE_PREFIX = "target/rollOnStartup/test1-";
+ private static final String TARGET_FOLDER = "target/rollOnStartup";
+ private static final String TARGET_FILE = TARGET_FOLDER + "/testfile";
+ private static final String TARGET_PATTERN = TARGET_FOLDER + "/test1-%d{MM-dd-yyyy}-%i.log";
+ private static final String ROLLED_FILE_PREFIX = TARGET_FOLDER + "/test1-";
private static final String ROLLED_FILE_SUFFIX = "-1.log";
private static final String TEST_DATA = "Hello world!";
private static final FastDateFormat formatter = FastDateFormat.getInstance("MM-dd-yyyy");
@@ -55,13 +61,15 @@ public class OnStartupTriggeringPolicyTest {
final String expectedDate = formatter.format(timeStamp);
final String rolledFileName = ROLLED_FILE_PREFIX + expectedDate + ROLLED_FILE_SUFFIX;
final Path rolled = Paths.get(rolledFileName);
+ final long copied;
try (final InputStream is = new ByteArrayInputStream(TEST_DATA.getBytes("UTF-8"))) {
- Files.copy(is, target);
+ copied = Files.copy(is, target, StandardCopyOption.REPLACE_EXISTING);
}
final long size = Files.size(target);
assertTrue(size > 0);
+ assertEquals(copied, size);
- target.toFile().setLastModified(timeStamp);
+ Assert.assertTrue(target.toFile().setLastModified(timeStamp));
final PatternLayout layout = PatternLayout.newBuilder().withPattern("%msg").withConfiguration(configuration)
.build();
final RolloverStrategy strategy = DefaultRolloverStrategy.createStrategy(null, null, null, "0", null, true,
@@ -71,10 +79,11 @@ public class OnStartupTriggeringPolicyTest {
policy, strategy, null, layout, 8192, true);
try {
manager.initialize();
- assertTrue(Files.exists(target));
- assertTrue(Files.size(target) == 0);
- assertTrue(Files.exists(rolled));
- assertTrue(Files.size(rolled) == size);
+ String files = Arrays.toString(new File(TARGET_FOLDER).listFiles());
+ assertTrue(target.toString() + ", files = " + files, Files.exists(target));
+ assertEquals(target.toString(), 0, Files.size(target));
+ assertTrue(rolled.toString() + ", files = " + files, Files.exists(rolled));
+ assertEquals(rolled.toString(), size, Files.size(rolled));
} finally {
manager.release();
}
[48/50] logging-log4j2 git commit: Clarify GelfLayout documentation
Posted by rp...@apache.org.
Clarify GelfLayout documentation
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/c0cb21e8
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/c0cb21e8
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/c0cb21e8
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: c0cb21e8aed2389e72f38392ea52daacf6f3cd23
Parents: 87026a9
Author: Mikael St�ldal <mi...@staldal.nu>
Authored: Fri Aug 12 13:00:55 2016 +0200
Committer: Mikael St�ldal <mi...@staldal.nu>
Committed: Fri Aug 12 13:00:55 2016 +0200
----------------------------------------------------------------------
src/site/xdoc/manual/layouts.xml.vm | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/c0cb21e8/src/site/xdoc/manual/layouts.xml.vm
----------------------------------------------------------------------
diff --git a/src/site/xdoc/manual/layouts.xml.vm b/src/site/xdoc/manual/layouts.xml.vm
index 0a5123b..8607604 100644
--- a/src/site/xdoc/manual/layouts.xml.vm
+++ b/src/site/xdoc/manual/layouts.xml.vm
@@ -230,7 +230,9 @@ logger.debug("one={}, two={}, three={}", 1, 2, 3);
<tr>
<td>includeStacktrace</td>
<td>boolean</td>
- <td>Whether to include full stacktrace of logged Throwables (optional, default to true)</td>
+ <td>Whether to include full stacktrace of logged Throwables (optional, default to true).
+ If set to false, only the class name and message of the #javadoc('java/lang', 'Throwable')
+ will be included.</td>
</tr>
<caption align="top">GELF Layout Parameters</caption>
</table>