Remove log4j 1 dependency

Bug: 578953
Change-Id: If96e128ff2bd9eede2749e81bf06785560461e1c
diff --git a/org.eclipse.emf.compare-parent/pom.xml b/org.eclipse.emf.compare-parent/pom.xml
index 796d92d..3307f47 100644
--- a/org.eclipse.emf.compare-parent/pom.xml
+++ b/org.eclipse.emf.compare-parent/pom.xml
@@ -366,7 +366,7 @@
   <profiles>
     <!-- Target platforms are located in org.eclipse.emf.compare-parent/targetPlatforms. -->
     <profile>
-      <id>2021-09</id>
+      <id>2022-03</id>
       <activation>
         <activeByDefault>true</activeByDefault>
       </activation>
@@ -381,6 +381,27 @@
                   <groupId>org.eclipse.emf.compare</groupId>
                   <artifactId>emf.compare-parent</artifactId>
                   <version>${parent-version}</version>
+                  <classifier>targetPlatforms/2022-03-sdk</classifier>
+                </artifact>
+              </target>
+            </configuration>
+          </plugin>
+        </plugins>
+      </build>
+    </profile>
+    <profile>
+      <id>2021-09</id>
+      <build>
+        <plugins>
+          <plugin>
+            <groupId>org.eclipse.tycho</groupId>
+            <artifactId>target-platform-configuration</artifactId>
+            <configuration>
+              <target>
+                <artifact>
+                  <groupId>org.eclipse.emf.compare</groupId>
+                  <artifactId>emf.compare-parent</artifactId>
+                  <version>${parent-version}</version>
                   <classifier>targetPlatforms/2021-09-sdk</classifier>
                 </artifact>
               </target>
@@ -410,141 +431,6 @@
         </plugins>
       </build>
     </profile>
-	<profile>
-      <id>2019-12</id>
-      <build>
-        <plugins>
-          <plugin>
-            <groupId>org.eclipse.tycho</groupId>
-            <artifactId>target-platform-configuration</artifactId>
-            <configuration>
-              <target>
-                <artifact>
-                  <groupId>org.eclipse.emf.compare</groupId>
-                  <artifactId>emf.compare-parent</artifactId>
-                  <version>${parent-version}</version>
-                  <classifier>targetPlatforms/2019-12-sdk</classifier>
-                </artifact>
-              </target>
-            </configuration>
-          </plugin>
-        </plugins>
-      </build>
-    </profile>
-    <profile>
-      <id>2019-06</id>
-      <build>
-        <plugins>
-          <plugin>
-            <groupId>org.eclipse.tycho</groupId>
-            <artifactId>target-platform-configuration</artifactId>
-            <configuration>
-              <target>
-                <artifact>
-                  <groupId>org.eclipse.emf.compare</groupId>
-                  <artifactId>emf.compare-parent</artifactId>
-                  <version>${parent-version}</version>
-                  <classifier>targetPlatforms/2019-06-sdk</classifier>
-                </artifact>
-              </target>
-            </configuration>
-          </plugin>
-        </plugins>
-      </build>
-    </profile>
-    <profile>
-      <id>oxygen</id>
-      <build>
-        <plugins>
-          <plugin>
-            <groupId>org.eclipse.tycho</groupId>
-            <artifactId>target-platform-configuration</artifactId>
-            <configuration>
-              <target>
-                <artifact>
-                  <groupId>org.eclipse.emf.compare</groupId>
-                  <artifactId>emf.compare-parent</artifactId>
-                  <version>${parent-version}</version>
-                  <classifier>targetPlatforms/oxygen-sdk</classifier>
-                </artifact>
-              </target>
-            </configuration>
-          </plugin>
-        </plugins>
-      </build>
-    </profile>
-    <profile>
-      <id>neon</id>
-      <activation>
-        <activeByDefault>false</activeByDefault>
-      </activation>
-      <build>
-        <plugins>
-          <plugin>
-            <groupId>org.eclipse.tycho</groupId>
-            <artifactId>target-platform-configuration</artifactId>
-            <configuration>
-              <target>
-                <artifact>
-                  <groupId>org.eclipse.emf.compare</groupId>
-                  <artifactId>emf.compare-parent</artifactId>
-                  <version>${parent-version}</version>
-                  <classifier>targetPlatforms/neon-sdk</classifier>
-                </artifact>
-              </target>
-            </configuration>
-          </plugin>
-        </plugins>
-      </build>
-    </profile>
-    <profile>
-      <id>mars</id>
-      <activation>
-        <activeByDefault>false</activeByDefault>
-      </activation>
-      <build>
-        <plugins>
-          <plugin>
-            <groupId>org.eclipse.tycho</groupId>
-            <artifactId>target-platform-configuration</artifactId>
-            <configuration>
-              <target>
-                <artifact>
-                  <groupId>org.eclipse.emf.compare</groupId>
-                  <artifactId>emf.compare-parent</artifactId>
-                  <version>${parent-version}</version>
-                  <classifier>targetPlatforms/mars-sdk</classifier>
-                </artifact>
-              </target>
-            </configuration>
-          </plugin>
-        </plugins>
-      </build>
-    </profile>
-    <profile>
-      <id>luna</id>
-      <activation>
-        <activeByDefault>false</activeByDefault>
-      </activation>
-      <build>
-        <plugins>
-          <plugin>
-            <groupId>org.eclipse.tycho</groupId>
-            <artifactId>target-platform-configuration</artifactId>
-            <configuration>
-              <target>
-                <artifact>
-                  <groupId>org.eclipse.emf.compare</groupId>
-                  <artifactId>emf.compare-parent</artifactId>
-                  <version>${parent-version}</version>
-                  <classifier>targetPlatforms/luna-sdk</classifier>
-                </artifact>
-              </target>
-            </configuration>
-          </plugin>
-        </plugins>
-      </build>
-    </profile>
     <!--
         The "extras" profiles can be used to build the supports for external tools such as Sirius.
         You will need to activate both the "extra-modules" profile and one of the "<platform_name>-extras" profiles.
@@ -562,6 +448,27 @@
       </modules>
     </profile>
     <profile>
+      <id>2022-03-extras</id>
+      <build>
+        <plugins>
+          <plugin>
+            <groupId>org.eclipse.tycho</groupId>
+            <artifactId>target-platform-configuration</artifactId>
+            <configuration>
+              <target>
+                <artifact>
+                  <groupId>org.eclipse.emf.compare</groupId>
+                  <artifactId>emf.compare-parent</artifactId>
+                  <version>${parent-version}</version>
+                  <classifier>targetPlatforms/extras/2022-03-extras-sdk</classifier>
+                </artifact>
+              </target>
+            </configuration>
+          </plugin>
+        </plugins>
+      </build>
+    </profile>
+    <profile>
       <id>2021-09-extras</id>
       <build>
         <plugins>
@@ -603,69 +510,6 @@
         </plugins>
       </build>
     </profile>
-    <profile>
-      <id>2019-12-extras</id>
-      <build>
-        <plugins>
-          <plugin>
-            <groupId>org.eclipse.tycho</groupId>
-            <artifactId>target-platform-configuration</artifactId>
-            <configuration>
-              <target>
-                <artifact>
-                  <groupId>org.eclipse.emf.compare</groupId>
-                  <artifactId>emf.compare-parent</artifactId>
-                  <version>${parent-version}</version>
-                  <classifier>targetPlatforms/extras/2019-12-extras-sdk</classifier>
-                </artifact>
-              </target>
-            </configuration>
-          </plugin>
-        </plugins>
-      </build>
-    </profile>
-    <profile>
-      <id>2019-06-extras</id>
-      <build>
-        <plugins>
-          <plugin>
-            <groupId>org.eclipse.tycho</groupId>
-            <artifactId>target-platform-configuration</artifactId>
-            <configuration>
-              <target>
-                <artifact>
-                  <groupId>org.eclipse.emf.compare</groupId>
-                  <artifactId>emf.compare-parent</artifactId>
-                  <version>${parent-version}</version>
-                  <classifier>targetPlatforms/extras/2019-06-extras-sdk</classifier>
-                </artifact>
-              </target>
-            </configuration>
-          </plugin>
-        </plugins>
-      </build>
-    </profile>
-    <profile>
-      <id>oxygen-extras</id>
-      <build>
-        <plugins>
-          <plugin>
-            <groupId>org.eclipse.tycho</groupId>
-            <artifactId>target-platform-configuration</artifactId>
-            <configuration>
-              <target>
-                <artifact>
-                  <groupId>org.eclipse.emf.compare</groupId>
-                  <artifactId>emf.compare-parent</artifactId>
-                  <version>${parent-version}</version>
-                  <classifier>targetPlatforms/extras/oxygen-extras-sdk</classifier>
-                </artifact>
-              </target>
-            </configuration>
-          </plugin>
-        </plugins>
-      </build>
-    </profile>
     
     <profile>
       <id>sign</id>
diff --git a/org.eclipse.emf.compare-parent/targetPlatforms/2022-03-sdk.target b/org.eclipse.emf.compare-parent/targetPlatforms/2022-03-sdk.target
new file mode 100644
index 0000000..f847204
--- /dev/null
+++ b/org.eclipse.emf.compare-parent/targetPlatforms/2022-03-sdk.target
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>

+<?pde?>

+<!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl -->

+<target name="EMF Compare based on 2021-09 SDK" sequenceNumber="1647879513">

