From 76a816d295bcdb6fd95bfc3f4682dfd88e9c512e Mon Sep 17 00:00:00 2001 From: bourne7 Date: Fri, 29 Aug 2025 19:43:41 +0800 Subject: [PATCH] Add serverAppender parameter to SimpleSocketServer and SocketNode constructors Signed-off-by: bourne7 --- .../classic/net/SimpleSocketServer.java | 10 ++++++- .../qos/logback/classic/net/SocketNode.java | 29 +++++++++++++++---- 2 files changed, 32 insertions(+), 7 deletions(-) diff --git a/logback-classic/src/main/java/ch/qos/logback/classic/net/SimpleSocketServer.java b/logback-classic/src/main/java/ch/qos/logback/classic/net/SimpleSocketServer.java index 24ea4131d9..f5136eee26 100755 --- a/logback-classic/src/main/java/ch/qos/logback/classic/net/SimpleSocketServer.java +++ b/logback-classic/src/main/java/ch/qos/logback/classic/net/SimpleSocketServer.java @@ -60,6 +60,9 @@ public class SimpleSocketServer extends Thread { // used for testing purposes private CountDownLatch latch; + // Set this appender as the sole appender for the remoteLogger + private String serverAppender; + public static void main(String argv[]) throws Exception { doMain(SimpleSocketServer.class, argv); } @@ -80,9 +83,14 @@ protected static void doMain(Class serverClass, St sss.start(); } - public SimpleSocketServer(LoggerContext lc, int port) { + public SimpleSocketServer(LoggerContext lc, int port, String serverAppender) { this.lc = lc; this.port = port; + this.serverAppender = serverAppender; + } + + public SimpleSocketServer(LoggerContext lc, int port) { + this(lc, port, null); } public void run() { diff --git a/logback-classic/src/main/java/ch/qos/logback/classic/net/SocketNode.java b/logback-classic/src/main/java/ch/qos/logback/classic/net/SocketNode.java index b62392ca61..649c551b71 100644 --- a/logback-classic/src/main/java/ch/qos/logback/classic/net/SocketNode.java +++ b/logback-classic/src/main/java/ch/qos/logback/classic/net/SocketNode.java @@ -50,12 +50,20 @@ public class SocketNode implements Runnable { boolean closed = false; SimpleSocketServer socketServer; - public SocketNode(SimpleSocketServer socketServer, Socket socket, LoggerContext context) { + // Set this appender as the sole appender for the remoteLogger + private String serverAppender; + + public SocketNode(SimpleSocketServer socketServer, Socket socket, LoggerContext context, String serverAppender) { this.socketServer = socketServer; this.socket = socket; remoteSocketAddress = socket.getRemoteSocketAddress(); this.context = context; - logger = context.getLogger(SocketNode.class); + logger = context.getLogger(ch.qos.logback.classic.net.SocketNode.class); + this.serverAppender = serverAppender; + } + + public SocketNode(SimpleSocketServer socketServer, Socket socket, LoggerContext context) { + this(socketServer, socket, context, null); } // public @@ -75,15 +83,24 @@ public void run() { } ILoggingEvent event; - Logger remoteLogger; + Logger remoteLogger = null; try { while (!closed) { // read an event from the wire event = (ILoggingEvent) hardenedLoggingEventInputStream.readObject(); - // get a logger from the hierarchy. The name of the logger is taken to - // be the name contained in the event. - remoteLogger = context.getLogger(event.getLoggerName()); + + if (serverAppender != null) { + // if a server appender is specified, use it + remoteLogger = context.getLogger(serverAppender); + } + + if (remoteLogger == null) { + // get a logger from the hierarchy. The name of the logger is taken to + // be the name contained in the event. + remoteLogger = context.getLogger(event.getLoggerName()); + } + // apply the logger-level filter if (remoteLogger.isEnabledFor(event.getLevel())) { // finally log the event as if was generated locally