This is an automated email from the ASF dual-hosted git repository.

kenhuuu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git


The following commit(s) were added to refs/heads/master by this push:
     new 8425f2d24c Improve logging in server and Java driver CTR.
8425f2d24c is described below

commit 8425f2d24c498662a1ddeef282996d40d470577b
Author: Ken Hu <[email protected]>
AuthorDate: Fri Jul 17 16:37:22 2026 -0700

    Improve logging in server and Java driver CTR.
    
    Assisted-by: Claude Code:claude-opus-4-8
---
 .../gremlin/driver/handler/HttpStreamingResponseHandler.java   |  3 +++
 .../tinkerpop/gremlin/driver/remote/HttpRemoteTransaction.java |  2 +-
 .../gremlin/server/handler/HttpBasicAuthorizationHandler.java  |  2 ++
 .../gremlin/server/handler/HttpGremlinEndpointHandler.java     |  4 +++-
 .../tinkerpop/gremlin/server/handler/HttpHandlerUtil.java      | 10 +++++++++-
 .../gremlin/server/transaction/TransactionManager.java         |  6 ++++--
 .../gremlin/server/transaction/UnmanagedTransaction.java       |  6 ++++--
 7 files changed, 26 insertions(+), 7 deletions(-)

diff --git 
a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/handler/HttpStreamingResponseHandler.java
 
b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/handler/HttpStreamingResponseHandler.java
index b433bf8bf8..8a56186d4a 100644
--- 
a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/handler/HttpStreamingResponseHandler.java
+++ 
b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/handler/HttpStreamingResponseHandler.java
@@ -141,6 +141,9 @@ public class HttpStreamingResponseHandler extends 
MessageToMessageDecoder<HttpOb
                     try {
                         readerPool.submit(streamReader::run);
                     } catch (RejectedExecutionException e) {
+                        logger.warn("Failed to schedule streaming response 
reader for channel {} with status {} " +
+                                        "and content type {}",
+                                ctx.channel().id().asShortText(), 
responseStatus, contentType, e);
                         queueInputStream.signalEndOfStream();
                         rs.markError(e);
                         pendingResultSet.compareAndSet(rs, null);
diff --git 
a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/remote/HttpRemoteTransaction.java
 
b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/remote/HttpRemoteTransaction.java
index 5b12b84e1f..b8b7c2f710 100644
--- 
a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/remote/HttpRemoteTransaction.java
+++ 
b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/remote/HttpRemoteTransaction.java
@@ -211,7 +211,7 @@ public class HttpRemoteTransaction implements 
RemoteTransaction {
             submitInternal(closeScript).all().get(CLOSING_MAX_WAIT_MS, 
TimeUnit.MILLISECONDS);
             cleanUp();
         } catch (Exception e) {
-            logger.warn("Failed to {} transaction on {}", closeScript, 
pinnedHost);
+            logger.warn("Failed to {} transaction {} on {}", closeScript, 
transactionId, pinnedHost, e);
             throw new TransactionException("Failed to " + closeScript, e);
         }
     }
diff --git 
a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/HttpBasicAuthorizationHandler.java
 
b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/HttpBasicAuthorizationHandler.java
index f63fd82c84..30787e9fed 100644
--- 
a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/HttpBasicAuthorizationHandler.java
+++ 
b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/HttpBasicAuthorizationHandler.java
@@ -84,6 +84,8 @@ public class HttpBasicAuthorizationHandler extends 
ChannelInboundHandlerAdapter
             } catch (Exception ex) {
                 final String message = String.format(
                         "%s is not ready to handle requests - unknown error", 
authorizer.getClass().getSimpleName());
+                logger.error("Unexpected error authorizing HTTP request for 
user {} with {}", user.getName(),
+                        authorizer.getClass().getSimpleName(), ex);
                 HttpHandlerUtil.sendError(ctx, INTERNAL_SERVER_ERROR, message);
                 ReferenceCountUtil.release(msg);
             }
diff --git 
a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/HttpGremlinEndpointHandler.java
 
b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/HttpGremlinEndpointHandler.java
index 01df7e9297..42a4fe2ad3 100644
--- 
a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/HttpGremlinEndpointHandler.java
+++ 
b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/HttpGremlinEndpointHandler.java
@@ -432,7 +432,7 @@ public class HttpGremlinEndpointHandler extends 
SimpleChannelInboundHandler<Requ
             return GremlinError.parsing((GremlinParserException) t);
         }
 