+  <locations>

+    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">

+      <unit id="org.eclipse.license.feature.group" version="1.0.1.v20140414-1359"/>

+      <repository location="http://download.eclipse.org/cbi/updates/license"/>

+    </location>

+    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">

+      <unit id="com.google.guava" version="30.1.0.v20210127-2300"/>

+      <unit id="com.google.gson" version="2.8.7.v20210624-1215"/>

+      <unit id="org.junit" version="4.13.0.v20200204-1500"/>

+      <unit id="javaewah" version="1.1.12.v20210622-2206"/>

+      <unit id="org.apache.commons.compress" version="1.20.0.v20210713-1928"/>

+      <unit id="org.kohsuke.args4j" version="2.33.0.v20160323-2218"/>

+      <unit id="org.mockito" version="1.9.5.v201605172210"/>

+      <unit id="org.hamcrest" version="1.1.0.v20090501071000"/>

+      <unit id="org.assertj" version="0.0.0"/>

+      <repository location="http://download.eclipse.org/tools/orbit/downloads/drops/R20210825222808/repository/"/>

+    </location>

+    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">

+      <unit id="fr.obeo.performance" version="1.0.0.201402071743"/>

+      <repository location="http://obeo.github.io/fr.obeo.performance/"/>

+    </location>

+    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">

+      <unit id="org.eclipse.platform.feature.group" version="0.0.0"/>

+      <unit id="org.eclipse.emf.sdk.feature.group" version="0.0.0"/>

+      <unit id="org.eclipse.emf.transaction.sdk.feature.group" version="0.0.0"/>

+      <unit id="org.eclipse.uml2.feature.group" version="0.0.0"/>

+      <unit id="org.eclipse.gmf.runtime.notation.sdk.feature.group" version="0.0.0"/>

+      <unit id="org.eclipse.gmf.runtime.diagram.ui" version="0.0.0"/>

+      <unit id="org.eclipse.egit.feature.group" version="0.0.0"/>

+      <repository location="http://download.eclipse.org/releases/2022-03"/>

+    </location>

+  </locations>

+</target>

diff --git a/org.eclipse.emf.compare-parent/targetPlatforms/2022-03-sdk.tpd b/org.eclipse.emf.compare-parent/targetPlatforms/2022-03-sdk.tpd
new file mode 100644
index 0000000..6a1edcb
--- /dev/null
+++ b/org.eclipse.emf.compare-parent/targetPlatforms/2022-03-sdk.tpd
@@ -0,0 +1,17 @@
+target "EMF Compare based on 2021-09 SDK"
+
+include "fragments/licence.tpd"
+include "fragments/orbit.tpd"
+include "fragments/perf.tpd"
+
+with source, requirements
+
+location "http://download.eclipse.org/releases/2022-03" {
+	org.eclipse.platform.feature.group lazy
+	org.eclipse.emf.sdk.feature.group lazy
+	org.eclipse.emf.transaction.sdk.feature.group lazy
+	org.eclipse.uml2.feature.group lazy
+	org.eclipse.gmf.runtime.notation.sdk.feature.group lazy
+	org.eclipse.gmf.runtime.diagram.ui lazy
+	org.eclipse.egit.feature.group lazy
+}
diff --git a/org.eclipse.emf.compare-parent/targetPlatforms/extras/2022-03-extras-sdk.target b/org.eclipse.emf.compare-parent/targetPlatforms/extras/2022-03-extras-sdk.target
new file mode 100644
index 0000000..a68ddf08f
--- /dev/null
+++ b/org.eclipse.emf.compare-parent/targetPlatforms/extras/2022-03-extras-sdk.target
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>

+<?pde?>

+<!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl -->

+<target name="EMF Compare with extras based on 2021-09" sequenceNumber="1647947834">

+  <locations>

+    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">

+      <unit id="org.eclipse.license.feature.group" version="1.0.1.v20140414-1359"/>

+      <repository location="http://download.eclipse.org/cbi/updates/license"/>

+    </location>

+    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">

+      <unit id="com.google.guava" version="30.1.0.v20210127-2300"/>

+      <unit id="com.google.gson" version="2.8.7.v20210624-1215"/>

+      <unit id="org.junit" version="4.13.0.v20200204-1500"/>

+      <unit id="javaewah" version="1.1.12.v20210622-2206"/>

+      <unit id="org.apache.commons.compress" version="1.20.0.v20210713-1928"/>

+      <unit id="org.kohsuke.args4j" version="2.33.0.v20160323-2218"/>

+      <unit id="org.mockito" version="1.9.5.v201605172210"/>

+      <unit id="org.hamcrest" version="1.1.0.v20090501071000"/>

+      <unit id="org.assertj" version="0.0.0"/>

+      <repository location="http://download.eclipse.org/tools/orbit/downloads/drops/R20210825222808/repository/"/>

+    </location>

+    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">

+      <unit id="fr.obeo.performance" version="1.0.0.201402071743"/>

+      <repository location="http://obeo.github.io/fr.obeo.performance/"/>

+    </location>

+    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">

+      <unit id="org.eclipse.platform.feature.group" version="0.0.0"/>

+      <unit id="org.eclipse.emf.sdk.feature.group" version="0.0.0"/>

+      <unit id="org.eclipse.emf.transaction.sdk.feature.group" version="0.0.0"/>

+      <unit id="org.eclipse.uml2.feature.group" version="0.0.0"/>

+      <unit id="org.eclipse.gmf.runtime.notation.sdk.feature.group" version="0.0.0"/>

+      <unit id="org.eclipse.gmf.runtime.diagram.ui" version="0.0.0"/>

+      <unit id="org.eclipse.egit.feature.group" version="0.0.0"/>

+      <repository location="http://download.eclipse.org/releases/2022-03"/>

+    </location>

+    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">

+      <unit id="org.eclipse.sirius" version="0.0.0"/>

+      <unit id="org.eclipse.sirius.diagram" version="0.0.0"/>

+      <unit id="org.eclipse.sirius.runtime.feature.group" version="0.0.0"/>

+      <unit id="org.eclipse.sirius.runtime.ide.ui.feature.group" version="0.0.0"/>

+      <unit id="org.eclipse.sirius.runtime.aql.feature.group" version="0.0.0"/>

+      <repository location="https://download.eclipse.org/sirius/updates/releases/7.0.0/2021-06/"/>

+    </location>

+  </locations>

+</target>

diff --git a/org.eclipse.emf.compare-parent/targetPlatforms/extras/2022-03-extras-sdk.tpd b/org.eclipse.emf.compare-parent/targetPlatforms/extras/2022-03-extras-sdk.tpd
new file mode 100644
index 0000000..f538c2e
--- /dev/null
+++ b/org.eclipse.emf.compare-parent/targetPlatforms/extras/2022-03-extras-sdk.tpd
@@ -0,0 +1,15 @@
+target "EMF Compare with extras based on 2021-09"
+
+include "../2022-03-sdk.tpd"
+
+with source, requirements
+
+// Sirius
+
+location "https://download.eclipse.org/sirius/updates/releases/7.0.0/2021-06/" {
+	org.eclipse.sirius lazy
+	org.eclipse.sirius.diagram lazy
+	org.eclipse.sirius.runtime.feature.group lazy
+	org.eclipse.sirius.runtime.ide.ui.feature.group lazy
+	org.eclipse.sirius.runtime.aql.feature.group lazy
+}
diff --git a/org.eclipse.emf.compare-parent/targetPlatforms/fragments/orbit.tpd b/org.eclipse.emf.compare-parent/targetPlatforms/fragments/orbit.tpd
index d3c8d48..15417f5 100644
--- a/org.eclipse.emf.compare-parent/targetPlatforms/fragments/orbit.tpd
+++ b/org.eclipse.emf.compare-parent/targetPlatforms/fragments/orbit.tpd
@@ -6,7 +6,6 @@
 	com.google.guava [27.0.0,30.2.0)
 	com.google.gson [2.2.4,3.0.0)
 	org.junit [4,5)
-	org.apache.log4j [1.2.0,1.3.0)
 	/* Egit/Jgit */
 	javaewah
 	org.apache.commons.compress
diff --git a/plugins/org.eclipse.emf.compare.egit/META-INF/MANIFEST.MF b/plugins/org.eclipse.emf.compare.egit/META-INF/MANIFEST.MF
index a6f5229..bf02f91 100644
--- a/plugins/org.eclipse.emf.compare.egit/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.emf.compare.egit/META-INF/MANIFEST.MF
@@ -13,8 +13,7 @@
  org.eclipse.emf.compare,
  org.eclipse.egit.ui;bundle-version="5.0.0",
  org.eclipse.compare
-Import-Package: com.google.common.collect;version="[27.0.0,30.2.0)",
- org.apache.log4j;version="[1.2.15,2.0.0)"
+Import-Package: com.google.common.collect;version="[27.0.0,30.2.0)"
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Bundle-ActivationPolicy: lazy
 Bundle-Vendor: %providerName
