SLING-5505 - Allow recording of caller stacktrace with the logs
Refactor to pass on TracerConfig to recording such that extra options for given logger can be accessed
git-svn-id: https://svn.apache.org/repos/asf/sling/trunk@1729650 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 f8f785e..b1e76be 100644
--- a/src/main/java/org/apache/sling/tracer/internal/JSONRecording.java
+++ b/src/main/java/org/apache/sling/tracer/internal/JSONRecording.java
@@ -116,7 +116,7 @@
//~---------------------------------------< Recording >
@Override
- public void log(Level level, String logger, FormattingTuple tuple) {
+ public void log(TracerConfig tc, Level level, String logger, FormattingTuple tuple) {
Object[] params = tuple.getArgArray();
if (TracerContext.QUERY_LOGGER.equals(logger)
&& params != null && params.length == 2) {
diff --git a/src/main/java/org/apache/sling/tracer/internal/LogTracer.java b/src/main/java/org/apache/sling/tracer/internal/LogTracer.java
index 3cb42d7..ea531ba 100644
--- a/src/main/java/org/apache/sling/tracer/internal/LogTracer.java
+++ b/src/main/java/org/apache/sling/tracer/internal/LogTracer.java
@@ -419,11 +419,12 @@
return FilterReply.NEUTRAL;
}
- if (tracer.shouldLog(logger.getName(), level)) {
+ TracerConfig tc = tracer.findMatchingConfig(logger.getName(), level);
+ if (tc != null) {
if (format == null) {
return FilterReply.ACCEPT;
}
- if (tracer.log(level, logger.getName(), format, params)) {
+ if (tracer.log(tc, level, logger.getName(), format, params)) {
return FilterReply.ACCEPT;
}
}
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 9e0f88e..e7300c5 100644
--- a/src/main/java/org/apache/sling/tracer/internal/Recording.java
+++ b/src/main/java/org/apache/sling/tracer/internal/Recording.java
@@ -26,7 +26,7 @@
interface Recording {
Recording NOOP = new Recording() {
@Override
- public void log(Level level, String logger, FormattingTuple tuple) {
+ public void log(TracerConfig tc, Level level, String logger, FormattingTuple tuple) {
}
@@ -36,7 +36,7 @@
}
};
- void log(Level level, String logger, FormattingTuple tuple);
+ void log(TracerConfig tc, 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 bd12def..5859bce 100644
--- a/src/main/java/org/apache/sling/tracer/internal/TracerContext.java
+++ b/src/main/java/org/apache/sling/tracer/internal/TracerContext.java
@@ -69,19 +69,23 @@
Arrays.sort(tracers);
}
- public boolean shouldLog(String logger, Level level) {
+ /**
+ * Finds and returns the matching TracerConfig for given logger and level
+ * If non null it indicates that logging should proceed
+ */
+ public TracerConfig findMatchingConfig(String logger, Level level) {
for (TracerConfig tc : tracers) {
TracerConfig.MatchResult mr = tc.match(logger, level);
if (mr == TracerConfig.MatchResult.MATCH_LOG) {
- return true;
+ return tc;
} else if (mr == TracerConfig.MatchResult.MATCH_NO_LOG) {
- return false;
+ return null;
}
}
- return false;
+ return null;
}
- public boolean log(Level level, String logger, String format, Object[] params) {
+ public boolean log(TracerConfig tc, Level level, String logger, String format, Object[] params) {
FormattingTuple tuple = null;
if (QUERY_LOGGER.equals(logger)
&& params != null && params.length == 2) {
@@ -94,7 +98,7 @@
}
if (tuple != null) {
- recording.log(level, logger, tuple);
+ recording.log(tc, level, logger, tuple);
}
return tuple != null;
}
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 65041f8..ac8ad3c 100644
--- a/src/test/java/org/apache/sling/tracer/internal/JSONRecordingTest.java
+++ b/src/test/java/org/apache/sling/tracer/internal/JSONRecordingTest.java
@@ -39,6 +39,8 @@
public class JSONRecordingTest {
private HttpServletRequest request = mock(HttpServletRequest.class);
+ private TracerConfig tc = new TracerConfig(TracerContext.QUERY_LOGGER, Level.INFO);
+
@Test
public void logQueries() throws Exception{
StringWriter sw = new StringWriter();
@@ -46,8 +48,8 @@
when(request.getMethod()).thenReturn("GET");
JSONRecording r = new JSONRecording("abc", request, true);
- 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.log(tc, Level.INFO, TracerContext.QUERY_LOGGER, MessageFormatter.arrayFormat("foo bar", new Object[]{"x" , "y"}));
+ r.log(tc, Level.INFO, TracerContext.QUERY_LOGGER, MessageFormatter.arrayFormat("foo bar", new Object[]{"x" , "z"}));
r.done();
r.render(sw);
@@ -79,9 +81,9 @@
JSONRecording r = new JSONRecording("abc", request, true);
FormattingTuple tp1 = MessageFormatter.arrayFormat("{} is going", new Object[]{"Jack"});
- r.log(Level.INFO, "foo", tp1);
- r.log(Level.WARN, "foo.bar", MessageFormatter.arrayFormat("Jill is going", null));
- r.log(Level.ERROR, "foo.bar",
+ r.log(tc, Level.INFO, "foo", tp1);
+ r.log(tc, Level.WARN, "foo.bar", MessageFormatter.arrayFormat("Jill is going", null));
+ r.log(tc, Level.ERROR, "foo.bar",
MessageFormatter.arrayFormat("Jack and {} is going", new Object[]{"Jill" , new Exception()}));
r.done();
diff --git a/src/test/java/org/apache/sling/tracer/internal/LogTracerModelTest.java b/src/test/java/org/apache/sling/tracer/internal/LogTracerModelTest.java
index 2b1d7c0..96c0bad 100644
--- a/src/test/java/org/apache/sling/tracer/internal/LogTracerModelTest.java
+++ b/src/test/java/org/apache/sling/tracer/internal/LogTracerModelTest.java
@@ -24,9 +24,8 @@
import org.junit.Test;
import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertNull;
public class LogTracerModelTest {
@@ -56,9 +55,9 @@
TracerSet ts = new TracerSet("foo : a.b;level=trace, a.b.c;level=info");
TracerContext tc = getContext(ts);
- assertTrue(tc.shouldLog("a.b", Level.TRACE));
- assertTrue(tc.shouldLog("a.b.d", Level.TRACE));
- assertFalse(tc.shouldLog("a.b.c", Level.TRACE));
+ assertNotNull(tc.findMatchingConfig("a.b", Level.TRACE));
+ assertNotNull(tc.findMatchingConfig("a.b.d", Level.TRACE));
+ assertNull(tc.findMatchingConfig("a.b.c", Level.TRACE));
}
@Test