jackrabbit-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From dpfis...@apache.org
Subject svn commit: r702482 - in /jackrabbit/sandbox/jackrabbit-journalwalker: ./ src/ src/main/ src/main/java/ src/main/java/org/ src/main/java/org/apache/ src/main/java/org/apache/jackrabbit/ src/main/java/org/apache/jackrabbit/journalwalker/ src/main/resour...
Date Tue, 07 Oct 2008 13:54:23 GMT
Author: dpfister
Date: Tue Oct  7 06:54:23 2008
New Revision: 702482

URL: http://svn.apache.org/viewvc?rev=702482&view=rev
Log:
JCR-1791 - New utility: Journal walker for journal files

Added:
    jackrabbit/sandbox/jackrabbit-journalwalker/
    jackrabbit/sandbox/jackrabbit-journalwalker/README.txt   (with props)
    jackrabbit/sandbox/jackrabbit-journalwalker/pom.xml   (with props)
    jackrabbit/sandbox/jackrabbit-journalwalker/src/
    jackrabbit/sandbox/jackrabbit-journalwalker/src/main/
    jackrabbit/sandbox/jackrabbit-journalwalker/src/main/java/
    jackrabbit/sandbox/jackrabbit-journalwalker/src/main/java/org/
    jackrabbit/sandbox/jackrabbit-journalwalker/src/main/java/org/apache/
    jackrabbit/sandbox/jackrabbit-journalwalker/src/main/java/org/apache/jackrabbit/
    jackrabbit/sandbox/jackrabbit-journalwalker/src/main/java/org/apache/jackrabbit/journalwalker/
    jackrabbit/sandbox/jackrabbit-journalwalker/src/main/java/org/apache/jackrabbit/journalwalker/JournalWalker.java
  (with props)
    jackrabbit/sandbox/jackrabbit-journalwalker/src/main/resources/
    jackrabbit/sandbox/jackrabbit-journalwalker/src/main/resources/log4j.properties   (with
props)