-        logger.warn(String.format("Exception processing request [%s].", 
requestMessage));
+        logger.warn("Exception processing request [{}].", requestMessage, t);
         return GremlinError.general(t);
     }
 
@@ -543,6 +543,8 @@ public class HttpGremlinEndpointHandler extends 
SimpleChannelInboundHandler<Requ
         } catch (UnsupportedOperationException uoe) {
             throw new 
ProcessingException(GremlinError.transactionNotSupported(uoe));
         } catch (ExecutionException | TimeoutException e) {
+            logger.warn("Unable to start transaction {} for source {}",
+                    txCtx == null ? "<unassigned>" : txCtx.getTransactionId(), 
traversalSourceName, e);
             throw new 
ProcessingException(GremlinError.transactionUnableToStart(e.getMessage()));
         } finally {
             if (closeTransactionOnFailure && txCtx != null) txCtx.close(false);
diff --git 
a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/HttpHandlerUtil.java
 
b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/HttpHandlerUtil.java
index 8a4d5e316a..372596be45 100644
--- 
a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/HttpHandlerUtil.java
+++ 
b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/HttpHandlerUtil.java
@@ -62,7 +62,15 @@ public class HttpHandlerUtil {
      */
     public static void sendError(final ChannelHandlerContext ctx, final 
HttpResponseStatus status, final String message,
                                   final CharSequence... headers) {
-        logger.warn(String.format("Invalid request - responding with %s and 
%s", status, message));
+        // Server errors (5xx) are logged at WARN since they signal a problem 
with the server itself. Client errors
+        // (4xx and other non-5xx) are expected during normal operation - bad 
credentials, favicon probes, unsupported
+        // methods, malformed requests - so they log at DEBUG to avoid 
flooding the log with routine client mistakes
+        // while remaining available for diagnosis when needed.
+        if (status.code() >= 500) {
+            logger.warn("Invalid request - responding with {} and {}", status, 
message);
+        } else if (logger.isDebugEnabled()) {
+            logger.debug("Invalid request - responding with {} and {}", 
status, message);
+        }
         errorMeter.mark();
 
         final ObjectNode node = mapper.createObjectNode();
diff --git 
a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/transaction/TransactionManager.java
 
b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/transaction/TransactionManager.java
index 50c9952f32..40f228398f 100644
--- 
a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/transaction/TransactionManager.java
+++ 
b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/transaction/TransactionManager.java
@@ -92,6 +92,8 @@ public class TransactionManager {
      */
     public UnmanagedTransaction create(final String traversalSourceName) {
         if (transactions.size() >= maxConcurrentTransactions) {
+            logger.warn("Rejecting new transaction for source {} because 
active transaction count {} reached max {}",
+                    traversalSourceName, transactions.size(), 
maxConcurrentTransactions);
             throw new IllegalStateException(
                 "Maximum concurrent transactions exceeded (" + 
maxConcurrentTransactions + ")");
         }
@@ -195,8 +197,8 @@ public class TransactionManager {
             try {
                 transaction.close(false);
             } catch (Exception e) {
-                logger.warn("Error rolling back transaction {} during 
shutdown: {}",
-                    transaction.getTransactionId(), e.getMessage());
+                logger.warn("Error rolling back transaction {} during 
shutdown",
+                        transaction.getTransactionId(), e);
             }
         });
 
diff --git 
a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/transaction/UnmanagedTransaction.java
 
b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/transaction/UnmanagedTransaction.java
index 852d9ba997..d49fe1dc03 100644
--- 
a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/transaction/UnmanagedTransaction.java
+++ 
b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/transaction/UnmanagedTransaction.java
@@ -239,7 +239,8 @@ public class UnmanagedTransaction {
         idleFuture.updateAndGet(future -> {
             if (future != null) future.cancel(false);
             return scheduledExecutorService.schedule(() -> {
-                logger.info("Transaction {} timed out after {} ms of 
inactivity", transactionId, idleTimeout);
+                logger.info("Transaction {} for source {} timed out after {} 
ms of inactivity",
+                        transactionId, traversalSourceName, idleTimeout);
                 close(false);
             }, idleTimeout, TimeUnit.MILLISECONDS);
         });
@@ -273,7 +274,8 @@ public class UnmanagedTransaction {
             running.future.cancel(true);                                       
         // interrupt only the running op
         }
 
-        logger.warn("Transaction {} exceeded its maximum lifetime and is being 
closed", transactionId);
+        logger.warn("Transaction {} for source {} exceeded its maximum 
lifetime and is being closed",
+                transactionId, traversalSourceName);
         close(false);
     }
 

Reply via email to