diff --git a/plugins/org.eclipse.emf.compare.egit/src/org/eclipse/emf/compare/egit/internal/merge/RecursiveModelMerger.java b/plugins/org.eclipse.emf.compare.egit/src/org/eclipse/emf/compare/egit/internal/merge/RecursiveModelMerger.java
index 76017d5..413873b 100644
--- a/plugins/org.eclipse.emf.compare.egit/src/org/eclipse/emf/compare/egit/internal/merge/RecursiveModelMerger.java
+++ b/plugins/org.eclipse.emf.compare.egit/src/org/eclipse/emf/compare/egit/internal/merge/RecursiveModelMerger.java
@@ -19,7 +19,6 @@
 import java.util.LinkedHashSet;
 import java.util.Set;
 
-import org.apache.log4j.Logger;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.mapping.RemoteResourceMappingContext;
 import org.eclipse.core.resources.mapping.ResourceMapping;
@@ -37,6 +36,7 @@
 import org.eclipse.emf.compare.egit.internal.storage.AbstractGitResourceVariant;
 import org.eclipse.emf.compare.egit.internal.storage.TreeParserResourceVariant;
 import org.eclipse.emf.compare.egit.internal.wrapper.JGitProgressMonitorWrapper;
+import org.eclipse.emf.compare.rcp.EMFCompareLogger;
 import org.eclipse.jgit.attributes.Attributes;
 import org.eclipse.jgit.diff.RawText;
 import org.eclipse.jgit.dircache.DirCacheBuildIterator;
