You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by pk...@apache.org on 2023/09/06 11:17:58 UTC
[logging-log4j2] branch main updated (1c6132ef22 -> 54e1b9b7e3)
This is an automated email from the ASF dual-hosted git repository.
pkarwasz pushed a change to branch main
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
from 1c6132ef22 Port JeroMqAppender changes from `2.x`
new f08d3bd521 Improve concurrency of ListStatusListener
new b60270f99f Adds `ListStatusListener#clear()` for testing
new 54e1b9b7e3 Adds an ErrorHandler that does not debounce messages
The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
.../logging/log4j/test/ListStatusListener.java | 2 +
.../log4j/test/junit/StatusLoggerExtension.java | 17 +++--
.../apache/logging/log4j/status/StatusData.java | 8 +++
.../logging/log4j/core/test/ListErrorHandler.java | 72 ++++++++++++++++++++++
4 files changed, 95 insertions(+), 4 deletions(-)
create mode 100644 log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/ListErrorHandler.java
[logging-log4j2] 03/03: Adds an ErrorHandler that does not debounce messages
Posted by pk...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
pkarwasz pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
commit 54e1b9b7e3b4ee77956227a3e5166e621736f829
Author: Piotr P. Karwasz <pi...@karwasz.org>
AuthorDate: Wed Sep 6 13:16:33 2023 +0200
Adds an ErrorHandler that does not debounce messages
`ListErrorHandler` can be used in tests to verify the number of issued
errors without losing any.
---
.../logging/log4j/core/test/ListErrorHandler.java | 72 ++++++++++++++++++++++
1 file changed, 72 insertions(+)
diff --git a/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/ListErrorHandler.java b/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/ListErrorHandler.java
new file mode 100644
index 0000000000..271b074cbd
--- /dev/null
+++ b/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/ListErrorHandler.java
@@ -0,0 +1,72 @@
+/*
+ * 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.test;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Stream;
+
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.core.ErrorHandler;
+import org.apache.logging.log4j.core.LogEvent;
+import org.apache.logging.log4j.message.SimpleMessage;
+import org.apache.logging.log4j.status.StatusData;
+import org.apache.logging.log4j.util.StackLocatorUtil;
+
+public class ListErrorHandler implements ErrorHandler {
+
+ private final ArrayList<StatusData> statusData = new ArrayList<>();
+
+ private void addStatusData(final String msg, final Throwable t) {
+ synchronized (statusData) {
+ final StackTraceElement caller = StackLocatorUtil.getStackTraceElement(3);
+ final String threadName = Thread.currentThread().getName();
+ statusData.add(new StatusData(caller, Level.ERROR, new SimpleMessage(msg), t, threadName));
+ }
+ }
+
+ @Override
+ public void error(String msg) {
+ addStatusData(msg, null);
+ }
+
+ @Override
+ public void error(String msg, Throwable t) {
+ addStatusData(msg, t);
+ }
+
+ @Override
+ public void error(String msg, LogEvent event, Throwable t) {
+ addStatusData(msg, t);
+ }
+
+ public void clear() {
+ synchronized (statusData) {
+ statusData.clear();
+ }
+ }
+
+ public Stream<StatusData> getStatusData() {
+ synchronized (statusData) {
+ return ((List<StatusData>) statusData.clone()).stream();
+ }
+ }
+
+ public Stream<StatusData> findStatusData(String regex) {
+ return getStatusData().filter(data -> data.getMessage().getFormattedMessage().matches(regex));
+ }
+}
[logging-log4j2] 01/03: Improve concurrency of ListStatusListener
Posted by pk...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
pkarwasz pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
commit f08d3bd5210f16b2a429709e2e5acf36070eb6de
Author: Piotr P. Karwasz <pi...@karwasz.org>
AuthorDate: Wed Sep 6 13:14:51 2023 +0200
Improve concurrency of ListStatusListener
ListStatusListener#getStatusData returns a stream that uses a copy of
the data to prevent a ConcurrentModificationException.
---
.../logging/log4j/test/junit/StatusLoggerExtension.java | 17 +++++++++++++----
.../org/apache/logging/log4j/status/StatusData.java | 8 ++++++++
2 files changed, 21 insertions(+), 4 deletions(-)
diff --git a/log4j-api-test/src/main/java/org/apache/logging/log4j/test/junit/StatusLoggerExtension.java b/log4j-api-test/src/main/java/org/apache/logging/log4j/test/junit/StatusLoggerExtension.java
index b301783e4f..0452d63bd8 100644
--- a/log4j-api-test/src/main/java/org/apache/logging/log4j/test/junit/StatusLoggerExtension.java
+++ b/log4j-api-test/src/main/java/org/apache/logging/log4j/test/junit/StatusLoggerExtension.java
@@ -18,7 +18,6 @@ package org.apache.logging.log4j.test.junit;
import java.io.IOException;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.List;
import java.util.stream.Stream;
@@ -89,7 +88,7 @@ class StatusLoggerExtension extends TypeBasedParameterResolver<ListStatusListene
private static class JUnitListStatusListener implements ListStatusListener {
private final ExtensionContext context;
- private final List<StatusData> statusData = Collections.synchronizedList(new ArrayList<StatusData>());
+ private final ArrayList<StatusData> statusData = new ArrayList<>();
public JUnitListStatusListener(final ExtensionContext context) {
this.context = context;
@@ -98,7 +97,9 @@ class StatusLoggerExtension extends TypeBasedParameterResolver<ListStatusListene
@Override
public void log(final StatusData data) {
if (context.equals(ExtensionContextAnchor.getContext())) {
- statusData.add(data);
+ synchronized (statusData) {
+ statusData.add(data);
+ }
}
}
@@ -114,8 +115,16 @@ class StatusLoggerExtension extends TypeBasedParameterResolver<ListStatusListene
@Override
public Stream<StatusData> getStatusData() {
- return statusData.stream();
+ synchronized (statusData) {
+ return ((List<StatusData>) statusData.clone()).stream();
+ }
}
+ @Override
+ public void clear() {
+ synchronized (statusData) {
+ statusData.clear();
+ }
+ }
}
}
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/status/StatusData.java b/log4j-api/src/main/java/org/apache/logging/log4j/status/StatusData.java
index dc5abaf02a..e8c708e72b 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/status/StatusData.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/status/StatusData.java
@@ -139,4 +139,12 @@ public class StatusData {
}
return sb.toString();
}
+
+ /**
+ * Used in tests
+ */
+ @Override
+ public String toString() {
+ return getMessage().getFormattedMessage();
+ }
}
[logging-log4j2] 02/03: Adds `ListStatusListener#clear()` for testing
Posted by pk...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
pkarwasz pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
commit b60270f99f75a979562d36369da99819ae77cc44
Author: Piotr P. Karwasz <pi...@karwasz.org>
AuthorDate: Wed Sep 6 13:15:27 2023 +0200
Adds `ListStatusListener#clear()` for testing
---
.../src/main/java/org/apache/logging/log4j/test/ListStatusListener.java | 2 ++
1 file changed, 2 insertions(+)
diff --git a/log4j-api-test/src/main/java/org/apache/logging/log4j/test/ListStatusListener.java b/log4j-api-test/src/main/java/org/apache/logging/log4j/test/ListStatusListener.java
index a1d0486891..74bde61b8f 100644
--- a/log4j-api-test/src/main/java/org/apache/logging/log4j/test/ListStatusListener.java
+++ b/log4j-api-test/src/main/java/org/apache/logging/log4j/test/ListStatusListener.java
@@ -27,6 +27,8 @@ import org.apache.logging.log4j.status.StatusListener;
*/
public interface ListStatusListener extends StatusListener {
+ void clear();
+
Stream<StatusData> getStatusData();
default Stream<StatusData> findStatusData(Level level) {