You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by ma...@apache.org on 2022/10/31 00:53:18 UTC
[logging-log4j2] 10/13: Update LowLevelLogUtil to use replaceable functions
This is an automated email from the ASF dual-hosted git repository.
mattsicker pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
commit b177c3b1975716f47ae0772869fe7fc21c7bfa04
Author: Matt Sicker <ma...@apache.org>
AuthorDate: Sun Oct 30 18:32:02 2022 -0500
Update LowLevelLogUtil to use replaceable functions
This allows for changing the low-level logging strategy later once StatusLogger has been initialized.
Signed-off-by: Matt Sicker <ma...@apache.org>
---
.../logging/log4j/util3/LowLevelLogUtil.java | 49 ++++++++++------------
1 file changed, 23 insertions(+), 26 deletions(-)
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/util3/LowLevelLogUtil.java b/log4j-api/src/main/java/org/apache/logging/log4j/util3/LowLevelLogUtil.java
index 7bb3f83d02..3a996c9668 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/util3/LowLevelLogUtil.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/util3/LowLevelLogUtil.java
@@ -17,10 +17,9 @@
package org.apache.logging.log4j.util3;
-import java.io.OutputStream;
import java.io.PrintWriter;
-import java.io.Writer;
-import java.util.Objects;
+import java.util.function.BiConsumer;
+import java.util.function.Consumer;
/**
* PrintWriter-based logging utility for classes too low level to use {@link org.apache.logging.log4j.status.StatusLogger}.
@@ -30,8 +29,25 @@ import java.util.Objects;
* @since 2.6
*/
public final class LowLevelLogUtil {
+ private static final PrintWriter STDERR = new PrintWriter(System.err, true);
+ private static Consumer<String> logErrorMessage = message -> STDERR.println("ERROR: " + message);
+ private static Consumer<Throwable> logException = exception -> exception.printStackTrace(STDERR);
+ private static BiConsumer<String, Throwable> logErrorWithException = (message, exception) -> {
+ log(message);
+ logException(exception);
+ };
- private static PrintWriter writer = new PrintWriter(System.err, true);
+ public static void setLogErrorMessage(final Consumer<String> logErrorMessage) {
+ LowLevelLogUtil.logErrorMessage = logErrorMessage;
+ }
+
+ public static void setLogException(final Consumer<Throwable> logException) {
+ LowLevelLogUtil.logException = logException;
+ }
+
+ public static void setLogErrorWithException(final BiConsumer<String, Throwable> logErrorWithException) {
+ LowLevelLogUtil.logErrorWithException = logErrorWithException;
+ }
/**
* Logs the given message.
@@ -41,37 +57,18 @@ public final class LowLevelLogUtil {
*/
public static void log(final String message) {
if (message != null) {
- writer.println(message);
+ logErrorMessage.accept(message);
}
}
public static void logException(final Throwable exception) {
if (exception != null) {
- exception.printStackTrace(writer);
+ logException.accept(exception);
}
}
public static void logException(final String message, final Throwable exception) {
- log(message);
- logException(exception);
- }
-
- /**
- * Sets the underlying OutputStream where exceptions are printed to.
- *
- * @param out the OutputStream to log to
- */
- public static void setOutputStream(final OutputStream out) {
- LowLevelLogUtil.writer = new PrintWriter(Objects.requireNonNull(out), true);
- }
-
- /**
- * Sets the underlying Writer where exceptions are printed to.
- *
- * @param writer the Writer to log to
- */
- public static void setWriter(final Writer writer) {
- LowLevelLogUtil.writer = new PrintWriter(Objects.requireNonNull(writer), true);
+ logErrorWithException.accept(message, exception);
}
private LowLevelLogUtil() {