diff --git a/jOOQ/src/main/java/org/jooq/tools/LoggerListener.java b/jOOQ/src/main/java/org/jooq/tools/LoggerListener.java index 488bd84fad..46ff57df96 100644 --- a/jOOQ/src/main/java/org/jooq/tools/LoggerListener.java +++ b/jOOQ/src/main/java/org/jooq/tools/LoggerListener.java @@ -65,6 +65,8 @@ import org.jooq.impl.DSL; import org.jooq.impl.DefaultExecuteListener; import org.jooq.impl.DefaultVisitListener; +import org.jetbrains.annotations.NotNull; + /** * A default {@link ExecuteListener} that just logs events to java.util.logging, * log4j, or slf4j using the {@link JooqLogger} @@ -129,9 +131,21 @@ public class LoggerListener extends DefaultExecuteListener { } } + // [#12564] Make sure we don't log any nested-level results or records + int recordLevel = 0; + int resultLevel = 0; + + @Override + public void recordStart(ExecuteContext ctx) { + recordLevel++; + } + @SuppressWarnings("unchecked") @Override public void recordEnd(ExecuteContext ctx) { + if (--recordLevel > 0) + return; + if (log.isTraceEnabled() && ctx.record() != null) logMultiline("Record fetched", ctx.record().toString(), Level.FINER); @@ -149,6 +163,7 @@ public class LoggerListener extends DefaultExecuteListener { @Override public void resultStart(ExecuteContext ctx) { + resultLevel++; // [#10019] Don't buffer any records if it isn't needed ctx.data(DO_BUFFER, false); @@ -156,6 +171,9 @@ public class LoggerListener extends DefaultExecuteListener { @Override public void resultEnd(ExecuteContext ctx) { + if (--resultLevel > 0) + return; + if (ctx.result() != null && log.isDebugEnabled()) { log(ctx.configuration(), ctx.result()); log.debug("Fetched row(s)", ctx.result().size()); @@ -284,11 +302,8 @@ public class LoggerListener extends DefaultExecuteListener { @Override public void visitEnd(VisitContext context) { - if (anyAbbreviations) { - if (context.queryPartsLength() == 1) { - context.renderContext().sql(" -- Bind values may have been abbreviated for DEBUG logging. Use TRACE logging for very large bind variables."); - } - } + if (anyAbbreviations && context.queryPartsLength() == 1) + context.renderContext().sql(" -- Bind values may have been abbreviated for DEBUG logging. Use TRACE logging for very large bind variables."); } } }