SLING-5459 - Recording of tracer logs
Refactor to pass on the FormattingTuple so as to allow separate rendering of the logs in recording
git-svn-id: https://svn.apache.org/repos/asf/sling/trunk@1729530 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/sling/tracer/internal/JSONRecording.java b/src/main/java/org/apache/sling/tracer/internal/JSONRecording.java
index 0b103bd..8980ff9 100644
--- a/src/main/java/org/apache/sling/tracer/internal/JSONRecording.java
+++ b/src/main/java/org/apache/sling/tracer/internal/JSONRecording.java
@@ -34,6 +34,7 @@
import org.apache.sling.commons.json.io.JSONWriter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.slf4j.helpers.FormattingTuple;
class JSONRecording implements Recording {
private static final Logger log = LoggerFactory.getLogger(JSONRecording.class);
@@ -59,7 +60,8 @@
//~---------------------------------------< Recording >
@Override
- public void log(Level level, String logger, String format, Object[] params) {
+ public void log(Level level, String logger, FormattingTuple tuple) {
+ Object[] params = tuple.getArgArray();
if (TracerContext.QUERY_LOGGER.equals(logger)
&& params != null && params.length == 2) {
queries.add((String) params[1]);
diff --git a/src/main/java/org/apache/sling/tracer/internal/Recording.java b/src/main/java/org/apache/sling/tracer/internal/Recording.java
index 7e24f14..d915474 100644
--- a/src/main/java/org/apache/sling/tracer/internal/Recording.java
+++ b/src/main/java/org/apache/sling/tracer/internal/Recording.java
@@ -21,11 +21,12 @@
import ch.qos.logback.classic.Level;
import org.apache.sling.api.request.RequestProgressTracker;
+import org.slf4j.helpers.FormattingTuple;
interface Recording {
Recording NOOP = new Recording() {
@Override
- public void log(Level level, String logger, String format, Object[] params) {
+ public void log(Level level, String logger, FormattingTuple tuple) {
}
@@ -40,7 +41,7 @@
}
};
- void log(Level level, String logger, String format, Object[] params);
+ void log(Level level, String logger, FormattingTuple tuple);
/**
* Register the {@link RequestProgressTracker} associated with
diff --git a/src/main/java/org/apache/sling/tracer/internal/TracerContext.java b/src/main/java/org/apache/sling/tracer/internal/TracerContext.java
index 4931255..47615e9 100644
--- a/src/main/java/org/apache/sling/tracer/internal/TracerContext.java
+++ b/src/main/java/org/apache/sling/tracer/internal/TracerContext.java
@@ -24,6 +24,7 @@
import ch.qos.logback.classic.Level;
import ch.qos.logback.core.helpers.CyclicBuffer;
import org.apache.sling.api.request.RequestProgressTracker;
+import org.slf4j.helpers.FormattingTuple;
import org.slf4j.helpers.MessageFormatter;
class TracerContext {
@@ -81,12 +82,19 @@
}
public boolean log(Level level, String logger, String format, Object[] params) {
- recording.log(level, logger, format, params);
+ FormattingTuple tuple;
+
if (QUERY_LOGGER.equals(logger)
&& params != null && params.length == 2) {
- return logQuery((String) params[1]);
+ tuple = logQuery((String) params[1]);
+ } else {
+ tuple = logWithLoggerName(logger, format, params);
}
- return logWithLoggerName(logger, format, params);
+
+ if (tuple != null) {
+ recording.log(level, logger, tuple);
+ }
+ return tuple != null;
}
public void done() {
@@ -109,8 +117,9 @@
}
}
- private boolean logWithLoggerName(String loggerName, String format, Object... params) {
- String msg = MessageFormatter.arrayFormat(format, params).getMessage();
+ private FormattingTuple logWithLoggerName(String loggerName, String format, Object... params) {
+ FormattingTuple tuple = MessageFormatter.arrayFormat(format, params);
+ String msg = tuple.getMessage();
msg = "[" + loggerName + "] " + msg;
if (progressTracker == null) {
if (buffer == null) {
@@ -120,16 +129,15 @@
} else {
progressTracker.log(msg);
}
- return true;
+ return tuple;
}
- private boolean logQuery(String query) {
+ private FormattingTuple logQuery(String query) {
if (ignorableQuery(query)) {
- return false;
+ return null;
}
queryCount++;
- logWithLoggerName("JCR", " Query {}", query);
- return true;
+ return logWithLoggerName("JCR", " Query {}", query);
}
private boolean ignorableQuery(String msg) {
diff --git a/src/test/java/org/apache/sling/tracer/internal/JSONRecordingTest.java b/src/test/java/org/apache/sling/tracer/internal/JSONRecordingTest.java
index f7c1736..159555e 100644
--- a/src/test/java/org/apache/sling/tracer/internal/JSONRecordingTest.java
+++ b/src/test/java/org/apache/sling/tracer/internal/JSONRecordingTest.java
@@ -26,6 +26,7 @@
import ch.qos.logback.classic.Level;
import org.apache.sling.commons.json.JSONObject;
import org.junit.Test;
+import org.slf4j.helpers.MessageFormatter;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.mock;
@@ -41,8 +42,8 @@
when(request.getMethod()).thenReturn("GET");
JSONRecording r = new JSONRecording("abc", request);
- r.log(Level.INFO, TracerContext.QUERY_LOGGER, "foo bar", new Object[]{"x" , "y"});
- r.log(Level.INFO, TracerContext.QUERY_LOGGER, "foo bar", new Object[]{"x" , "z"});
+ r.log(Level.INFO, TracerContext.QUERY_LOGGER, MessageFormatter.arrayFormat("foo bar", new Object[]{"x" , "y"}));
+ r.log(Level.INFO, TracerContext.QUERY_LOGGER, MessageFormatter.arrayFormat("foo bar", new Object[]{"x" , "z"}));
r.done();
r.render(sw);