@@ -92,7 +92,7 @@
 @SuppressWarnings("restriction")
 public class RecursiveModelMerger extends RecursiveMerger {
 
-	private static final Logger LOGGER = Logger.getLogger(RecursiveModelMerger.class);
+	private static final EMFCompareLogger LOGGER = new EMFCompareLogger(RecursiveModelMerger.class);
 
 	/**
 	 * This will be populated during the course of the RecursiveMappingMergers' executions. These files have
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.emf.compare.ide.ui/META-INF/MANIFEST.MF
index 5cd5d6c..7c69a93 100644
--- a/plugins/org.eclipse.emf.compare.ide.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.emf.compare.ide.ui/META-INF/MANIFEST.MF
@@ -65,5 +65,4 @@
  com.google.common.collect;version="[27.0.0,30.2.0)",
  com.google.common.eventbus;version="[27.0.0,30.2.0)",
  com.google.common.io;version="[27.0.0,30.2.0)",
- com.google.common.util.concurrent;version="[27.0.0,30.2.0)",
- org.apache.log4j;version="[1.2.15,2.0.0)"
+ com.google.common.util.concurrent;version="[27.0.0,30.2.0)"
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/logical/ComparisonScopeBuilder.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/logical/ComparisonScopeBuilder.java
index 934c0f0..c2f8ff9 100644
--- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/logical/ComparisonScopeBuilder.java
+++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/logical/ComparisonScopeBuilder.java
@@ -28,7 +28,6 @@
 import java.util.LinkedHashSet;
 import java.util.Set;
 
-import org.apache.log4j.Logger;
 import org.eclipse.compare.ICompareContainer;
 import org.eclipse.compare.IStreamContentAccessor;
 import org.eclipse.compare.ITypedElement;
@@ -55,6 +54,7 @@
 import org.eclipse.emf.compare.ide.ui.logical.SynchronizationModel;
 import org.eclipse.emf.compare.ide.utils.ResourceUtil;
 import org.eclipse.emf.compare.ide.utils.StorageTraversal;
+import org.eclipse.emf.compare.rcp.EMFCompareLogger;
 import org.eclipse.emf.compare.scope.DefaultComparisonScope;
 import org.eclipse.emf.compare.scope.FilterComparisonScope;
 import org.eclipse.emf.compare.scope.IComparisonScope;
@@ -86,7 +86,7 @@
 	private final IStorageProviderAccessor storageAccessor;
 
 	/** The logger. */
-	private static final Logger LOGGER = Logger.getLogger(ComparisonScopeBuilder.class);
+	private static final EMFCompareLogger LOGGER = new EMFCompareLogger(ComparisonScopeBuilder.class);
 
 	/** Function transforming an IResource into its URI. */
 	private static final Function<IResource, URI> TO_FILE_URIS = new Function<IResource, URI>() {
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/logical/EMFModelProvider.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/logical/EMFModelProvider.java
index c9928d0..5bad0aa 100644
--- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/logical/EMFModelProvider.java
+++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/logical/EMFModelProvider.java
@@ -32,7 +32,6 @@
 import java.util.Set;
 import java.util.concurrent.TimeUnit;
 
-import org.apache.log4j.Logger;
 import org.eclipse.compare.ITypedElement;
 import org.eclipse.core.resources.IContainer;
 import org.eclipse.core.resources.IFile;
@@ -56,6 +55,7 @@
 import org.eclipse.emf.compare.ide.ui.logical.SynchronizationModel;
 import org.eclipse.emf.compare.ide.utils.ResourceUtil;
 import org.eclipse.emf.compare.ide.utils.StorageTraversal;
+import org.eclipse.emf.compare.rcp.EMFCompareLogger;
 
 /**
  * This implementation of a {@link ModelProvider} will be used to provide the logical model associated with
@@ -89,7 +89,7 @@
 			.getLong(EMFCompareUIPreferences.MODEL_PROVIDER_CACHE_TIMEOUT);
 
 	/** The logger. */
-	private static final Logger LOGGER = Logger.getLogger(EMFModelProvider.class);
+	private static final EMFCompareLogger LOGGER = new EMFCompareLogger(EMFModelProvider.class);
 
 	/**
 	 * Cache the logical model computed for a given file through this provider. Note that the sub-cache
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/logical/resolver/AbstractResolution.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/logical/resolver/AbstractResolution.java
index 3043bf0..7e5142e 100644
--- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/logical/resolver/AbstractResolution.java
+++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/logical/resolver/AbstractResolution.java
@@ -21,7 +21,6 @@
 import java.util.Set;
 import java.util.concurrent.Callable;
 
-import org.apache.log4j.Logger;
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IStorage;
 import org.eclipse.core.runtime.IProgressMonitor;
@@ -30,6 +29,7 @@
 import org.eclipse.emf.common.util.Diagnostic;
 import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.compare.ide.utils.ResourceUtil;
+import org.eclipse.emf.compare.rcp.EMFCompareLogger;
 import org.eclipse.emf.ecore.resource.URIConverter;
 
 /**
@@ -49,7 +49,7 @@
 	protected DiagnosticSupport diagnostic;
 
 	/** The logger */
-	protected final Logger logger = Logger.getLogger(getClass());
+	protected final EMFCompareLogger logger = new EMFCompareLogger(getClass());
 
 	/** The implicit dependencies. */
 	protected IImplicitDependencies implicitDependencies;
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/logical/resolver/DependencyGraphUpdater.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/logical/resolver/DependencyGraphUpdater.java
index 965d148..665dfa2 100644
--- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/logical/resolver/DependencyGraphUpdater.java
+++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/logical/resolver/DependencyGraphUpdater.java
@@ -18,8 +18,8 @@
 
 import java.util.Collections;
 
-import org.apache.log4j.Logger;
 import org.eclipse.emf.compare.graph.IGraph;
+import org.eclipse.emf.compare.rcp.EMFCompareLogger;
 
 /**
  * This class's responsibility is to maintain the state of its graph when notified that a new model resource
@@ -33,7 +33,7 @@
 	private final IGraph<T> dependencyGraph;
 
 	/** The logger. */
-	private static final Logger LOGGER = Logger.getLogger(DependencyGraphUpdater.class);
+	private static final EMFCompareLogger LOGGER = new EMFCompareLogger(DependencyGraphUpdater.class);
 
 	/**
 	 * Constructor.
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/logical/resolver/DiagnosticSupport.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/logical/resolver/DiagnosticSupport.java
index 43d2b01..3ff507e 100644
--- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/logical/resolver/DiagnosticSupport.java
+++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/logical/resolver/DiagnosticSupport.java
@@ -12,10 +12,10 @@
 
 import static com.google.common.base.Preconditions.checkNotNull;
 
-import org.apache.log4j.Logger;
 import org.eclipse.emf.common.util.BasicDiagnostic;
 import org.eclipse.emf.common.util.Diagnostic;
 import org.eclipse.emf.compare.ide.ui.internal.EMFCompareIDEUIPlugin;
+import org.eclipse.emf.compare.rcp.EMFCompareLogger;
 
 /**
  * Encapsulated a diagnostic to hide multi-threaded details.
@@ -27,7 +27,7 @@
 	/** The wrapped diagnostic, never {@code null}. */
 	private final BasicDiagnostic diagnostic;
 
-	private static final Logger LOGGER = Logger.getLogger(DiagnosticSupport.class);
+	private static final EMFCompareLogger LOGGER = new EMFCompareLogger(DiagnosticSupport.class);
 
 	/**
 	 * Constructor.
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/logical/resolver/ResourceDependencyLocalResolver.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/logical/resolver/ResourceDependencyLocalResolver.java
index 65e6031..d71279d 100644
--- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/logical/resolver/ResourceDependencyLocalResolver.java
+++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/logical/resolver/ResourceDependencyLocalResolver.java
@@ -25,7 +25,6 @@
 import java.util.LinkedHashSet;
 import java.util.Set;
 
-import org.apache.log4j.Logger;
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.ResourcesPlugin;
@@ -36,6 +35,7 @@
 import org.eclipse.emf.compare.graph.IGraph;
 import org.eclipse.emf.compare.ide.ui.internal.util.ThreadSafeProgressMonitor;
 import org.eclipse.emf.compare.ide.utils.ResourceUtil;
+import org.eclipse.emf.compare.rcp.EMFCompareLogger;
 
 /**
  * The default implementation of the {@link IResourceDependencyProvider}.
@@ -44,7 +44,7 @@
  */
 public class ResourceDependencyLocalResolver implements IResourceDependencyLocalResolver {
 	/** The logger. */
-	private static final Logger LOGGER = Logger.getLogger(ResourceDependencyLocalResolver.class);
+	private static final EMFCompareLogger LOGGER = new EMFCompareLogger(ResourceDependencyLocalResolver.class);
 
 	/** The event bus */
 	private final EventBus eventBus;
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/logical/resolver/ResourceDependencyRemoteResolver.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/logical/resolver/ResourceDependencyRemoteResolver.java
index 70e6680..cf37f94 100644
--- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/logical/resolver/ResourceDependencyRemoteResolver.java
+++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/logical/resolver/ResourceDependencyRemoteResolver.java
@@ -12,9 +12,9 @@
  *******************************************************************************/
 package org.eclipse.emf.compare.ide.ui.internal.logical.resolver;
 
-import org.apache.log4j.Logger;
 import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.compare.ide.ui.internal.util.ThreadSafeProgressMonitor;
+import org.eclipse.emf.compare.rcp.EMFCompareLogger;
 
 /**
  * The default implementation of the {@link IResourceDependencyRemoteResolver}.
@@ -23,7 +23,7 @@
  */
 public class ResourceDependencyRemoteResolver implements IResourceDependencyRemoteResolver {
 	/** The logger. */
-	private static final Logger LOGGER = Logger.getLogger(ResourceDependencyLocalResolver.class);
+	private static final EMFCompareLogger LOGGER = new EMFCompareLogger(ResourceDependencyRemoteResolver.class);
 
 	/** The resolution context. */
 	private final IResolutionContext context;
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/logical/resolver/SynchronizedResourceSet.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/logical/resolver/SynchronizedResourceSet.java
index 1d5c103..2449306 100644
--- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/logical/resolver/SynchronizedResourceSet.java
+++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/logical/resolver/SynchronizedResourceSet.java
@@ -25,7 +25,6 @@
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.locks.ReentrantLock;
 
-import org.apache.log4j.Logger;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.common.notify.NotificationChain;
@@ -36,6 +35,7 @@
 import org.eclipse.emf.compare.ide.internal.utils.INamespaceDeclarationListener;
 import org.eclipse.emf.compare.ide.internal.utils.IProxyCreationListener;
 import org.eclipse.emf.compare.ide.internal.utils.NoNotificationParserPool;
+import org.eclipse.emf.compare.rcp.EMFCompareLogger;
 import org.eclipse.emf.ecore.EPackage;
 import org.eclipse.emf.ecore.resource.ContentHandler;
 import org.eclipse.emf.ecore.resource.Resource;
@@ -52,7 +52,7 @@
 // Visible for testing
 public class SynchronizedResourceSet extends ResourceSetImpl implements DisposableResourceSet {
 	/** The logger. */
-	private static final Logger LOGGER = Logger.getLogger(SynchronizedResourceSet.class);
+	private static final EMFCompareLogger LOGGER = new EMFCompareLogger(SynchronizedResourceSet.class);
 
 	/** Associates URIs with their resources. */
 	private final ConcurrentHashMap<URI, Resource> uriCache;
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/actions/MergeConflictingRunnable.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/actions/MergeConflictingRunnable.java
index a486a90..d673710 100644
--- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/actions/MergeConflictingRunnable.java
+++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/actions/MergeConflictingRunnable.java
@@ -26,7 +26,6 @@
 import java.util.List;
 import java.util.Set;
 
-import org.apache.log4j.Logger;
 import org.eclipse.emf.common.util.BasicMonitor;
 import org.eclipse.emf.compare.Comparison;
 import org.eclipse.emf.compare.Diff;
@@ -41,6 +40,7 @@
 import org.eclipse.emf.compare.merge.IMerger;
 import org.eclipse.emf.compare.merge.IMerger.Registry;
 import org.eclipse.emf.compare.merge.IMerger.Registry2;
+import org.eclipse.emf.compare.rcp.EMFCompareLogger;
 
 /**
  * Implements the "merge all contained conflicting" action.
@@ -50,7 +50,7 @@
 public class MergeConflictingRunnable extends AbstractMergeRunnable implements IMergeRunnable {
 
 	/** The logger. */
-	private static final Logger LOGGER = Logger.getLogger(MergeConflictingRunnable.class);
+	private static final EMFCompareLogger LOGGER = new EMFCompareLogger(MergeConflictingRunnable.class);
 
 	/**
 	 * Default constructor.
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/actions/MergeNonConflictingRunnable.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/actions/MergeNonConflictingRunnable.java
index 2025065..c83ffcf 100644
--- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/actions/MergeNonConflictingRunnable.java
+++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/actions/MergeNonConflictingRunnable.java
@@ -37,7 +37,6 @@
 import java.util.Collection;
 import java.util.List;
 
-import org.apache.log4j.Logger;
 import org.eclipse.emf.common.util.BasicMonitor;
 import org.eclipse.emf.common.util.Monitor;
 import org.eclipse.emf.compare.Comparison;
@@ -55,6 +54,7 @@
 import org.eclipse.emf.compare.merge.IDiffRelationshipComputer;
 import org.eclipse.emf.compare.merge.IMerger;
 import org.eclipse.emf.compare.merge.IMerger.Registry;
+import org.eclipse.emf.compare.rcp.EMFCompareLogger;
 
 /**
  * Implements the "merge non-conflicting" and "merge all non-conflicting" action.
@@ -64,7 +64,7 @@
 public class MergeNonConflictingRunnable extends AbstractMergeRunnable implements IMergeAllNonConflictingRunnable, IMergeRunnable {
 
 	/** The logger. */
-	private static final Logger LOGGER = Logger.getLogger(MergeNonConflictingRunnable.class);
+	private static final EMFCompareLogger LOGGER = new EMFCompareLogger(MergeNonConflictingRunnable.class);
 
 	/**
 	 * Default constructor.
diff --git a/plugins/org.eclipse.emf.compare.log4j.fragment/.checkstyle b/plugins/org.eclipse.emf.compare.log4j.fragment/.checkstyle
deleted file mode 100644
index 2684ff1..0000000
--- a/plugins/org.eclipse.emf.compare.log4j.fragment/.checkstyle
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<fileset-config file-format-version="1.2.0" simple-config="true" sync-formatter="false">
-  <local-check-config name="EMF Compare" location="/org.eclipse.emf.compare-parent/codeStyle/EMFCompareCheckstyle6Configuration.xml" type="project" description="">
-    <additional-data name="protect-config-file" value="false"/>
-  </local-check-config>
-  <fileset name="all" enabled="true" check-config-name="EMF Compare" local="true">
-    <file-match-pattern match-pattern="." include-pattern="true"/>
-  </fileset>
-</fileset-config>
diff --git a/plugins/org.eclipse.emf.compare.log4j.fragment/.classpath b/plugins/org.eclipse.emf.compare.log4j.fragment/.classpath
deleted file mode 100644
index 3bc2475..0000000
--- a/plugins/org.eclipse.emf.compare.log4j.fragment/.classpath
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/plugins/org.eclipse.emf.compare.log4j.fragment/.project b/plugins/org.eclipse.emf.compare.log4j.fragment/.project
deleted file mode 100644
index 4be23c5..0000000
--- a/plugins/org.eclipse.emf.compare.log4j.fragment/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.emf.compare.log4j.fragment</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-		<nature>org.eclipse.pde.PluginNature</nature>
-	</natures>
-</projectDescription>
diff --git a/plugins/org.eclipse.emf.compare.log4j.fragment/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.emf.compare.log4j.fragment/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 79ea86f..0000000
--- a/plugins/org.eclipse.emf.compare.log4j.fragment/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,389 +0,0 @@
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
-org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
-org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
-org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
-org.eclipse.jdt.core.compiler.annotation.nonnullisdefault=disabled
-org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
-org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.7
-org.eclipse.jdt.core.compiler.debug.lineNumber=generate
-org.eclipse.jdt.core.compiler.debug.localVariable=generate
-org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.autoboxing=warning
-org.eclipse.jdt.core.compiler.problem.comparingIdentical=error
-org.eclipse.jdt.core.compiler.problem.deadCode=error
-org.eclipse.jdt.core.compiler.problem.deprecation=warning
-org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
-org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
-org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
-org.eclipse.jdt.core.compiler.problem.emptyStatement=error
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore
-org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
-org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
-org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
-org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
-org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=error
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
-org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=error
-org.eclipse.jdt.core.compiler.problem.includeFieldsInNullAnalysis=disabled
-org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=enabled
-org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
-org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
-org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
-org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
-org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=error
-org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
-org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=error
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=disabled
-org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
-org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning
-org.eclipse.jdt.core.compiler.problem.noEffectAssignment=error
-org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=error
-org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
-org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
-org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
-org.eclipse.jdt.core.compiler.problem.nullReference=warning
-org.eclipse.jdt.core.compiler.problem.nullSpecInsufficientInfo=warning
-org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
-org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
-org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
-org.eclipse.jdt.core.compiler.problem.parameterAssignment=warning
-org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=error
-org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning
-org.eclipse.jdt.core.compiler.problem.potentialNullSpecViolation=error
-org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=warning
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
-org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
-org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
-org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore
-org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
-org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
-org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
-org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
-org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
-org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
-org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
-org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
-org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
-org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
-org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
-org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
-org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
-org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
-org.eclipse.jdt.core.compiler.problem.unusedImport=warning
-org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
-org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
-org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
-org.eclipse.jdt.core.compiler.problem.unusedParameter=warning
-org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
-org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
-org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore
-org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.7
-org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_assignment=0
-org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
-org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
-org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
-org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
-org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
-org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
-org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=0
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=0
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
-org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_after_package=1
-org.eclipse.jdt.core.formatter.blank_lines_before_field=1
-org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
-org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
-org.eclipse.jdt.core.formatter.blank_lines_before_method=1
-org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
-org.eclipse.jdt.core.formatter.blank_lines_before_package=0
-org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
-org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
-org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=true
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=true
-org.eclipse.jdt.core.formatter.comment.format_block_comments=true
-org.eclipse.jdt.core.formatter.comment.format_header=false
-org.eclipse.jdt.core.formatter.comment.format_html=true
-org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
-org.eclipse.jdt.core.formatter.comment.format_line_comments=true
-org.eclipse.jdt.core.formatter.comment.format_source_code=true
-org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
-org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
-org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
-org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
-org.eclipse.jdt.core.formatter.comment.line_length=110
-org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
-org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
-org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
-org.eclipse.jdt.core.formatter.compact_else_if=true
-org.eclipse.jdt.core.formatter.continuation_indentation=2
-org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
-org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
-org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
-org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
-org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
-org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_empty_lines=false
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=true
-org.eclipse.jdt.core.formatter.indentation.size=8
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
-org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
-org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
-org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.join_lines_in_comments=true
-org.eclipse.jdt.core.formatter.join_wrapped_lines=true
-org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
-org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
-org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
-org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
-org.eclipse.jdt.core.formatter.lineSplit=110
-org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
-org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
-org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
-org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
-org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
-org.eclipse.jdt.core.formatter.tabulation.char=tab
-org.eclipse.jdt.core.formatter.tabulation.size=4
-org.eclipse.jdt.core.formatter.use_on_off_tags=false
-org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
-org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
-org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
-org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
-org.eclipse.jdt.core.javaFormatter=org.eclipse.jdt.core.defaultJavaFormatter
diff --git a/plugins/org.eclipse.emf.compare.log4j.fragment/.settings/org.eclipse.jdt.ui.prefs b/plugins/org.eclipse.emf.compare.log4j.fragment/.settings/org.eclipse.jdt.ui.prefs
deleted file mode 100644
index de1c796..0000000
--- a/plugins/org.eclipse.emf.compare.log4j.fragment/.settings/org.eclipse.jdt.ui.prefs
+++ /dev/null
@@ -1,62 +0,0 @@
-eclipse.preferences.version=1
-editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
-formatter_profile=_EMF Compare
-formatter_settings_version=12
-sp_cleanup.add_default_serial_version_id=true
-sp_cleanup.add_generated_serial_version_id=false
-sp_cleanup.add_missing_annotations=true
-sp_cleanup.add_missing_deprecated_annotations=true
-sp_cleanup.add_missing_methods=false
-sp_cleanup.add_missing_nls_tags=false
-sp_cleanup.add_missing_override_annotations=true
-sp_cleanup.add_missing_override_annotations_interface_methods=true
-sp_cleanup.add_serial_version_id=false
-sp_cleanup.always_use_blocks=true
-sp_cleanup.always_use_parentheses_in_expressions=false
-sp_cleanup.always_use_this_for_non_static_field_access=false
-sp_cleanup.always_use_this_for_non_static_method_access=false
-sp_cleanup.convert_functional_interfaces=false
-sp_cleanup.convert_to_enhanced_for_loop=false
-sp_cleanup.correct_indentation=false
-sp_cleanup.format_source_code=true
-sp_cleanup.format_source_code_changes_only=false
-sp_cleanup.insert_inferred_type_arguments=false
-sp_cleanup.make_local_variable_final=true
-sp_cleanup.make_parameters_final=false
-sp_cleanup.make_private_fields_final=true
-sp_cleanup.make_type_abstract_if_missing_method=false
-sp_cleanup.make_variable_declarations_final=false
-sp_cleanup.never_use_blocks=false
-sp_cleanup.never_use_parentheses_in_expressions=true
-sp_cleanup.on_save_use_additional_actions=true
-sp_cleanup.organize_imports=true
-sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
-sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
-sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
-sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
-sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
-sp_cleanup.remove_private_constructors=true
-sp_cleanup.remove_redundant_type_arguments=true
-sp_cleanup.remove_trailing_whitespaces=false
-sp_cleanup.remove_trailing_whitespaces_all=true
-sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
-sp_cleanup.remove_unnecessary_casts=true
-sp_cleanup.remove_unnecessary_nls_tags=true
-sp_cleanup.remove_unused_imports=false
-sp_cleanup.remove_unused_local_variables=false
-sp_cleanup.remove_unused_private_fields=true
-sp_cleanup.remove_unused_private_members=false
-sp_cleanup.remove_unused_private_methods=true
-sp_cleanup.remove_unused_private_types=true
-sp_cleanup.sort_members=false
-sp_cleanup.sort_members_all=false
-sp_cleanup.use_anonymous_class_creation=false
-sp_cleanup.use_blocks=false
-sp_cleanup.use_blocks_only_for_return_and_throw=false
-sp_cleanup.use_lambda=true
-sp_cleanup.use_parentheses_in_expressions=false
-sp_cleanup.use_this_for_non_static_field_access=false
-sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
-sp_cleanup.use_this_for_non_static_method_access=false
-sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
-sp_cleanup.use_type_arguments=false
diff --git a/plugins/org.eclipse.emf.compare.log4j.fragment/META-INF/MANIFEST.MF b/plugins/org.eclipse.emf.compare.log4j.fragment/META-INF/MANIFEST.MF
deleted file mode 100644
index a28df42..0000000
--- a/plugins/org.eclipse.emf.compare.log4j.fragment/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,8 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: EMF Compare Logging Support
-Bundle-Vendor: Eclipse Modeling Project
-Bundle-SymbolicName: org.eclipse.emf.compare.log4j.fragment
-Bundle-Version: 1.1.0.qualifier
-Fragment-Host: org.apache.log4j
-Bundle-RequiredExecutionEnvironment: JavaSE-1.7
diff --git a/plugins/org.eclipse.emf.compare.log4j.fragment/build.properties b/plugins/org.eclipse.emf.compare.log4j.fragment/build.properties
deleted file mode 100644
index b107977..0000000
--- a/plugins/org.eclipse.emf.compare.log4j.fragment/build.properties
+++ /dev/null
@@ -1,3 +0,0 @@
-source.. = src/
-bin.includes = META-INF/,\
-               .
diff --git a/plugins/org.eclipse.emf.compare.log4j.fragment/src/log4j.properties b/plugins/org.eclipse.emf.compare.log4j.fragment/src/log4j.properties
deleted file mode 100644
index 58b6392..0000000
--- a/plugins/org.eclipse.emf.compare.log4j.fragment/src/log4j.properties
+++ /dev/null
@@ -1,29 +0,0 @@
-# This file defines the log4j configuration for EMFCompare plug-ins.
-# It is installed as a fragment of org.apache.log4j,
-# and defines an appender for logs written from EMFCompare to
-# a rolling file.
-# ___________________________________________________________________
-# Set root logger level to debug and its only appender to default.
-log4j.rootLogger=error, default
-# default is set to be a ConsoleAppender.
-log4j.appender.default=org.apache.log4j.ConsoleAppender
-# default uses PatternLayout.
-log4j.appender.default.layout=org.apache.log4j.PatternLayout
-log4j.appender.default.layout.ConversionPattern=%d{ISO8601} [%t] %-5p %c %x - %m%n
-
-# ___________________________________________________________________
-# EMFCompare-specific configuration
-#
-log4j.logger.org.eclipse.emf.compare=OFF, default
-# We don't want these logs to be routed to other parent loggers
-log4j.additivity.org.eclipse.emf.compare = false
-log4j.appender.EMFCFile=org.apache.log4j.RollingFileAppender
-log4j.appender.EMFCFile.File=emfcompare.log
-# Keep 10 back-up files of at most 2MB
-log4j.appender.EMFCFile.MaxFileSize=2MB
-log4j.appender.EMFCFile.MaxBackupIndex=10
-# We would like to use EnhancedPatternLayout but it requires log4j 1.2.16+
-# which is not in orbit
-log4j.appender.EMFCFile.layout=org.apache.log4j.PatternLayout
-# Date [Thread name] LEVEL 3.last.segments.of.logger.name <NDC Tag> - message\n
-log4j.appender.EMFCFile.layout.ConversionPattern=%d{ISO8601} [%t] %-5p %c{3} %x - %m%n
diff --git a/plugins/org.eclipse.emf.compare.rcp.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.emf.compare.rcp.ui/META-INF/MANIFEST.MF
index 7ddd7a1..4c6ceb0 100644
--- a/plugins/org.eclipse.emf.compare.rcp.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.emf.compare.rcp.ui/META-INF/MANIFEST.MF
@@ -60,5 +60,4 @@
  com.google.common.cache;version="[27.0.0,30.2.0)",
  com.google.common.collect;version="[27.0.0,30.2.0)",
  com.google.common.eventbus;version="[27.0.0,30.2.0)",
- com.google.common.io;version="[27.0.0,30.2.0)",
- org.apache.log4j;version="[1.2.15,2.0.0)"
+ com.google.common.io;version="[27.0.0,30.2.0)"
diff --git a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/preferences/LoggingPreferencePage.java b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/preferences/LoggingPreferencePage.java
index 853edc3..8cac716 100644
--- a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/preferences/LoggingPreferencePage.java
+++ b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/preferences/LoggingPreferencePage.java
@@ -13,16 +13,9 @@
  *******************************************************************************/
 package org.eclipse.emf.compare.rcp.ui.internal.preferences;
 
-import static org.eclipse.emf.compare.rcp.internal.preferences.EMFComparePreferences.LOG_BACKUP_COUNT_KEY;
-import static org.eclipse.emf.compare.rcp.internal.preferences.EMFComparePreferences.LOG_BACKUP_DEFAULT;
-import static org.eclipse.emf.compare.rcp.internal.preferences.EMFComparePreferences.LOG_FILENAME_KEY;
-import static org.eclipse.emf.compare.rcp.internal.preferences.EMFComparePreferences.LOG_FILE_DEFAULT;
-import static org.eclipse.emf.compare.rcp.internal.preferences.EMFComparePreferences.LOG_FILE_MAX_SIZE_KEY;
-import static org.eclipse.emf.compare.rcp.internal.preferences.EMFComparePreferences.LOG_FILE_SIZE_DEFAULT;
 import static org.eclipse.emf.compare.rcp.internal.preferences.EMFComparePreferences.LOG_LEVEL_DEFAULT;
 import static org.eclipse.emf.compare.rcp.internal.preferences.EMFComparePreferences.LOG_LEVEL_KEY;
 
-import java.io.File;
 import java.io.IOException;
 import java.util.Arrays;
 
@@ -37,18 +30,11 @@
 import org.eclipse.jface.preference.PreferencePage;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Combo;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.FileDialog;
 import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Text;
 import org.eclipse.ui.IWorkbench;
 import org.eclipse.ui.IWorkbenchPreferencePage;
 import org.eclipse.ui.preferences.ScopedPreferenceStore;
@@ -63,13 +49,7 @@
 
 	private Combo levelCombo;
 
-	private Text fileField;
-
-	private Text maxSizeField;
-
-	private Text maxBackupField;
-
-	private final String[] LOG_LEVELS = new String[] {"OFF", "ERROR", "INFO", "DEBUG" }; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+	private final String[] LOG_LEVELS = new String[] {"OFF", "INFO", "DEBUG" }; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 
 	/**
 	 * Constructor.
@@ -121,46 +101,6 @@
 		levelCombo.setItems(LOG_LEVELS);
 		levelCombo.setLayoutData(getDefaultFieldGridData(100));
 
-		Label fileLabel = new Label(loggingComposite, SWT.LEAD);
-		fileLabel.setText(EMFCompareRCPUIMessages.getString("LoggingPreferencePage.log.file")); //$NON-NLS-1$
-		fileField = new Text(loggingComposite, SWT.BORDER | SWT.SINGLE);
-		fileField.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
-		Button fileButton = new Button(loggingComposite, SWT.PUSH);
-		fileButton.setText(EMFCompareRCPUIMessages.getString("LoggingPreferencePage.filebutton.label")); //$NON-NLS-1$
-		fileButton.addSelectionListener(new SelectionAdapter() {
-			@Override
-			public void widgetSelected(SelectionEvent e) {
-				FileDialog dlg = new FileDialog(getShell(), SWT.SAVE);
-				File file = new File(fileField.getText());
-				dlg.setFileName(file.getName());
-				dlg.setFilterPath(file.getParent());
-				String fileName = dlg.open();
-				if (fileName != null) {
-					fileField.setText(fileName);
-				}
-			}
-		});
-
-		Label maxSizeLabel = new Label(loggingComposite, SWT.LEAD);
-		maxSizeLabel.setText(EMFCompareRCPUIMessages.getString("LoggingPreferencePage.log.file.size")); //$NON-NLS-1$
-		maxSizeField = new Text(loggingComposite, SWT.BORDER | SWT.SINGLE);
-		maxSizeField.setLayoutData(getDefaultFieldGridData(80));
-		maxSizeField.addModifyListener(new ModifyListener() {
-			public void modifyText(ModifyEvent e) {
-				verifyIntegerFields();
-			}
-		});
-
-		Label maxBackupLabel = new Label(loggingComposite, SWT.LEAD);
-		maxBackupLabel.setText(EMFCompareRCPUIMessages.getString("LoggingPreferencePage.log.backup.count")); //$NON-NLS-1$
-		maxBackupField = new Text(loggingComposite, SWT.BORDER | SWT.SINGLE);
-		maxBackupField.setLayoutData(getDefaultFieldGridData(80));
-		maxBackupField.addModifyListener(new ModifyListener() {
-			public void modifyText(ModifyEvent e) {
-				verifyIntegerFields();
-			}
-		});
-
 		refreshWidgets();
 
 		return loggingComposite;
@@ -173,35 +113,20 @@
 	}
 
 	protected void savePreferences() throws BackingStoreException, IOException {
-		getPreferenceStore().setValue(LOG_FILENAME_KEY, fileField.getText());
 		String item = levelCombo.getItem(levelCombo.getSelectionIndex());
 		getPreferenceStore().setValue(LOG_LEVEL_KEY, item);
-		getPreferenceStore().setValue(LOG_BACKUP_COUNT_KEY, maxBackupField.getText());
-		getPreferenceStore().setValue(LOG_FILE_MAX_SIZE_KEY, maxSizeField.getText());
 	}
 
 	protected void resetPreferences() {
-		getPreferenceStore().setToDefault(LOG_FILENAME_KEY);
 		getPreferenceStore().setToDefault(LOG_LEVEL_KEY);
-		getPreferenceStore().setToDefault(LOG_BACKUP_COUNT_KEY);
-		getPreferenceStore().setToDefault(LOG_FILE_MAX_SIZE_KEY);
 	}
 
 	protected void refreshWidgets() {
 		IPreferencesService prefsService = Platform.getPreferencesService();
-		String fileName = prefsService.getString(EMFCompareRCPPlugin.PLUGIN_ID, LOG_FILENAME_KEY,
-				LOG_FILE_DEFAULT, null);
 		String level = prefsService.getString(EMFCompareRCPPlugin.PLUGIN_ID, LOG_LEVEL_KEY, LOG_LEVEL_DEFAULT,
 				null);
-		int maxBackupCount = prefsService.getInt(EMFCompareRCPPlugin.PLUGIN_ID, LOG_BACKUP_COUNT_KEY,
-				LOG_BACKUP_DEFAULT, null);
-		int maxSizeInMB = prefsService.getInt(EMFCompareRCPPlugin.PLUGIN_ID, LOG_FILE_MAX_SIZE_KEY,
-				LOG_FILE_SIZE_DEFAULT, null);
 		levelCombo.select(Arrays.asList(LOG_LEVELS).indexOf(level));
 		levelCombo.pack();
-		fileField.setText(fileName);
-		maxBackupField.setText(Integer.toString(maxBackupCount));
-		maxSizeField.setText(Integer.toString(maxSizeInMB));
 	}
 
 	@Override
@@ -222,30 +147,4 @@
 		super.performDefaults();
 	}
 
-	/**
-	 * Verify if max size and max file fields are valid. It checks if the fields are integer and not empty.
-	 */
-	private void verifyIntegerFields() {
-		try {
-			Integer.parseInt(maxSizeField.getText());
-			Integer.parseInt(maxBackupField.getText());
-			setPreferencePageError(true, null);
-		} catch (Exception e) {
-			setPreferencePageError(false,
-					EMFCompareRCPUIMessages.getString("LoggingPreferencePage.error.message")); //$NON-NLS-1$
-		}
-	}
-
-	/**
-	 * Set preference page error message and if this page is valid.
-	 * 
-	 * @param isValid
-	 *            True if you can apply these preference
-	 * @param errorMessage
-	 *            Error message to display or null to remove the message
-	 */
-	private void setPreferencePageError(boolean isValid, String errorMessage) {
-		setValid(isValid);
-		setErrorMessage(errorMessage);
-	}
 }
diff --git a/plugins/org.eclipse.emf.compare.rcp/META-INF/MANIFEST.MF b/plugins/org.eclipse.emf.compare.rcp/META-INF/MANIFEST.MF
index 43e6ea7..572cb9c 100644
--- a/plugins/org.eclipse.emf.compare.rcp/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.emf.compare.rcp/META-INF/MANIFEST.MF
@@ -26,5 +26,4 @@
  org.eclipse.emf.compare.rcp.internal.tracer;x-friends:="org.eclipse.emf.compare.rcp.ui,org.eclipse.emf.compare.ide.ui",
  org.eclipse.emf.compare.rcp.policy
 Import-Package: com.google.common.base;version="[27.0.0,30.2.0)",
- com.google.common.collect;version="[27.0.0,30.2.0)",
- org.apache.log4j;version="[1.2.15,2.0.0)"
+ com.google.common.collect;version="[27.0.0,30.2.0)"
diff --git a/plugins/org.eclipse.emf.compare.rcp/src/org/eclipse/emf/compare/rcp/EMFCompareLogger.java b/plugins/org.eclipse.emf.compare.rcp/src/org/eclipse/emf/compare/rcp/EMFCompareLogger.java
new file mode 100644
index 0000000..43ce25b
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.rcp/src/org/eclipse/emf/compare/rcp/EMFCompareLogger.java
@@ -0,0 +1,75 @@
+/*******************************************************************************
+ * Copyright (c) 2012, 2017 Obeo and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Obeo - initial API and implementation
+ *     Philip Langer - add scope of a comparison to its adapters, progress reporting
+ *******************************************************************************/
+package org.eclipse.emf.compare.rcp;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+
+/**
+ * Mimics the Log4J 1 logger interface but sends all logging to the Eclipse log. This allows us to remove
+ * Log4J 1 with limited impacts.
+ * 
+ * @author lgoubet
+ */
+public class EMFCompareLogger {
+
+	private static Level level;
+
+	private Class<?> caller;
+
+	public EMFCompareLogger(Class<?> caller) {
+		this.caller = caller;
+	}
+
+	public boolean isInfoEnabled() {
+		return level.compareTo(Level.INFO) >= 0;
+	}
+
+	public boolean isDebugEnabled() {
+		return level.compareTo(Level.DEBUG) >= 0;
+	}
+
+	public static void setLevel(String newLevel) {
+		if (newLevel == null) {
+			level = Level.OFF;
+			return;
+		}
+		String upper = newLevel.toUpperCase();
+		switch (upper) {
+			case "INFO": //$NON-NLS-1$
+				level = Level.INFO;
+				break;
+			case "DEBUG": //$NON-NLS-1$
+				level = Level.DEBUG;
+				break;
+			case "OFF": //$NON-NLS-1$
+				// Fall-through
+			default:
+				level = Level.OFF;
+		}
+	}
+
+	public void info(String message) {
+		EMFCompareRCPPlugin.getDefault().getLog().log(
+				new Status(IStatus.INFO, EMFCompareRCPPlugin.PLUGIN_ID, caller.getName() + " - " + message)); //$NON-NLS-1$
+	}
+
+	public void debug(String message) {
+		// Eclipse has no "debug" level.
+		info(message);
+	}
+
+	public enum Level {
+		OFF, INFO, DEBUG;
+	}
+
+}
diff --git a/plugins/org.eclipse.emf.compare.rcp/src/org/eclipse/emf/compare/rcp/EMFCompareRCPPlugin.java b/plugins/org.eclipse.emf.compare.rcp/src/org/eclipse/emf/compare/rcp/EMFCompareRCPPlugin.java
index 9f203e0..44b1a4a 100644
--- a/plugins/org.eclipse.emf.compare.rcp/src/org/eclipse/emf/compare/rcp/EMFCompareRCPPlugin.java
+++ b/plugins/org.eclipse.emf.compare.rcp/src/org/eclipse/emf/compare/rcp/EMFCompareRCPPlugin.java
@@ -12,15 +12,8 @@
  *******************************************************************************/
 package org.eclipse.emf.compare.rcp;
 
-import static org.eclipse.emf.compare.rcp.internal.preferences.EMFComparePreferences.EMFC_APPENDER_NAME;
-import static org.eclipse.emf.compare.rcp.internal.preferences.EMFComparePreferences.LOG_BACKUP_COUNT_KEY;
-import static org.eclipse.emf.compare.rcp.internal.preferences.EMFComparePreferences.LOG_BACKUP_DEFAULT;
-import static org.eclipse.emf.compare.rcp.internal.preferences.EMFComparePreferences.LOG_FILENAME_KEY;
-import static org.eclipse.emf.compare.rcp.internal.preferences.EMFComparePreferences.LOG_FILE_MAX_SIZE_KEY;
-import static org.eclipse.emf.compare.rcp.internal.preferences.EMFComparePreferences.LOG_FILE_SIZE_DEFAULT;
 import static org.eclipse.emf.compare.rcp.internal.preferences.EMFComparePreferences.LOG_LEVEL_DEFAULT;
 import static org.eclipse.emf.compare.rcp.internal.preferences.EMFComparePreferences.LOG_LEVEL_KEY;
-import static org.eclipse.emf.compare.rcp.internal.preferences.EMFComparePreferences.LOG_PATTERN;
 
 import com.google.common.base.Predicate;
 import com.google.common.collect.ArrayListMultimap;
@@ -29,24 +22,17 @@
 import com.google.common.collect.Multimap;
 import com.google.common.collect.Multimaps;
 
-import java.io.IOException;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-import org.apache.log4j.Level;
-import org.apache.log4j.Logger;
-import org.apache.log4j.PatternLayout;
-import org.apache.log4j.RollingFileAppender;
 import org.eclipse.core.runtime.IExtensionRegistry;
-import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.Plugin;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.core.runtime.preferences.IEclipsePreferences.IPreferenceChangeListener;
 import org.eclipse.core.runtime.preferences.IEclipsePreferences.PreferenceChangeEvent;
-import org.eclipse.core.runtime.preferences.IPreferencesService;
 import org.eclipse.core.runtime.preferences.InstanceScope;
 import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.compare.conflict.IConflictDetector;
@@ -129,14 +115,6 @@
 	/** The id of the adapter factory extension point. */
 	public static final String FACTORY_PPID = "adapterFactory"; //$NON-NLS-1$
 
-	/**
-	 * Log4j logger to use throughout EMFCompare for logging purposes.
-	 */
-	private static final Logger LOGGER = Logger.getLogger("org.eclipse.emf.compare"); //$NON-NLS-1$
-
-	/** Number of bytes in a MiB. */
-	private static final int MEGABYTE = 1024 * 1024;
-
 	/** This plugin is a singleton, so it's quite ok to keep the plugin in a static field. */
 	private static EMFCompareRCPPlugin plugin;
 
@@ -768,59 +746,18 @@
 	}
 
 	/**
-	 * Initializes log4j by reading the preferences.
+	 * Initializes logging by reading the preferences.
 	 */
 	private void initLogging() {
-		LOGGER.setLevel(Level.toLevel(Platform.getPreferencesService()
-				.getString(EMFCompareRCPPlugin.PLUGIN_ID, LOG_LEVEL_KEY, LOG_LEVEL_DEFAULT, null)));
-		if (!Level.OFF.equals(LOGGER.getLevel())) {
-			RollingFileAppender appender = (RollingFileAppender)LOGGER.getAppender(EMFC_APPENDER_NAME);
-			String logFileName = Platform.getPreferencesService().getString(EMFCompareRCPPlugin.PLUGIN_ID,
-					LOG_FILENAME_KEY, "", null); //$NON-NLS-1$
-			if (logFileName.length() > 0) {
-				if (appender == null) {
-					try {
-						createLogAppender(logFileName);
-					} catch (IOException e) {
-						// Invalidate file name
-						Platform.getPreferencesService().getString(EMFCompareRCPPlugin.PLUGIN_ID,
-								LOG_FILENAME_KEY, "", null); //$NON-NLS-1$
-					}
-				} else {
-					appender.setMaxBackupIndex(Platform.getPreferencesService().getInt(
-							EMFCompareRCPPlugin.PLUGIN_ID, LOG_BACKUP_COUNT_KEY, LOG_BACKUP_DEFAULT, null));
-					appender.setMaximumFileSize(
-							(Platform.getPreferencesService().getInt(EMFCompareRCPPlugin.PLUGIN_ID,
-									LOG_FILE_MAX_SIZE_KEY, LOG_FILE_SIZE_DEFAULT, null)) * MEGABYTE);
-				}
-			}
-		}
+		String level = Platform.getPreferencesService().getString(EMFCompareRCPPlugin.PLUGIN_ID,
+				LOG_LEVEL_KEY, LOG_LEVEL_DEFAULT, null);
+		EMFCompareLogger.setLevel(level);
 		preferenceChangeListener = new LoggingPreferenceChangeListener();
 		InstanceScope.INSTANCE.getNode(EMFCompareRCPPlugin.PLUGIN_ID)
 				.addPreferenceChangeListener(preferenceChangeListener);
 	}
 
 	/**
-	 * Creates the RollingFileAppender used to log with log4j.
-	 * 
-	 * @param newFileName
-	 *            Path opf the log file
-	 * @throws IOException
-	 *             If an IO problem occurs, like the given path does not represent a file, or it cannot be
-	 *             written;
-	 */
-	private void createLogAppender(String newFileName) throws IOException {
-		RollingFileAppender appender;
-		appender = new RollingFileAppender(new PatternLayout(LOG_PATTERN), newFileName, true);
-		LOGGER.removeAllAppenders(); // We don't want to log elsewhere
-		LOGGER.addAppender(appender);
-		appender.setMaxBackupIndex(Platform.getPreferencesService().getInt(EMFCompareRCPPlugin.PLUGIN_ID,
-				LOG_BACKUP_COUNT_KEY, LOG_BACKUP_DEFAULT, null));
-		appender.setMaximumFileSize((Platform.getPreferencesService().getInt(EMFCompareRCPPlugin.PLUGIN_ID,
-				LOG_FILE_MAX_SIZE_KEY, LOG_FILE_SIZE_DEFAULT, null)) * MEGABYTE);
-	}
-
-	/**
 	 * Listens to logging preference changes to maintain the log4j configuration up-to-date.
 	 * 
 	 * @author <a href="mailto:laurent.delaigue@obeo.fr">Laurent Delaigue</a>
@@ -828,63 +765,14 @@
 	private static class LoggingPreferenceChangeListener implements IPreferenceChangeListener {
 
 		/**
-		 * The path of the logging file.
-		 */
-		private String path;
-
-		/**
-		 * The level of the logger.
-		 */
-		private Level loggingLevel;
-
-		/**
 		 * Updates the log4j configuration when logging preferences change.
 		 * 
 		 * @param event
 		 *            the preference change event.
 		 */
 		public void preferenceChange(PreferenceChangeEvent event) {
-			final IPreferencesService prefs = Platform.getPreferencesService();
-
-			path = prefs.getString(EMFCompareRCPPlugin.PLUGIN_ID, LOG_FILENAME_KEY, "", null); //$NON-NLS-1$
 			if (LOG_LEVEL_KEY.equals(event.getKey())) {
-				loggingLevel = Level.toLevel((String)event.getNewValue());
-				LOGGER.setLevel(loggingLevel);
-			} else if (LOG_FILENAME_KEY.equals(event.getKey())) {
-				path = (String)event.getNewValue();
-			} else if (LOG_BACKUP_COUNT_KEY.equals(event.getKey())) {
-				RollingFileAppender appender = (RollingFileAppender)LOGGER.getAppender(EMFC_APPENDER_NAME);
-				if (appender != null) {
-					appender.setMaxBackupIndex(Integer.parseInt((String)event.getNewValue()));
-				}
-			} else if (LOG_FILE_MAX_SIZE_KEY.equals(event.getKey())) {
-				RollingFileAppender appender = (RollingFileAppender)LOGGER.getAppender(EMFC_APPENDER_NAME);
-				if (appender != null) {
-					appender.setMaximumFileSize(Integer.parseInt((String)event.getNewValue()) * MEGABYTE);
-				}
-			}
-			if (loggingLevel != null && !Level.OFF.equals(loggingLevel) && path != null
-					&& path.length() > 0) {
-				initFile();
-			}
-		}
-
-		/**
-		 * Create the logging file.
-		 */
-		private void initFile() {
-			RollingFileAppender appender = (RollingFileAppender)LOGGER.getAppender(EMFC_APPENDER_NAME);
-			if (appender == null) {
-				try {
-					EMFCompareRCPPlugin.getDefault().createLogAppender(path);
-				} catch (IOException e) {
-					// Force the value to be harmless
-					InstanceScope.INSTANCE.getNode(EMFCompareRCPPlugin.PLUGIN_ID).put(LOG_FILENAME_KEY, ""); //$NON-NLS-1$
-					getDefault().log(IStatus.ERROR,
-							EMFCompareRCPMessages.getString("logging.appender.error", path, e.getMessage())); //$NON-NLS-1$
-				}
-			} else {
-				appender.setFile(path);
+				EMFCompareLogger.setLevel((String)event.getNewValue());
 			}
 		}
 
diff --git a/plugins/org.eclipse.emf.compare.rcp/src/org/eclipse/emf/compare/rcp/internal/preferences/EMFComparePreferences.java b/plugins/org.eclipse.emf.compare.rcp/src/org/eclipse/emf/compare/rcp/internal/preferences/EMFComparePreferences.java
index f334086..20cec4d 100644
--- a/plugins/org.eclipse.emf.compare.rcp/src/org/eclipse/emf/compare/rcp/internal/preferences/EMFComparePreferences.java
+++ b/plugins/org.eclipse.emf.compare.rcp/src/org/eclipse/emf/compare/rcp/internal/preferences/EMFComparePreferences.java
@@ -46,42 +46,12 @@
 	/** Disabled adapter factories preference. */
 	public static final String DISABLED_ADAPTER_FACTORY = "org.eclipse.emf.compare.preference.disabled.adapter.factories"; //$NON-NLS-1$
 
-	/** Preference key for log4j file name. */
-	public static final String LOG_FILENAME_KEY = "org.eclipse.emf.compare.log.file.name"; //$NON-NLS-1$
-
-	/** Preference key for log4j log level. */
+	/** Preference key for log level. */
 	public static final String LOG_LEVEL_KEY = "org.eclipse.emf.compare.log.level"; //$NON-NLS-1$
 
-	/** Preference key for log4j backup file max number. */
-	public static final String LOG_BACKUP_COUNT_KEY = "org.eclipse.emf.compare.log.backup.count"; //$NON-NLS-1$
-
-	/** Preference key for log4j maximum file size. */
-	public static final String LOG_FILE_MAX_SIZE_KEY = "org.eclipse.emf.compare.log.file.max.size"; //$NON-NLS-1$
-
-	/** Log4j appender used by EMFCompare. */
-	public static final String EMFC_APPENDER_NAME = "EMFCFile"; //$NON-NLS-1$
-
-	/** Default log4j file name. */
-	public static final String LOG_FILE_DEFAULT = ""; //$NON-NLS-1$
-
-	/** Default log4j level. */
+	/** Default log level. */
 	public static final String LOG_LEVEL_DEFAULT = "OFF"; //$NON-NLS-1$
 
-	/** Default log4j backup file max number. */
-	public static final int LOG_BACKUP_DEFAULT = 10;
-
-	/** Default log4j maximum file size. */
-	public static final int LOG_FILE_SIZE_DEFAULT = 100;
-
-	/**
-	 * Pattern used for log4j logging.
-	 * 
-	 * <pre>
-	 * Date [Thread name] LEVEL 3.last.segments.of.logger.name <NDC Tag> - message\n
-	 * </pre>
-	 */
-	public static final String LOG_PATTERN = "%d{ISO8601} [%t] %-5p %c{3} %x - %m%n"; //$NON-NLS-1$
-
 	/**
 	 * Private constructor. Not to be called.
 	 */
diff --git a/plugins/org.eclipse.emf.compare.uml2/META-INF/MANIFEST.MF b/plugins/org.eclipse.emf.compare.uml2/META-INF/MANIFEST.MF
index 9af717a..bd33b12 100644
--- a/plugins/org.eclipse.emf.compare.uml2/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.emf.compare.uml2/META-INF/MANIFEST.MF
@@ -16,8 +16,7 @@
 Bundle-Activator: org.eclipse.emf.compare.uml2.internal.UMLComparePlugin
 Import-Package: com.google.common.base;version="[27.0.0,30.2.0)",
  com.google.common.collect;version="[27.0.0,30.2.0)",
- com.google.common.primitives;version="[27.0.0,30.2.0)",
- org.apache.log4j;version="1.2.15"
+ com.google.common.primitives;version="[27.0.0,30.2.0)"
 Export-Package: org.eclipse.emf.compare.uml2.internal;
   x-friends:="org.eclipse.emf.compare.uml2.edit,
    org.eclipse.emf.compare.uml2.rcp,
diff --git a/plugins/org.eclipse.emf.compare.uml2/src/org/eclipse/emf/compare/uml2/internal/merge/OpaqueElementBodyChangeMerger.java b/plugins/org.eclipse.emf.compare.uml2/src/org/eclipse/emf/compare/uml2/internal/merge/OpaqueElementBodyChangeMerger.java
index b1231bc..a9558af 100644
--- a/plugins/org.eclipse.emf.compare.uml2/src/org/eclipse/emf/compare/uml2/internal/merge/OpaqueElementBodyChangeMerger.java
+++ b/plugins/org.eclipse.emf.compare.uml2/src/org/eclipse/emf/compare/uml2/internal/merge/OpaqueElementBodyChangeMerger.java
@@ -26,7 +26,6 @@
 import java.util.List;
 import java.util.Set;
 
-import org.apache.log4j.Logger;
 import org.eclipse.emf.compare.AttributeChange;
 import org.eclipse.emf.compare.Comparison;
 import org.eclipse.emf.compare.Diff;
@@ -55,9 +54,6 @@
  */
 public class OpaqueElementBodyChangeMerger extends AttributeChangeMerger {
 
-	/** The logger. */
-	private static final Logger LOGGER = Logger.getLogger(OpaqueElementBodyChangeMerger.class);
-
 	@Override
 	public boolean isMergerFor(Diff target) {
 		return isOrRefinesOpaqueElementBodyChange(target);
@@ -148,12 +144,6 @@
 				return;
 			}
 
-			if (LOGGER.isDebugEnabled()) {
-				int refinedElementCount = bodyChange.getRefinedBy().size();
-				LOGGER.debug("accept(Diff, boolean) - " + refinedElementCount //$NON-NLS-1$
-						+ " refined diffs to merge for diff " + diff.hashCode()); //$NON-NLS-1$
-			}
-
 			switch (bodyChange.getKind()) {
 				case ADD:
 					acceptRefiningDiffs(bodyChange, rightToLeft);
@@ -189,12 +179,6 @@
 				return;
 			}
 
-			if (LOGGER.isDebugEnabled()) {
-				int refinedElementCount = bodyChange.getRefinedBy().size();
-				LOGGER.debug("Reject(Diff, boolean)" + refinedElementCount //$NON-NLS-1$
-						+ " refined diffs to merge for diff " + diff.hashCode()); //$NON-NLS-1$
-			}
-
 			switch (bodyChange.getKind()) {
 				case ADD:
 					rejectRefiningDiffs(bodyChange, rightToLeft);