You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by ju...@apache.org on 2010/09/08 14:07:33 UTC
svn commit: r995002 -
/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/session/SessionState.java
Author: jukka
Date: Wed Sep 8 12:07:33 2010
New Revision: 995002
URL: http://svn.apache.org/viewvc?rev=995002&view=rev
Log:
JCR-2741: Improved logging for session operations
Add a jcr.operation variable to MDC and clean up the MDC handling code
Modified:
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/session/SessionState.java
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/session/SessionState.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/session/SessionState.java?rev=995002&r1=995001&r2=995002&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/session/SessionState.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/session/SessionState.java Wed Sep 8 12:07:33 2010
@@ -123,8 +123,9 @@ public class SessionState {
*/
public <T> T perform(SessionOperation<T> operation)
throws RepositoryException {
- String previous = MDC.get("jcr.session");
- MDC.put("jcr.session", context.toString());
+ LogState state = new LogState(
+ "jcr.session", context.toString(),
+ "jcr.operation", operation.toString());
try {
if (log.isDebugEnabled()) {
long start = System.nanoTime();
@@ -138,12 +139,37 @@ public class SessionState {
return internalPerform(operation);
}
} finally {
- if (previous != null) {
- MDC.put("jcr.session", previous);
- } else {
- MDC.remove("jcr.session");
+ state.reset();
+ }
+ }
+
+ /**
+ * Internal utility class for setting MDC variables during the execution
+ * of a session operation.
+ */
+ private static class LogState {
+
+ private final String[] keyValuePairs;
+
+ public LogState(String... keyValuePairs) {
+ this.keyValuePairs = keyValuePairs;
+ for (int i = 0; i + 1 < keyValuePairs.length; i += 2) {
+ if (MDC.get(keyValuePairs[i]) == null) {
+ MDC.put(keyValuePairs[i], keyValuePairs[i + 1]);
+ } else {
+ keyValuePairs[i + 1] = null;
+ }
}
}
+
+ public void reset() {
+ for (int i = 0; i + 1 < keyValuePairs.length; i += 2) {
+ if (keyValuePairs[i + 1] != null) {
+ MDC.remove(keyValuePairs[i]);
+ }
+ }
+ }
+
}
/**