diff --git a/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/SessionDelegate.java b/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/SessionDelegate.java index b757d40bfa..26e3d58f0c 100644 --- a/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/SessionDelegate.java +++ b/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/SessionDelegate.java @@ -29,6 +29,7 @@ import static org.apache.jackrabbit.oak.commons.PathUtils.denotesRoot; import java.io.IOException; import java.util.Iterator; import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; @@ -78,6 +79,12 @@ public class SessionDelegate { static final Logger readOperationLogger = LoggerFactory.getLogger("org.apache.jackrabbit.oak.jcr.operations.reads"); static final Logger writeOperationLogger = LoggerFactory.getLogger("org.apache.jackrabbit.oak.jcr.operations.writes"); + private static final String LOG_TRACE_BIT_MASK_NAME = "org.apache.jackrabbit.oak.jcr.operations.bitMask"; + private static long LOG_TRACE_BIT_MASK = Long.getLong(LOG_TRACE_BIT_MASK_NAME, 128); + private static final String LOG_TRACE_STACK_BIT_MASK_NAME = "org.apache.jackrabbit.oak.jcr.operations.stack.bitMask"; + private static long LOG_TRACE_STACK_BIT_MASK = Long.getLong(LOG_TRACE_BIT_MASK_NAME, 1024 * 1024); + private static AtomicLong LOG_COUNTER = new AtomicLong(); + private final ContentSession contentSession; private final SecurityProvider securityProvider; private final RefreshAtNextAccess refreshAtNextAccess = new RefreshAtNextAccess(); @@ -689,8 +696,18 @@ public class SessionDelegate { || writeOperationLogger.isTraceEnabled() || auditLogger.isDebugEnabled()) { Logger log = ops.isUpdate() ? writeOperationLogger : readOperationLogger; - log.trace("[{}] {}", session, ops); - + long logId = LOG_COUNTER.incrementAndGet(); + if ((logId & (LOG_TRACE_BIT_MASK - 1)) == 0) { + // update, to allow changes at runtime + LOG_TRACE_BIT_MASK = Long.getLong(LOG_TRACE_BIT_MASK_NAME, LOG_TRACE_BIT_MASK); + LOG_TRACE_STACK_BIT_MASK = Long.getLong(LOG_TRACE_BIT_MASK_NAME, LOG_TRACE_STACK_BIT_MASK); + if ((logId & (LOG_TRACE_STACK_BIT_MASK - 1)) == 0) { + Exception e = new Exception("count: " + LOG_COUNTER); + log.trace("[{}] {}", session, ops, e); + } else { + log.trace("[{}] {}", session, ops); + } + } //For a logout operation the auth info is not accessible if (!ops.isLogout() && !ops.isRefresh() && !ops.isSave() && ops.isUpdate()) { auditLogger.debug("[{}] [{}] {}", session.getAuthInfo().getUserID(), session, ops); diff --git a/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/ItemImpl.java b/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/ItemImpl.java index 9a0f861d48..eead3ada4f 100644 --- a/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/ItemImpl.java +++ b/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/ItemImpl.java @@ -17,6 +17,7 @@ package org.apache.jackrabbit.oak.jcr.session; import static com.google.common.collect.Lists.newArrayListWithCapacity; +import static java.lang.String.format; import static org.apache.jackrabbit.oak.api.Type.NAME; import static org.apache.jackrabbit.oak.api.Type.NAMES; import static org.apache.jackrabbit.oak.api.Type.PATH; @@ -126,6 +127,10 @@ abstract class ItemImpl implements Item { public String perform() { return item.getName(); } + @Override + public String toString() { + return format("getName [%s]", dlg.getPath()); + } }); // special case name of root node return oakName.isEmpty() ? "" : toJcrPath(dlg.getName()); diff --git a/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/NodeImpl.java b/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/NodeImpl.java index 816f91d0b6..b3378eb66d 100644 --- a/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/NodeImpl.java +++ b/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/NodeImpl.java @@ -244,7 +244,7 @@ public class NodeImpl extends ItemImpl implements Jac @Override public String toString() { - return format("Removing node [%s]", dlg.getPath()); + return format("removeNode [%s]", dlg.getPath()); } }); } @@ -320,7 +320,7 @@ public class NodeImpl extends ItemImpl implements Jac @Override public String toString() { - return format("Adding node [%s/%s]", dlg.getPath(), relPath); + return format("addNode [%s/%s]", dlg.getPath(), relPath); } }); } @@ -590,6 +590,10 @@ public class NodeImpl extends ItemImpl implements Jac } }; } + @Override + public String toString() { + return format("getNodes [%s]", dlg.getPath()); + } }); } @@ -612,6 +616,10 @@ public class NodeImpl extends ItemImpl implements Jac }); return new NodeIteratorAdapter(nodeIterator(children)); } + @Override + public String toString() { + return format("getNodes [%s]", dlg.getPath()); + } }); } @@ -633,6 +641,10 @@ public class NodeImpl extends ItemImpl implements Jac }); return new NodeIteratorAdapter(nodeIterator(children)); } + @Override + public String toString() { + return format("getNodes [%s]", dlg.getPath()); + } }); } @@ -652,6 +664,10 @@ public class NodeImpl extends ItemImpl implements Jac return new PropertyImpl(pd, sessionContext); } } + @Override + public String toString() { + return format("getProperty [%s]", dlg.getPath()); + } }); } @@ -667,6 +683,10 @@ public class NodeImpl extends ItemImpl implements Jac return new PropertyIteratorAdapter( propertyIterator(properties), size); } + @Override + public String toString() { + return format("getProperties [%s]", dlg.getPath()); + } }); } @@ -865,6 +885,10 @@ public class NodeImpl extends ItemImpl implements Jac public Boolean perform() throws RepositoryException { return node.getPropertyOrNull(oakPath) != null; } + @Override + public String toString() { + return format("hasProperty [%s]", dlg.getPath()); + } }); } catch (PathNotFoundException e) { return false; @@ -1407,7 +1431,7 @@ public class NodeImpl extends ItemImpl implements Jac @Override public String toString() { - return format("Setting property [%s/%s]", dlg.getPath(), jcrName); + return format("setProperty [%s/%s]", dlg.getPath(), jcrName); } }); } @@ -1453,7 +1477,7 @@ public class NodeImpl extends ItemImpl implements Jac @Override public String toString() { - return format("Setting property [%s/%s]", dlg.getPath(), jcrName); + return format("setProperty [%s/%s]", dlg.getPath(), jcrName); } }); } @@ -1505,7 +1529,7 @@ public class NodeImpl extends ItemImpl implements Jac @Override public String toString() { - return format("Removing property [%s]", jcrName); + return format("removeProperty [%s]", jcrName); } }); }