Added: jackrabbit/sandbox/jackrabbit-journalwalker/README.txt
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-journalwalker/README.txt?rev=702482&view=auto
==============================================================================
--- jackrabbit/sandbox/jackrabbit-journalwalker/README.txt (added)
+++ jackrabbit/sandbox/jackrabbit-journalwalker/README.txt Tue Oct  7 06:54:23 2008
@@ -0,0 +1,79 @@
+=============================================
+Welcome to the Jackrabbit Journal Walker Tool
+=============================================
+
+This is the Jackrabbit Journal Walker Tool that provides
+command-line functionality to walk the records contained
+in a file journal created by a clustered instance and
+display their contents.
+
+See the Apache Jackrabbit web site (http://jackrabbit.apache.org/)
+for documentation and other information. You are welcome to join the
+Jackrabbit mailing lists (http://jackrabbit.apache.org/mail-lists.html)
+to discuss this compoment and to use the Jackrabbit issue tracker
+(http://issues.apache.org/jira/browse/JCR) to report issues or request
+new features.
+
+Apache Jackrabbit is a project of the Apache Software Foundation
+(http://www.apache.org).
+
+
+License (see also LICENSE.txt)
+==============================
+
+Collective work: Copyright 20088888888 The Apache Software Foundation.
+
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+Getting Started
+===============
+
+This compoment uses a Maven 2 (http://maven.apache.org/) build
+environment. If you have Maven 2 installed, you can compile and
+package the jacrabbit-api jar using the following command:
+
+    mvn package
+
+See the Maven 2 documentation for other build features.
+
+The latest source code for this compoment is available in the
+Subversion (http://subversion.tigris.org/) source repository of
+the Apache Software Foundation. If you have Subversion installed,
+you can checkout the latest source using the following command:
+
+    svn checkout http://svn.apache.org/repos/asf/jackrabbit/sandbox/jackrabbit-journalwalker
+
+See the Subversion documentation for other source control features.
+
+
+Installation
+============
+
+After building, the created jar file in the target/ directory can
+be "installed" by unpacking it's lib directory which contains libraries.
+
+  jar xf jackrabbit-journalwalker-<version>.jar lib/
+
+
+Displaying journal contents
+===========================
+
+Usage: directory [revision]
+
+directory: is the directory where journal files are located
+revision: is an optional argument specifying the revision to start with
+

Propchange: jackrabbit/sandbox/jackrabbit-journalwalker/README.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Added: jackrabbit/sandbox/jackrabbit-journalwalker/pom.xml
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-journalwalker/pom.xml?rev=702482&view=auto
==============================================================================
--- jackrabbit/sandbox/jackrabbit-journalwalker/pom.xml (added)
+++ jackrabbit/sandbox/jackrabbit-journalwalker/pom.xml Tue Oct  7 06:54:23 2008
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+  -->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
+                             http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <prerequisites>
+    <maven>2.0.4</maven>
+  </prerequisites>
+  <groupId>org.apache.jackrabbit</groupId>
+  <parent>
+    <groupId>org.apache.jackrabbit</groupId>
+    <artifactId>jackrabbit</artifactId>
+    <version>1.5-SNAPSHOT</version>
+  </parent>
+  <artifactId>jackrabbit-journalwalker</artifactId>
+  <version>1.5-SNAPSHOT</version>
+  <packaging>jar</packaging>
+  <name>Jackrabbit Journal Walker</name>
+  <description>Jackrabbit Journal Walker</description>
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.jackrabbit</groupId>
+      <artifactId>jackrabbit-core</artifactId>
+      <version>1.5-SNAPSHOT</version>
+    </dependency>
+    <dependency>
+      <groupId>javax.jcr</groupId>
+      <artifactId>jcr</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>3.8.1</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-api</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-log4j12</artifactId>
+    </dependency>
+  </dependencies>
+  <build>
+    <defaultGoal>package</defaultGoal>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-jar-plugin</artifactId>
+        <configuration>
+          <archive>
+            <index>true</index>
+            <manifest>
+              <addClasspath>true</addClasspath>
+              <classpathPrefix>lib</classpathPrefix>
+            </manifest>
+            <manifestEntries>
+              <Main-Class>
+                org.apache.jackrabbit.journalwalker.JournalWalker
+              </Main-Class>
+            </manifestEntries>
+          </archive>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-dependency-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>copy-dependencies</id>
+            <phase>compile</phase>
+            <goals>
+              <goal>copy-dependencies</goal>
+            </goals>
+          </execution>
+        </executions>
+        <configuration>
+          <outputDirectory>
+            ${project.build.directory}/classes/lib
+          </outputDirectory>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+</project>

Propchange: jackrabbit/sandbox/jackrabbit-journalwalker/pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Added: jackrabbit/sandbox/jackrabbit-journalwalker/src/main/java/org/apache/jackrabbit/journalwalker/JournalWalker.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-journalwalker/src/main/java/org/apache/jackrabbit/journalwalker/JournalWalker.java?rev=702482&view=auto
==============================================================================
--- jackrabbit/sandbox/jackrabbit-journalwalker/src/main/java/org/apache/jackrabbit/journalwalker/JournalWalker.java
(added)
+++ jackrabbit/sandbox/jackrabbit-journalwalker/src/main/java/org/apache/jackrabbit/journalwalker/JournalWalker.java
Tue Oct  7 06:54:23 2008
@@ -0,0 +1,405 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.journalwalker;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+import javax.jcr.NamespaceException;
+
+import org.apache.commons.collections.BidiMap;
+import org.apache.commons.collections.bidimap.DualHashBidiMap;
+import org.apache.jackrabbit.core.ItemId;
+import org.apache.jackrabbit.core.NodeId;
+import org.apache.jackrabbit.core.PropertyId;
+import org.apache.jackrabbit.core.cluster.ChangeLogRecord;
+import org.apache.jackrabbit.core.cluster.ClusterRecordDeserializer;
+import org.apache.jackrabbit.core.cluster.ClusterRecordProcessor;
+import org.apache.jackrabbit.core.cluster.LockRecord;
+import org.apache.jackrabbit.core.cluster.NamespaceRecord;
+import org.apache.jackrabbit.core.cluster.NodeTypeRecord;
+import org.apache.jackrabbit.core.journal.FileJournal;
+import org.apache.jackrabbit.core.journal.JournalException;
+import org.apache.jackrabbit.core.journal.Record;
+import org.apache.jackrabbit.core.journal.RecordConsumer;
+import org.apache.jackrabbit.core.nodetype.NodeTypeDef;
+import org.apache.jackrabbit.core.observation.EventState;
+import org.apache.jackrabbit.core.state.ChangeLog;
+import org.apache.jackrabbit.core.state.ItemState;
+import org.apache.jackrabbit.spi.Name;
+import org.apache.jackrabbit.spi.Path;
+import org.apache.jackrabbit.spi.commons.name.PathFactoryImpl;
+import org.apache.jackrabbit.spi.commons.namespace.NamespaceResolver;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Walks over file journal records, showing their contents in a human readable
+ * form.
+ */
+public class JournalWalker implements RecordConsumer, NamespaceResolver,
+        ClusterRecordProcessor {
+
+    /**
+     * Default record producer.
+     */
+    private static final String DEFAULT_PRODUCER = "JR";
+
+    /**
+     * Logger.
+     */
+    private static Logger log = LoggerFactory.getLogger(JournalWalker.class);
+
+    /**
+     * Record deserializer.
+     */
+    private ClusterRecordDeserializer deserializer = new ClusterRecordDeserializer();
+
+    /**
+     * Id.
+     */
+    private String id;
+
+    /**
+     * Revision.
+     */
+    private long revision;
+
+    /**
+     * Map of registered name spaces.
+     */
+    private BidiMap namespaces = new DualHashBidiMap();
+
+    /**
+     * Id to Path translations.
+     */
+    private Map pathMap = new HashMap();
+
+    /**
+     * Create a new instance of this class.
+     */
+    public JournalWalker(String id, long revision) {
+        this.id = id;
+        this.revision = revision;
+    }
+
+    /**
+     * Log an operation.
+     *
+     * @param op operation identifier
+     * @param workspace workspace name
+     * @param id item id
+     */
+    public void log(char op, String workspace, ItemId id) {
+        StringBuffer buf = new StringBuffer();
+        buf.append(op);
+        buf.append("    ");
+        buf.append(workspace);
+        buf.append(':');
+        buf.append(lookupPath(id));
+        log(buf.toString());
+    }
+
+    /**
+     * Log a message.
+     *
+     * @param msg
+     */
+    public void log(String msg) {
+        System.out.println(msg);
+    }
+
+    //----------------------------------------------------------- RecordConsumer
+
+    /**
+     * {@inheritDoc}
+     */
+    public void consume(Record record) {
+        long recordRevision = record.getRevision();
+
+        try {
+            deserializer.deserialize(record).process(this);
+        } catch (JournalException e) {
+            String msg = "Unable to read revision '" + record.getRevision() + "'.";
+            log.error(msg, e);
+	    return;
+        }
+
+        log("Updated to revision " + recordRevision + ".");
+        log("");
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public String getId() {
+        return id;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public long getRevision() {
+        return revision;
+    }
+
+    //--------------------------------------------------- ClusterRecordProcessor
+
+    /**
+     * {@inheritDoc}
+     */
+    public void process(ChangeLogRecord record) {
+        Iterator iter = record.getEvents().iterator();
+        while (iter.hasNext()) {
+            EventState event = (EventState) iter.next();
+            eventGenerated(event.getType(), event.getParentId(),
+                    event.getParentPath(), event.getChildId(),
+                    event.getChildRelPath(), event.getNodeType(),
+                    event.getMixinNames(), event.getUserId());
+        }
+
+        ChangeLog changes = record.getChanges();
+        iter = changes.deletedStates();
+        while (iter.hasNext()) {
+            ItemState state = (ItemState) iter.next();
+            log('D', record.getWorkspace(), state.getId());
+        }
+        iter = changes.modifiedStates();
+        while (iter.hasNext()) {
+            ItemState state = (ItemState) iter.next();
+            log('U', record.getWorkspace(), state.getId());
+        }
+        iter = changes.addedStates();
+        while (iter.hasNext()) {
+            ItemState state = (ItemState) iter.next();
+            log('A', record.getWorkspace(), state.getId());
+        }
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public void process(LockRecord record) {
+        log(record.isLock() ? 'L' : 'l', record.getWorkspace(), record.getNodeId());
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public void process(NamespaceRecord record) {
+        String oldPrefix = record.getOldPrefix();
+        String newPrefix = record.getNewPrefix();
+        String uri = record.getUri();
+
+        if (oldPrefix != null) {
+            namespaces.remove(oldPrefix);
+        }
+        if (newPrefix != null) {
+            namespaces.put(newPrefix, uri);
+        }
+
+        StringBuffer buf = new StringBuffer();
+        buf.append("S    ");
+        buf.append(newPrefix);
+        buf.append("=");
+        buf.append(uri);
+        log(buf.toString());
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public void process(NodeTypeRecord record) {
+        Iterator iter;
+
+        switch (record.getOperation()) {
+        case NodeTypeRecord.REGISTER:
+        case NodeTypeRecord.REREGISTER:
+            iter = record.getCollection().iterator();
+            while (iter.hasNext()) {
+                NodeTypeDef ntd = (NodeTypeDef) iter.next();
+                StringBuffer buf = new StringBuffer();
+                buf.append("R    ");
+                buf.append(nameToString(ntd.getName()));
+                log(buf.toString());
+            }
+            break;
+        case NodeTypeRecord.UNREGISTER:
+            iter = record.getCollection().iterator();
+            while (iter.hasNext()) {
+                Name name = (Name) iter.next();
+                StringBuffer buf = new StringBuffer();
+                buf.append("r    ");
+                buf.append(nameToString(name));
+                log(buf.toString());
+            }
+            break;
+        }
+    }
+
+    //-------------------------------------------------------- NamespaceResolver
+
+    /**
+     * {@inheritDoc}
+     */
+    public void setRevision(long revision) {
+        this.revision = revision;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public String getPrefix(String uri) throws NamespaceException {
+        String prefix = (String) namespaces.getKey(uri);
+        return prefix != null ? prefix : uri;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public String getURI(String prefix) throws NamespaceException {
+        String uri = (String) namespaces.get(prefix);
+        return uri != null ? uri : prefix;
+    }
+
+    //----------------------------------------------------------- implementation
+
+    /**
+     * Process an event. Populates an internal path map.
+     */
+    private void eventGenerated(int type, NodeId parentId, Path parentPath,
+                                NodeId childId, Path.Element childRelPath,
+                                Name ntName, Set mixins, String userId) {
+
+        if (!pathMap.containsKey(parentId)) {
+            pathMap.put(parentId, pathToString(parentPath));
+        }
+        if (childId != null && !pathMap.containsKey(childId)) {
+            Path childPath = combinePath(parentPath, childRelPath);
+            pathMap.put(childId, pathToString(childPath));
+        }
+    }
+
+    /**
+     * Return string representation of the path associated with a given id.
+     *
+     * @param id item id
+     * @return path
+     */
+    private final String lookupPath(ItemId id) {
+        NodeId nodeId = null;
+        Name relName = null;
+        if (id instanceof NodeId) {
+            nodeId = (NodeId) id;
+        } else {
+            nodeId = ((PropertyId) id).getParentId();
+            relName = ((PropertyId) id).getName();
+        }
+        StringBuffer buf = new StringBuffer();
+        String path = (String) pathMap.get(nodeId);
+        buf.append(path != null ? path : nodeId.toString());
+        if (relName != null) {
+            buf.append('/');
+            buf.append(nameToString(relName));
+        }
+        return buf.length() == 0 ? "/" : buf.toString();
+    }
+
+    /**
+     * Convert a <code>Path</code> into a simple string representation.
+     *
+     * @param path path
+     * @return simple string representation
+     */
+    private String pathToString(Path path) {
+        StringBuffer buf = new StringBuffer();
+
+        Path.Element[] elements = path.getElements();
+        for (int i = 1; i < elements.length; i++) {
+            buf.append('/');
+            buf.append(nameToString(elements[i].getName()));
+        }
+        return buf.length() == 0 ? "" : buf.toString();
+    }
+
+    /**
+     * Convert a <code>Name</code> into a simple string representation.
+     *
+     * @param name name
+     * @return simple string representation
+     */
+    private String nameToString(Name name) {
+        String nsURI = name.getNamespaceURI();
+        if (nsURI.equals("")) {
+            return name.getLocalName();
+        } else if (nsURI.startsWith("http://")) {
+            String prefix = (String) namespaces.getKey(nsURI);
+            if (prefix != null) {
+                nsURI = prefix;
+            }
+        }
+        StringBuffer buf = new StringBuffer();
+        buf.append(nsURI);
+        buf.append(':');
+        buf.append(name.getLocalName());
+        return buf.toString();
+    }
+
+    /**
+     * Combine a parent path and a child relative path.
+     *
+     * @param parent parent path
+     * @param childRelPath child relative path
+     * @return combined path
+     */
+    private static Path combinePath(Path parent, Path.Element childRelPath) {
+        Path.Element[] elements = parent.getElements();
+        Path.Element[] result = new Path.Element[elements.length + 1];
+        System.arraycopy(elements, 0, result, 0, elements.length);
+        result[result.length - 1] = childRelPath;
+        return PathFactoryImpl.getInstance().create(elements);
+    }
+
+    /**
+     * Main entry point
+     * @param args program arguments
+     */
+    public static void main(String[] args) throws Exception {
+        if (args.length == 0) {
+            System.err.println("args: directory [revision]");
+            System.exit(1);
+            return;
+        }
+
+        FileJournal journal = new FileJournal();
+        journal.setRevision("revision.log");
+        journal.setDirectory(args[0]);
+
+        long revision = 0L;
+
+        if (args.length > 1) {
+            revision = Long.parseLong(args[1]);
+        }
+        JournalWalker walker = new JournalWalker(DEFAULT_PRODUCER, revision);
+        journal.init("", walker);
+        journal.register(walker);
+        journal.sync();
+    }
+}
+

Propchange: jackrabbit/sandbox/jackrabbit-journalwalker/src/main/java/org/apache/jackrabbit/journalwalker/JournalWalker.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: jackrabbit/sandbox/jackrabbit-journalwalker/src/main/java/org/apache/jackrabbit/journalwalker/JournalWalker.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision Rev Url

Added: jackrabbit/sandbox/jackrabbit-journalwalker/src/main/resources/log4j.properties
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-journalwalker/src/main/resources/log4j.properties?rev=702482&view=auto
==============================================================================
--- jackrabbit/sandbox/jackrabbit-journalwalker/src/main/resources/log4j.properties (added)
+++ jackrabbit/sandbox/jackrabbit-journalwalker/src/main/resources/log4j.properties Tue Oct
 7 06:54:23 2008
@@ -0,0 +1,36 @@
+#  Licensed to the Apache Software Foundation (ASF) under one or more
+#  contributor license agreements.  See the NOTICE file distributed with
+#  this work for additional information regarding copyright ownership.
+#  The ASF licenses this file to You under the Apache License, Version 2.0
+#  (the "License"); you may not use this file except in compliance with
+#  the License.  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing, software
+#  distributed under the License is distributed on an "AS IS" BASIS,
+#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#  See the License for the specific language governing permissions and
+#  limitations under the License.
+
+# Set root logger level to DEBUG and its only appender to A1.
+log4j.rootLogger=INFO, file
+#log4j.rootLogger=DEBUG, stdout, file
+#log4j.rootLogger=ERROR, stdout, file
+
+log4j.logger.org.apache.jackrabbit.test=DEBUG
+
+# 'stdout' is set to be a ConsoleAppender.
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+
+# 'stdout' uses PatternLayout
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+log4j.appender.stdout.layout.ConversionPattern=%d{dd.MM.yyyy HH:mm:ss} *%-5p* [%t] %c{1}:
%m (%F, line %L)\n
+
+# 'file' is set to be a FileAppender.
+log4j.appender.file=org.apache.log4j.FileAppender
+log4j.appender.file.File=target/jcr.log
+
+# 'file' uses PatternLayout.
+log4j.appender.file.layout=org.apache.log4j.PatternLayout
+log4j.appender.file.layout.ConversionPattern=%d{dd.MM.yyyy HH:mm:ss} *%-5p* [%t] %c{1}: %m
(%F, line %L)\n

Propchange: jackrabbit/sandbox/jackrabbit-journalwalker/src/main/resources/log4j.properties
------------------------------------------------------------------------------
    svn:eol-style = native



Mime
View raw message