You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by mr...@apache.org on 2019/09/04 14:42:54 UTC

svn commit: r1866393 - in /jackrabbit/oak/trunk/oak-store-document/src: main/java/org/apache/jackrabbit/oak/plugins/document/ main/java/org/apache/jackrabbit/oak/plugins/document/util/ test/java/org/apache/jackrabbit/oak/plugins/document/util/

Author: mreutegg
Date: Wed Sep  4 14:42:54 2019
New Revision: 1866393

URL: http://svn.apache.org/viewvc?rev=1866393&view=rev
Log:
OAK-4508: LoggingDocumentStore: better support for multiple instances

Patch provided by José Cordero

Modified:
    jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java
    jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreBuilder.java
    jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/LoggingDocumentStoreWrapper.java
    jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/util/LoggingDocumentStoreWrapperTest.java

Modified: jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java?rev=1866393&r1=1866392&r2=1866393&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java (original)
+++ jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java Wed Sep  4 14:42:54 2019
@@ -537,7 +537,11 @@ public final class DocumentNodeStore
             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);

Modified: jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreBuilder.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreBuilder.java?rev=1866393&r1=1866392&r2=1866393&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreBuilder.java (original)
+++ jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreBuilder.java Wed Sep  4 14:42:54 2019
@@ -115,6 +115,7 @@ public class DocumentNodeStoreBuilder<T
     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<CacheValue, CacheValue> weigher = new EmpiricalWeigher();
@@ -212,6 +213,22 @@ public class DocumentNodeStoreBuilder<T
     }
 
     /**
+     * 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();
+    }
+
+    @Nullable
+    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

Modified: jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/LoggingDocumentStoreWrapper.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/LoggingDocumentStoreWrapper.java?rev=1866393&r1=1866392&r2=1866393&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/LoggingDocumentStoreWrapper.java (original)
+++ jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/LoggingDocumentStoreWrapper.java Wed Sep  4 14:42:54 2019
@@ -41,6 +41,8 @@ public class LoggingDocumentStoreWrapper
 
     private static final boolean DEBUG = Boolean.parseBoolean(System.getProperty("ds.debug", "true"));
 
+    private String logPrefix = "ds";
+
     final DocumentStore store;
     private boolean logThread;
 
@@ -48,11 +50,21 @@ public class LoggingDocumentStoreWrapper
         this.store = store;
     }
 
+    public LoggingDocumentStoreWrapper(DocumentStore store, String prefix) {
+        this.store = store;
+        this.logPrefix = prefix;
+    }
+
     public LoggingDocumentStoreWrapper withThreadNameLogging() {
         this.logThread = true;
         return this;
     }
 
+    public LoggingDocumentStoreWrapper withPrefix(String prefix) {
+        this.logPrefix = prefix;
+        return this;
+    }
+
     @Override
     public <T extends Document> T find(final Collection<T> collection,
                                        final String key) {
@@ -366,7 +378,7 @@ public class LoggingDocumentStoreWrapper
     }
 
     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) {

Modified: jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/util/LoggingDocumentStoreWrapperTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/util/LoggingDocumentStoreWrapperTest.java?rev=1866393&r1=1866392&r2=1866393&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/util/LoggingDocumentStoreWrapperTest.java (original)
+++ jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/util/LoggingDocumentStoreWrapperTest.java Wed Sep  4 14:42:54 2019
@@ -16,9 +16,16 @@
  */
 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.Collection;
 import org.apache.jackrabbit.oak.plugins.document.DocumentMKBuilderProvider;
 import org.apache.jackrabbit.oak.plugins.document.DocumentNodeStore;
+import org.apache.jackrabbit.oak.plugins.document.DocumentStore;
+import org.apache.jackrabbit.oak.plugins.document.memory.MemoryDocumentStore;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
 import org.junit.After;
 import org.junit.Rule;
@@ -26,6 +33,7 @@ import org.junit.Test;
 
 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 +56,40 @@ public class LoggingDocumentStoreWrapper
         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());
+        int prefixCount = 0;
+        // Check there are log lines starting with the prefix
+        for (String log : customizer.getLogs()) {
+            if (log.startsWith(logPrefix)) {
+                prefixCount++;
+            }
+        }
+        assertTrue(prefixCount > 0);
+    }
+
+    @Test
+    public void loggingWithPrefix2() {
+        String logPrefix = "testPrefix";
+        customizer.starting();
+        DocumentStore store = new LoggingDocumentStoreWrapper(new MemoryDocumentStore()).withPrefix(logPrefix);
+        store.find(Collection.NODES, "some-id");
+        assertFalse(customizer.getLogs().isEmpty());
+        int prefixCount = 0;
+        // Check there are log lines starting with the prefix
+        for (String log : customizer.getLogs()) {
+            if (log.startsWith(logPrefix)) {
+                prefixCount++;
+            }
+        }
+        assertTrue(prefixCount > 0);
+    }
 }