Index: main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java =================================================================== --- main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java (revision 1865736) +++ main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java (working copy) @@ -537,7 +537,11 @@ s = new TimingDocumentStoreWrapper(s); } if (builder.getLogging()) { - s = new LoggingDocumentStoreWrapper(s); + if (builder.getLoggingPrefix() != null) { + s = new LoggingDocumentStoreWrapper(s, builder.getLoggingPrefix()); + } else { + s = new LoggingDocumentStoreWrapper(s); + } } if (builder.getReadOnlyMode()) { s = ReadOnlyDocumentStoreWrapperFactory.getInstance(s); Index: main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreBuilder.java =================================================================== --- main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreBuilder.java (revision 1865736) +++ main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreBuilder.java (working copy) @@ -115,6 +115,7 @@ private int asyncDelay = 1000; private boolean timing; private boolean logging; + private String loggingPrefix; private LeaseCheckMode leaseCheck = ClusterNodeInfo.DEFAULT_LEASE_CHECK_MODE; // OAK-2739 is enabled by default also for non-osgi private boolean isReadOnlyMode = false; private Weigher weigher = new EmpiricalWeigher(); @@ -212,6 +213,21 @@ } /** + * Sets a custom prefix for the logger. + * + * @param prefix to be used in the logs output. + * @return this + */ + public T setLoggingPrefix(String prefix) { + this.loggingPrefix = prefix; + return thisBuilder(); + } + + public String getLoggingPrefix() { + return loggingPrefix; + } + + /** * If {@code true}, sets lease check mode to {@link LeaseCheckMode#LENIENT}, * otherwise sets the mode to {@link LeaseCheckMode#DISABLED}. This method * is only kept for backward compatibility with the behaviour before Index: main/java/org/apache/jackrabbit/oak/plugins/document/util/LoggingDocumentStoreWrapper.java =================================================================== --- main/java/org/apache/jackrabbit/oak/plugins/document/util/LoggingDocumentStoreWrapper.java (revision 1865736) +++ main/java/org/apache/jackrabbit/oak/plugins/document/util/LoggingDocumentStoreWrapper.java (working copy) @@ -40,6 +40,8 @@ private static final Logger LOG = LoggerFactory.getLogger(LoggingDocumentStoreWrapper.class); private static final boolean DEBUG = Boolean.parseBoolean(System.getProperty("ds.debug", "true")); + + private String logPrefix = "ds"; final DocumentStore store; private boolean logThread; @@ -47,6 +49,11 @@ public LoggingDocumentStoreWrapper(DocumentStore store) { this.store = store; } + + public LoggingDocumentStoreWrapper(DocumentStore store, String prefix) { + this.store = store; + this.logPrefix = prefix; + } public LoggingDocumentStoreWrapper withThreadNameLogging() { this.logThread = true; @@ -53,6 +60,11 @@ return this; } + public LoggingDocumentStoreWrapper withPrefix(String prefix) { + this.logPrefix = prefix; + return this; + } + @Override public T find(final Collection collection, final String key) { @@ -366,7 +378,7 @@ } private void logMethod(String methodName, Object... args) { - StringBuilder buff = new StringBuilder("ds"); + StringBuilder buff = new StringBuilder(logPrefix); buff.append('.').append(methodName).append('('); for (int i = 0; i < args.length; i++) { if (i > 0) { Index: test/java/org/apache/jackrabbit/oak/plugins/document/util/LoggingDocumentStoreWrapperTest.java =================================================================== --- test/java/org/apache/jackrabbit/oak/plugins/document/util/LoggingDocumentStoreWrapperTest.java (revision 1865736) +++ test/java/org/apache/jackrabbit/oak/plugins/document/util/LoggingDocumentStoreWrapperTest.java (working copy) @@ -16,6 +16,10 @@ */ package org.apache.jackrabbit.oak.plugins.document.util; +import static org.apache.jackrabbit.oak.plugins.document.TestUtils.merge; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + import org.apache.jackrabbit.oak.commons.junit.LogCustomizer; import org.apache.jackrabbit.oak.plugins.document.DocumentMKBuilderProvider; import org.apache.jackrabbit.oak.plugins.document.DocumentNodeStore; @@ -26,6 +30,7 @@ import static org.apache.jackrabbit.oak.plugins.document.TestUtils.merge; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; public class LoggingDocumentStoreWrapperTest { @@ -48,4 +53,23 @@ merge(ns, builder); assertFalse(customizer.getLogs().isEmpty()); } + + @Test + public void loggingWithPrefix() throws Exception { + String logPrefix = "testPrefix"; + customizer.starting(); + DocumentNodeStore ns = builderProvider.newBuilder().setLogging(true).setLoggingPrefix(logPrefix).build(); + NodeBuilder builder = ns.getRoot().builder(); + builder.child("foo"); + merge(ns, builder); + assertFalse(customizer.getLogs().isEmpty()); + Integer prefixCount = 0; + // Check there are log lines starting with the prefix + for (String log : customizer.getLogs()) { + if (log.startsWith(logPrefix)) { + prefixCount++; + } + } + assertTrue(prefixCount > 0); + } }