aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--microbenchmark-template/src/main/java/org/sonar/microbenchmark/LoggingBenchmark.java79
-rw-r--r--plugins/sonar-email-notifications-plugin/src/main/java/org/sonar/plugins/emailnotifications/EmailNotificationChannel.java6
-rw-r--r--plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/lang/CoveragePerTestSensor.java6
-rw-r--r--plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/lang/DependencySensor.java6
-rw-r--r--plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/lang/MeasureSensor.java6
-rw-r--r--plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/lang/SymbolReferencesSensor.java6
-rw-r--r--plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/lang/SyntaxHighlightingSensor.java6
-rw-r--r--plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/lang/TestCaseSensor.java6
-rw-r--r--server/sonar-search/pom.xml2
-rw-r--r--server/sonar-server/pom.xml12
-rw-r--r--server/sonar-server/src/main/java/org/sonar/core/computation/dbcleaner/ProjectCleaner.java7
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/app/EmbeddedTomcat.java6
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/app/StartupLogs.java2
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/app/TomcatAccessLog.java6
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/app/Webapp.java6
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/charts/ChartFactory.java7
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/charts/ChartsServlet.java6
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/component/DefaultComponentFinder.java6
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/computation/ComputationService.java6
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/computation/ComputationThread.java7
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/computation/ComputationThreadLauncher.java9
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/computation/issue/ScmAccountCacheLoader.java6
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/computation/step/ParseReportStep.java6
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/db/BaseDao.java19
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/db/DatabaseChecker.java4
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/db/EmbeddedDatabase.java6
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/db/migrations/DatabaseMigrator.java6
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/db/migrations/SqlUtil.java3
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/db/migrations/v36/Progress.java7
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/db/migrations/v36/ViolationMigration.java7
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/debt/DebtModelBackup.java6
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/es/BulkIndexer.java6
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/es/IndexCreator.java6
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/issue/IssueBulkChangeService.java6
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/measure/MeasureFilterEngine.java6
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/notifications/NotificationCenter.java7
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/notifications/NotificationService.java6
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/platform/BackendCleanup.java4
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/platform/ClassLoaderUtils.java4
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/platform/DatabaseServerCompatibility.java4
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/platform/DefaultServerFileSystem.java6
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/platform/MasterServletFilter.java4
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/platform/Platform.java4
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/platform/RailsAppsDeployer.java7
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/platform/ServerIdGenerator.java4
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/platform/ServerImpl.java6
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/platform/ServerLifecycleNotifier.java6
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/platform/SwitchLogbackAppender.java93
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/platform/ws/RestartHandler.java7
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/plugins/PluginDownloader.java6
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/plugins/ServerPluginJarsInstaller.java6
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/plugins/ServerPluginRepository.java4
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/plugins/StaticResourcesServlet.java7
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/plugins/UpdateCenterClient.java6
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/qualityprofile/RegisterQualityProfiles.java6
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/rule/DeprecatedRulesDefinitionLoader.java6
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/rule/RegisterRules.java13
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/rule/ws/ActiveRuleCompleter.java6
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/search/BaseIndex.java31
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/search/Facets.java6
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/search/IndexQueue.java12
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/search/IndexSynchronizer.java7
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/source/HtmlTextDecorator.java4
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/startup/CopyRequirementsFromCharacteristicsToRules.java6
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/startup/LogServerId.java6
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/startup/RegisterDashboards.java6
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/startup/RegisterDebtModel.java7
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/startup/RegisterMetrics.java6
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/startup/RegisterNewMeasureFilters.java6
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/startup/RegisterPermissionTemplates.java7
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/startup/RenameDeprecatedPropertyKeys.java4
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/startup/ServerMetadataPersister.java4
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/ui/JRubyFacade.java8
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/ui/JRubyProfiling.java7
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/user/NewUserNotifier.java4
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/user/SecurityRealmFactory.java6
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/user/UserSession.java14
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/util/ProgressLogger.java7
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/ws/WebServiceEngine.java5
-rw-r--r--server/sonar-server/src/test/java/org/sonar/core/computation/dbcleaner/ProjectCleanerTest.java2
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/app/StartupLogsTest.java2
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/app/TomcatAccessLogTest.java2
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/computation/issue/ScmAccountCacheLoaderTest.java2
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/db/migrations/SqlUtilTest.java2
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/db/migrations/v36/ProgressTest.java6
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/platform/SwitchLogbackAppenderTest.java127
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/startup/ActivityServerIdTest.java2
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/tester/ServerTester.java6
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/util/ProgressLoggerTest.java6
-rw-r--r--server/sonar-server/src/test/resources/org/sonar/server/platform/SwitchLogbackAppenderTest/invalid-switch.xml14
-rw-r--r--server/sonar-server/src/test/resources/org/sonar/server/platform/SwitchLogbackAppenderTest/valid-switch.xml15
-rw-r--r--sonar-batch/pom.xml12
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/debt/DebtModelProvider.java6
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/rule/RulesProvider.java6
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/scan/LastLineHashes.java6
-rw-r--r--sonar-core/src/main/java/org/sonar/core/computation/dbcleaner/DefaultPurgeTask.java12
-rw-r--r--sonar-core/src/main/java/org/sonar/core/purge/PurgeProfiler.java2
-rw-r--r--sonar-core/src/test/java/org/sonar/core/computation/dbcleaner/DefaultPurgeTaskTest.java8
-rw-r--r--sonar-core/src/test/java/org/sonar/core/purge/PurgeProfilerTest.java2
-rw-r--r--sonar-deprecated/src/main/java/org/sonar/api/rules/AnnotationRuleParser.java6
-rw-r--r--sonar-duplications/src/test/java/org/sonar/duplications/DuplicationsTestUtil.java9
-rw-r--r--sonar-plugin-api/pom.xml48
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/batch/maven/MavenUtils.java4
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/platform/ComponentKeys.java6
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/resources/Languages.java6
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/rules/Violation.java4
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/server/rule/RulesDefinition.java4
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/server/rule/RulesDefinitionAnnotationLoader.java7
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/server/ws/internal/ValidatingRequest.java4
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/utils/HttpDownloader.java4
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/utils/LocalizedMessages.java18
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/utils/TimeProfiler.java17
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/utils/ValidationMessages.java2
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/utils/XpathParser.java6
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/utils/command/CommandExecutor.java6
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/utils/log/BaseLogger.java169
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/utils/log/ConsoleFormatter.java39
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/utils/log/ConsoleLogger.java148
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/utils/log/ConsoleLoggers.java40
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/utils/log/ListInterceptor.java57
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/utils/log/LogInterceptor.java35
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/utils/log/LogTester.java100
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/utils/log/LogbackLogger.java124
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/utils/log/LogbackLoggers.java46
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/utils/log/Logger.java89
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/utils/log/Loggers.java53
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/utils/log/NullInterceptor.java56
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/utils/log/internal/InMemoryLogger.java88
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/utils/log/internal/Slf4jLoggers.java54
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/utils/log/package-info.java25
-rw-r--r--sonar-plugin-api/src/test/java/org/sonar/api/platform/ComponentKeysTest.java6
-rw-r--r--sonar-plugin-api/src/test/java/org/sonar/api/utils/TimeProfilerTest.java2
-rw-r--r--sonar-plugin-api/src/test/java/org/sonar/api/utils/ValidationMessagesTest.java7
-rw-r--r--sonar-plugin-api/src/test/java/org/sonar/api/utils/log/ConsoleFormatterTest.java41
-rw-r--r--sonar-plugin-api/src/test/java/org/sonar/api/utils/log/ConsoleLoggerTest.java82
-rw-r--r--sonar-plugin-api/src/test/java/org/sonar/api/utils/log/ConsoleLoggersTest.java47
-rw-r--r--sonar-plugin-api/src/test/java/org/sonar/api/utils/log/LogTesterTest.java61
-rw-r--r--sonar-plugin-api/src/test/java/org/sonar/api/utils/log/LogbackLoggerTest.java69
-rw-r--r--sonar-plugin-api/src/test/java/org/sonar/api/utils/log/LoggersTest.java37
-rw-r--r--sonar-plugin-api/src/test/java/org/sonar/api/utils/log/NullInterceptorTest.java37
140 files changed, 1868 insertions, 717 deletions
diff --git a/microbenchmark-template/src/main/java/org/sonar/microbenchmark/LoggingBenchmark.java b/microbenchmark-template/src/main/java/org/sonar/microbenchmark/LoggingBenchmark.java
new file mode 100644
index 00000000000..fa836bd72b6
--- /dev/null
+++ b/microbenchmark-template/src/main/java/org/sonar/microbenchmark/LoggingBenchmark.java
@@ -0,0 +1,79 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.sonar.microbenchmark;
+
+import org.apache.commons.lang.StringUtils;
+import org.openjdk.jmh.annotations.Benchmark;
+import org.openjdk.jmh.annotations.BenchmarkMode;
+import org.openjdk.jmh.annotations.Fork;
+import org.openjdk.jmh.annotations.Measurement;
+import org.openjdk.jmh.annotations.Mode;
+import org.openjdk.jmh.annotations.OutputTimeUnit;
+import org.openjdk.jmh.annotations.Scope;
+import org.openjdk.jmh.annotations.State;
+import org.openjdk.jmh.annotations.Warmup;
+import org.openjdk.jmh.runner.Runner;
+import org.openjdk.jmh.runner.RunnerException;
+import org.openjdk.jmh.runner.options.Options;
+import org.openjdk.jmh.runner.options.OptionsBuilder;
+import org.slf4j.Logger;
+
+import java.util.Date;
+import java.util.concurrent.TimeUnit;
+
+@OutputTimeUnit(TimeUnit.MILLISECONDS)
+@State(Scope.Thread)
+@Fork(1)
+@Warmup(iterations = 3)
+@Measurement(iterations = 3)
+@BenchmarkMode(Mode.Throughput)
+public class LoggingBenchmark {
+
+ private Logger logger1 = org.slf4j.LoggerFactory.getLogger("microbenchmark1");
+ private Logger logger2 = org.slf4j.LoggerFactory.getLogger("microbenchmark2");
+
+ @Benchmark
+ public void logback_converters() throws Exception {
+ logger1.warn("many arguments {} {} {} {} {} {}", "foo", 7, 4.5, 1234567890L, true, new Date());
+ }
+
+ @Benchmark
+ public void string_converters() throws Exception {
+ logger2.warn(String.format("many arguments %s %d %f %d %b %tc", "foo", 7, 4.5, 1234567890L, true, new Date()));
+ }
+
+ @Benchmark
+ public void logback_no_args() throws Exception {
+ logger1.warn("no args");
+ StringUtils.replaceOnce()
+ }
+
+
+ /**
+ * You can this benchmark with maven command-line (see run.sh) or by executing this method
+ * in IDE
+ */
+ public static void main(String[] args) throws RunnerException {
+ Options opt = new OptionsBuilder()
+ .include(LoggingBenchmark.class.getSimpleName())
+ .build();
+ new Runner(opt).run();
+ }
+}
diff --git a/plugins/sonar-email-notifications-plugin/src/main/java/org/sonar/plugins/emailnotifications/EmailNotificationChannel.java b/plugins/sonar-email-notifications-plugin/src/main/java/org/sonar/plugins/emailnotifications/EmailNotificationChannel.java
index 5ae23c21b22..a11154370cb 100644
--- a/plugins/sonar-email-notifications-plugin/src/main/java/org/sonar/plugins/emailnotifications/EmailNotificationChannel.java
+++ b/plugins/sonar-email-notifications-plugin/src/main/java/org/sonar/plugins/emailnotifications/EmailNotificationChannel.java
@@ -22,14 +22,14 @@ package org.sonar.plugins.emailnotifications;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.SimpleEmail;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.sonar.api.config.EmailSettings;
import org.sonar.api.database.model.User;
import org.sonar.api.notifications.Notification;
import org.sonar.api.notifications.NotificationChannel;
import org.sonar.api.security.UserFinder;
import org.sonar.api.utils.SonarException;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
import org.sonar.plugins.emailnotifications.api.EmailMessage;
import org.sonar.plugins.emailnotifications.api.EmailTemplate;
@@ -48,7 +48,7 @@ import java.net.URL;
*/
public class EmailNotificationChannel extends NotificationChannel {
- private static final Logger LOG = LoggerFactory.getLogger(EmailNotificationChannel.class);
+ private static final Logger LOG = Loggers.get(EmailNotificationChannel.class);
/**
* @see org.apache.commons.mail.Email#setSocketConnectionTimeout(int)
diff --git a/plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/lang/CoveragePerTestSensor.java b/plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/lang/CoveragePerTestSensor.java
index e9963f83845..fcdb738e46d 100644
--- a/plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/lang/CoveragePerTestSensor.java
+++ b/plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/lang/CoveragePerTestSensor.java
@@ -22,14 +22,14 @@ package org.sonar.xoo.lang;
import com.google.common.base.Splitter;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.sonar.api.batch.fs.FilePredicates;
import org.sonar.api.batch.fs.FileSystem;
import org.sonar.api.batch.fs.InputFile;
import org.sonar.api.batch.sensor.Sensor;
import org.sonar.api.batch.sensor.SensorContext;
import org.sonar.api.batch.sensor.SensorDescriptor;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
import org.sonar.xoo.Xoo;
import java.io.File;
@@ -43,7 +43,7 @@ import java.util.List;
*/
public class CoveragePerTestSensor implements Sensor {
- private static final Logger LOG = LoggerFactory.getLogger(CoveragePerTestSensor.class);
+ private static final Logger LOG = Loggers.get(CoveragePerTestSensor.class);
private static final String COVER_PER_TEST_EXTENSION = ".coveragePerTest";
diff --git a/plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/lang/DependencySensor.java b/plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/lang/DependencySensor.java
index a1012002896..1c558ff24c6 100644
--- a/plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/lang/DependencySensor.java
+++ b/plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/lang/DependencySensor.java
@@ -22,14 +22,14 @@ package org.sonar.xoo.lang;
import com.google.common.base.Splitter;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.sonar.api.batch.fs.FilePredicates;
import org.sonar.api.batch.fs.FileSystem;
import org.sonar.api.batch.fs.InputFile;
import org.sonar.api.batch.sensor.Sensor;
import org.sonar.api.batch.sensor.SensorContext;
import org.sonar.api.batch.sensor.SensorDescriptor;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
import org.sonar.xoo.Xoo;
import java.io.File;
@@ -42,7 +42,7 @@ import java.util.List;
*/
public class DependencySensor implements Sensor {
- private static final Logger LOG = LoggerFactory.getLogger(DependencySensor.class);
+ private static final Logger LOG = Loggers.get(DependencySensor.class);
private static final String DEPS_EXTENSION = ".deps";
diff --git a/plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/lang/MeasureSensor.java b/plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/lang/MeasureSensor.java
index a890b63ac9d..7469d9ff2cf 100644
--- a/plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/lang/MeasureSensor.java
+++ b/plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/lang/MeasureSensor.java
@@ -21,14 +21,14 @@ package org.sonar.xoo.lang;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.sonar.api.batch.fs.InputFile;
import org.sonar.api.batch.measure.MetricFinder;
import org.sonar.api.batch.sensor.Sensor;
import org.sonar.api.batch.sensor.SensorContext;
import org.sonar.api.batch.sensor.SensorDescriptor;
import org.sonar.api.batch.sensor.measure.NewMeasure;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
import org.sonar.xoo.Xoo;
import java.io.File;
@@ -41,7 +41,7 @@ import java.util.List;
*/
public class MeasureSensor implements Sensor {
- private static final Logger LOG = LoggerFactory.getLogger(MeasureSensor.class);
+ private static final Logger LOG = Loggers.get(MeasureSensor.class);
private static final String MEASURES_EXTENSION = ".measures";
diff --git a/plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/lang/SymbolReferencesSensor.java b/plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/lang/SymbolReferencesSensor.java
index 8d14771bab4..5cc2ea832f9 100644
--- a/plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/lang/SymbolReferencesSensor.java
+++ b/plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/lang/SymbolReferencesSensor.java
@@ -22,14 +22,14 @@ package org.sonar.xoo.lang;
import com.google.common.base.Splitter;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.sonar.api.batch.fs.InputFile;
import org.sonar.api.batch.sensor.Sensor;
import org.sonar.api.batch.sensor.SensorContext;
import org.sonar.api.batch.sensor.SensorDescriptor;
import org.sonar.api.batch.sensor.symbol.Symbol;
import org.sonar.api.batch.sensor.symbol.SymbolTableBuilder;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
import org.sonar.xoo.Xoo;
import java.io.File;
@@ -42,7 +42,7 @@ import java.util.List;
*/
public class SymbolReferencesSensor implements Sensor {
- private static final Logger LOG = LoggerFactory.getLogger(SymbolReferencesSensor.class);
+ private static final Logger LOG = Loggers.get(SymbolReferencesSensor.class);
private static final String SYMBOL_EXTENSION = ".symbol";
diff --git a/plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/lang/SyntaxHighlightingSensor.java b/plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/lang/SyntaxHighlightingSensor.java
index 004c186b208..549a655573e 100644
--- a/plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/lang/SyntaxHighlightingSensor.java
+++ b/plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/lang/SyntaxHighlightingSensor.java
@@ -22,14 +22,14 @@ package org.sonar.xoo.lang;
import com.google.common.base.Splitter;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.sonar.api.batch.fs.InputFile;
import org.sonar.api.batch.sensor.Sensor;
import org.sonar.api.batch.sensor.SensorContext;
import org.sonar.api.batch.sensor.SensorDescriptor;
import org.sonar.api.batch.sensor.highlighting.HighlightingBuilder;
import org.sonar.api.batch.sensor.highlighting.TypeOfText;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
import org.sonar.xoo.Xoo;
import java.io.File;
@@ -42,7 +42,7 @@ import java.util.List;
*/
public class SyntaxHighlightingSensor implements Sensor {
- private static final Logger LOG = LoggerFactory.getLogger(SyntaxHighlightingSensor.class);
+ private static final Logger LOG = Loggers.get(SyntaxHighlightingSensor.class);
private static final String HIGHLIGHTING_EXTENSION = ".highlighting";
diff --git a/plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/lang/TestCaseSensor.java b/plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/lang/TestCaseSensor.java
index a406a20a9ca..f7b38976489 100644
--- a/plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/lang/TestCaseSensor.java
+++ b/plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/lang/TestCaseSensor.java
@@ -22,8 +22,6 @@ package org.sonar.xoo.lang;
import com.google.common.base.Splitter;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.sonar.api.batch.fs.FilePredicates;
import org.sonar.api.batch.fs.FileSystem;
import org.sonar.api.batch.fs.InputFile;
@@ -31,6 +29,8 @@ import org.sonar.api.batch.sensor.Sensor;
import org.sonar.api.batch.sensor.SensorContext;
import org.sonar.api.batch.sensor.SensorDescriptor;
import org.sonar.api.batch.sensor.test.TestCaseExecution;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
import org.sonar.xoo.Xoo;
import java.io.File;
@@ -43,7 +43,7 @@ import java.util.List;
*/
public class TestCaseSensor implements Sensor {
- private static final Logger LOG = LoggerFactory.getLogger(TestCaseSensor.class);
+ private static final Logger LOG = Loggers.get(TestCaseSensor.class);
private static final String TESTPLAN_EXTENSION = ".testplan";
diff --git a/server/sonar-search/pom.xml b/server/sonar-search/pom.xml
index 9f836ef23ba..48b37cee245 100644
--- a/server/sonar-search/pom.xml
+++ b/server/sonar-search/pom.xml
@@ -37,12 +37,10 @@
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
- <scope>provided</scope>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
- <scope>provided</scope>
</dependency>
<!-- testing -->
diff --git a/server/sonar-server/pom.xml b/server/sonar-server/pom.xml
index 5f76c8e1f50..12419aa2142 100644
--- a/server/sonar-server/pom.xml
+++ b/server/sonar-server/pom.xml
@@ -17,6 +17,18 @@
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>jcl-over-slf4j</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>log4j-over-slf4j</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
<artifactId>jul-to-slf4j</artifactId>
</dependency>
<dependency>
diff --git a/server/sonar-server/src/main/java/org/sonar/core/computation/dbcleaner/ProjectCleaner.java b/server/sonar-server/src/main/java/org/sonar/core/computation/dbcleaner/ProjectCleaner.java
index dd9a2d955ec..6c341d54e0e 100644
--- a/server/sonar-server/src/main/java/org/sonar/core/computation/dbcleaner/ProjectCleaner.java
+++ b/server/sonar-server/src/main/java/org/sonar/core/computation/dbcleaner/ProjectCleaner.java
@@ -20,12 +20,12 @@
package org.sonar.core.computation.dbcleaner;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.sonar.api.CoreProperties;
import org.sonar.api.ServerComponent;
import org.sonar.api.config.Settings;
import org.sonar.api.utils.TimeUtils;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
import org.sonar.core.computation.dbcleaner.period.DefaultPeriodCleaner;
import org.sonar.core.persistence.DbSession;
import org.sonar.core.purge.IdUuidPair;
@@ -37,12 +37,13 @@ import org.sonar.server.issue.index.IssueIndex;
import org.sonar.server.properties.ProjectSettingsFactory;
import javax.annotation.Nullable;
+
import java.util.Date;
import static org.sonar.core.purge.PurgeConfiguration.newDefaultPurgeConfiguration;
public class ProjectCleaner implements ServerComponent {
- private static final Logger LOG = LoggerFactory.getLogger(ProjectCleaner.class);
+ private static final Logger LOG = Loggers.get(ProjectCleaner.class);
private final PurgeProfiler profiler;
private final PurgeListener purgeListener;
diff --git a/server/sonar-server/src/main/java/org/sonar/server/app/EmbeddedTomcat.java b/server/sonar-server/src/main/java/org/sonar/server/app/EmbeddedTomcat.java
index 89b3a09377a..1a308b1bfb1 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/app/EmbeddedTomcat.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/app/EmbeddedTomcat.java
@@ -24,7 +24,7 @@ import org.apache.catalina.LifecycleException;
import org.apache.catalina.core.StandardContext;
import org.apache.catalina.startup.Tomcat;
import org.apache.commons.io.FileUtils;
-import org.slf4j.LoggerFactory;
+import org.sonar.api.utils.log.Loggers;
import org.sonar.process.ProcessConstants;
import org.sonar.process.Props;
@@ -60,7 +60,7 @@ class EmbeddedTomcat {
webappContext = Webapp.configure(tomcat, props);
try {
tomcat.start();
- new StartupLogs(props, LoggerFactory.getLogger(getClass())).log(tomcat);
+ new StartupLogs(props, Loggers.get(getClass())).log(tomcat);
} catch (LifecycleException e) {
Throwables.propagate(e);
}
@@ -95,7 +95,7 @@ class EmbeddedTomcat {
tomcat.stop();
tomcat.destroy();
} catch (Exception e) {
- LoggerFactory.getLogger(EmbeddedTomcat.class).error("Fail to stop web server", e);
+ Loggers.get(EmbeddedTomcat.class).error("Fail to stop web server", e);
}
}
FileUtils.deleteQuietly(tomcatBasedir());
diff --git a/server/sonar-server/src/main/java/org/sonar/server/app/StartupLogs.java b/server/sonar-server/src/main/java/org/sonar/server/app/StartupLogs.java
index 7fcf0295552..abbce664d8e 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/app/StartupLogs.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/app/StartupLogs.java
@@ -23,7 +23,7 @@ import org.apache.catalina.connector.Connector;
import org.apache.catalina.startup.Tomcat;
import org.apache.commons.lang.StringUtils;
import org.apache.coyote.http11.AbstractHttp11JsseProtocol;
-import org.slf4j.Logger;
+import org.sonar.api.utils.log.Logger;
import org.sonar.process.Props;
class StartupLogs {
diff --git a/server/sonar-server/src/main/java/org/sonar/server/app/TomcatAccessLog.java b/server/sonar-server/src/main/java/org/sonar/server/app/TomcatAccessLog.java
index 69b80a51d69..eb34606780f 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/app/TomcatAccessLog.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/app/TomcatAccessLog.java
@@ -24,8 +24,8 @@ import ch.qos.logback.core.FileAppender;
import org.apache.catalina.LifecycleEvent;
import org.apache.catalina.LifecycleListener;
import org.apache.catalina.startup.Tomcat;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
import org.sonar.process.LogbackHelper;
import org.sonar.process.Props;
@@ -36,7 +36,7 @@ class TomcatAccessLog {
void configure(Tomcat tomcat, Props props) {
tomcat.setSilent(true);
- tomcat.getService().addLifecycleListener(new LifecycleLogger(LoggerFactory.getLogger(TomcatAccessLog.class)));
+ tomcat.getService().addLifecycleListener(new LifecycleLogger(Loggers.get(TomcatAccessLog.class)));
configureLogbackAccess(tomcat, props);
}
diff --git a/server/sonar-server/src/main/java/org/sonar/server/app/Webapp.java b/server/sonar-server/src/main/java/org/sonar/server/app/Webapp.java
index b32b009896f..f2be0473d45 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/app/Webapp.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/app/Webapp.java
@@ -23,7 +23,7 @@ import org.apache.catalina.Context;
import org.apache.catalina.core.StandardContext;
import org.apache.catalina.startup.Tomcat;
import org.apache.commons.lang.StringUtils;
-import org.slf4j.LoggerFactory;
+import org.sonar.api.utils.log.Loggers;
import org.sonar.process.ProcessConstants;
import org.sonar.process.Props;
@@ -90,7 +90,7 @@ class Webapp {
if (props.valueAsBoolean("sonar.web.dev", false)) {
context.addParameter(RAILS_ENV, "development");
context.addParameter(JRUBY_MAX_RUNTIMES, "3");
- LoggerFactory.getLogger(Webapp.class).warn("WEB DEVELOPMENT MODE IS ENABLED - DO NOT USE FOR PRODUCTION USAGE");
+ Loggers.get(Webapp.class).warn("WEB DEVELOPMENT MODE IS ENABLED - DO NOT USE FOR PRODUCTION USAGE");
} else {
context.addParameter(RAILS_ENV, "production");
context.addParameter(JRUBY_MAX_RUNTIMES, "1");
@@ -102,7 +102,7 @@ class Webapp {
if (StringUtils.isEmpty(webDir)) {
webDir = new File(props.value(ProcessConstants.PATH_HOME), "web").getAbsolutePath();
}
- LoggerFactory.getLogger(Webapp.class).info(String.format("Webapp directory: %s", webDir));
+ Loggers.get(Webapp.class).info(String.format("Webapp directory: %s", webDir));
return webDir;
}
}
diff --git a/server/sonar-server/src/main/java/org/sonar/server/charts/ChartFactory.java b/server/sonar-server/src/main/java/org/sonar/server/charts/ChartFactory.java
index 7035fd7e9f1..0c80acb0ef3 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/charts/ChartFactory.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/charts/ChartFactory.java
@@ -20,16 +20,17 @@
package org.sonar.server.charts;
import com.google.common.collect.Maps;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.sonar.api.ServerComponent;
import org.sonar.api.charts.Chart;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
import javax.annotation.CheckForNull;
+
import java.util.Map;
public final class ChartFactory implements ServerComponent {
- private static final Logger LOG = LoggerFactory.getLogger(ChartFactory.class);
+ private static final Logger LOG = Loggers.get(ChartFactory.class);
private final Map<String, Chart> chartsByKey = Maps.newHashMap();
diff --git a/server/sonar-server/src/main/java/org/sonar/server/charts/ChartsServlet.java b/server/sonar-server/src/main/java/org/sonar/server/charts/ChartsServlet.java
index 2994d371222..5a6cc9ae262 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/charts/ChartsServlet.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/charts/ChartsServlet.java
@@ -22,10 +22,10 @@ package org.sonar.server.charts;
import com.google.common.collect.Maps;
import com.google.common.io.Closeables;
import org.jfree.chart.encoders.KeypointPNGEncoderAdapter;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.sonar.api.charts.Chart;
import org.sonar.api.charts.ChartParameters;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
import org.sonar.server.charts.deprecated.BarChart;
import org.sonar.server.charts.deprecated.BaseChartWeb;
import org.sonar.server.charts.deprecated.CustomBarChart;
@@ -47,7 +47,7 @@ import java.util.Map;
public class ChartsServlet extends HttpServlet {
- private static final Logger LOG = LoggerFactory.getLogger(ChartsServlet.class);
+ private static final Logger LOG = Loggers.get(ChartsServlet.class);
private static final long serialVersionUID = 669857447198433893L;
@Override
diff --git a/server/sonar-server/src/main/java/org/sonar/server/component/DefaultComponentFinder.java b/server/sonar-server/src/main/java/org/sonar/server/component/DefaultComponentFinder.java
index 2e532ee99ea..409cbc84208 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/component/DefaultComponentFinder.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/component/DefaultComponentFinder.java
@@ -22,10 +22,10 @@ package org.sonar.server.component;
import com.google.common.base.Predicate;
import com.google.common.collect.Iterables;
import com.google.common.collect.Sets;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.sonar.api.component.Component;
import org.sonar.api.utils.Paging;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
import java.util.Collection;
import java.util.List;
@@ -38,7 +38,7 @@ import static com.google.common.collect.Lists.newArrayList;
*/
public class DefaultComponentFinder {
- private static final Logger LOG = LoggerFactory.getLogger(DefaultComponentFinder.class);
+ private static final Logger LOG = Loggers.get(DefaultComponentFinder.class);
public DefaultComponentQueryResult find(ComponentQuery query, List<Component> allComponents) {
LOG.debug("ComponentQuery : {}", query);
diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/ComputationService.java b/server/sonar-server/src/main/java/org/sonar/server/computation/ComputationService.java
index 2f8f2cce6ca..b0f60f1d6b7 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/computation/ComputationService.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/computation/ComputationService.java
@@ -22,11 +22,11 @@ package org.sonar.server.computation;
import com.google.common.base.Throwables;
import org.apache.commons.lang.ArrayUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.sonar.api.ServerComponent;
import org.sonar.api.utils.System2;
import org.sonar.api.utils.TimeProfiler;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
import org.sonar.core.activity.Activity;
import org.sonar.core.component.ComponentDto;
import org.sonar.core.computation.db.AnalysisReportDto;
@@ -39,7 +39,7 @@ import org.sonar.server.db.DbClient;
public class ComputationService implements ServerComponent {
- private static final Logger LOG = LoggerFactory.getLogger(ComputationService.class);
+ private static final Logger LOG = Loggers.get(ComputationService.class);
private final DbClient dbClient;
private final ComputationSteps steps;
diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/ComputationThread.java b/server/sonar-server/src/main/java/org/sonar/server/computation/ComputationThread.java
index eecd6613e20..07c9a23e3a0 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/computation/ComputationThread.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/computation/ComputationThread.java
@@ -20,9 +20,10 @@
package org.sonar.server.computation;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+
import org.sonar.api.platform.ComponentContainer;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
import org.sonar.core.computation.db.AnalysisReportDto;
import org.sonar.server.computation.step.ComputationSteps;
import org.sonar.server.platform.Platform;
@@ -31,7 +32,7 @@ import org.sonar.server.platform.Platform;
* This thread pops queue of reports and processes the report if present
*/
public class ComputationThread implements Runnable {
- private static final Logger LOG = LoggerFactory.getLogger(ComputationThread.class);
+ private static final Logger LOG = Loggers.get(ComputationThread.class);
private final AnalysisReportQueue queue;
diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/ComputationThreadLauncher.java b/server/sonar-server/src/main/java/org/sonar/server/computation/ComputationThreadLauncher.java
index 5354930c3a7..c19b80a0a7b 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/computation/ComputationThreadLauncher.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/computation/ComputationThreadLauncher.java
@@ -45,7 +45,7 @@ public class ComputationThreadLauncher implements Startable, ServerComponent, Se
public ComputationThreadLauncher(AnalysisReportQueue queue) {
this.queue = queue;
- this.executorService = Executors.newSingleThreadScheduledExecutor(threadFactoryWithSpecificNameForLogging());
+ this.executorService = Executors.newSingleThreadScheduledExecutor(newThreadFactory());
this.delayBetweenTasks = 10;
this.delayForFirstStart = 0;
@@ -55,7 +55,7 @@ public class ComputationThreadLauncher implements Startable, ServerComponent, Se
@VisibleForTesting
ComputationThreadLauncher(AnalysisReportQueue queue, long delayForFirstStart, long delayBetweenTasks, TimeUnit timeUnit) {
this.queue = queue;
- this.executorService = Executors.newSingleThreadScheduledExecutor(threadFactoryWithSpecificNameForLogging());
+ this.executorService = Executors.newSingleThreadScheduledExecutor(newThreadFactory());
this.delayBetweenTasks = delayBetweenTasks;
this.delayForFirstStart = delayForFirstStart;
@@ -81,10 +81,7 @@ public class ComputationThreadLauncher implements Startable, ServerComponent, Se
executorService.scheduleAtFixedRate(new ComputationThread(queue), delayForFirstStart, delayBetweenTasks, timeUnit);
}
- /**
- * @see org.sonar.server.platform.SwitchLogbackAppender
- */
- private ThreadFactory threadFactoryWithSpecificNameForLogging() {
+ private ThreadFactory newThreadFactory() {
return new ThreadFactoryBuilder()
.setNameFormat(THREAD_NAME_PREFIX + "%d").setPriority(Thread.MIN_PRIORITY).build();
}
diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/issue/ScmAccountCacheLoader.java b/server/sonar-server/src/main/java/org/sonar/server/computation/issue/ScmAccountCacheLoader.java
index 4f6d1aeb6d3..2d51c5b5526 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/computation/issue/ScmAccountCacheLoader.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/computation/issue/ScmAccountCacheLoader.java
@@ -23,8 +23,8 @@ import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Function;
import com.google.common.base.Joiner;
import com.google.common.collect.Collections2;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
import org.sonar.server.user.index.UserDoc;
import org.sonar.server.user.index.UserIndex;
import org.sonar.server.util.cache.CacheLoader;
@@ -42,7 +42,7 @@ public class ScmAccountCacheLoader implements CacheLoader<String, String> {
private final UserIndex index;
public ScmAccountCacheLoader(UserIndex index) {
- this(index, LoggerFactory.getLogger(ScmAccountCacheLoader.class));
+ this(index, Loggers.get(ScmAccountCacheLoader.class));
}
@VisibleForTesting
diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/step/ParseReportStep.java b/server/sonar-server/src/main/java/org/sonar/server/computation/step/ParseReportStep.java
index 6df408a0aac..042f13e7c4a 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/computation/step/ParseReportStep.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/computation/step/ParseReportStep.java
@@ -21,10 +21,10 @@
package org.sonar.server.computation.step;
import org.apache.commons.io.FileUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.sonar.api.resources.Qualifiers;
import org.sonar.api.utils.TempFolder;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
import org.sonar.batch.protocol.output.BatchOutputReader;
import org.sonar.batch.protocol.output.BatchReport;
import org.sonar.core.computation.db.AnalysisReportDto;
@@ -38,7 +38,7 @@ import java.io.File;
public class ParseReportStep implements ComputationStep {
- private static final Logger LOG = LoggerFactory.getLogger(ParseReportStep.class);
+ private static final Logger LOG = Loggers.get(ParseReportStep.class);
private final IssueComputation issueComputation;
private final DbClient dbClient;
diff --git a/server/sonar-server/src/main/java/org/sonar/server/db/BaseDao.java b/server/sonar-server/src/main/java/org/sonar/server/db/BaseDao.java
index 8a934738231..1fe29ad23c4 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/db/BaseDao.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/db/BaseDao.java
@@ -24,23 +24,32 @@ import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
import org.apache.ibatis.session.ResultContext;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.sonar.api.utils.System2;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
import org.sonar.core.persistence.DaoComponent;
import org.sonar.core.persistence.DbSession;
import org.sonar.core.persistence.Dto;
import org.sonar.server.exceptions.NotFoundException;
import org.sonar.server.search.DbSynchronizationHandler;
import org.sonar.server.search.IndexDefinition;
-import org.sonar.server.search.action.*;
+import org.sonar.server.search.action.DeleteKey;
+import org.sonar.server.search.action.DeleteNestedItem;
+import org.sonar.server.search.action.InsertDto;
+import org.sonar.server.search.action.RefreshIndex;
+import org.sonar.server.search.action.UpsertDto;
+import org.sonar.server.search.action.UpsertNestedItem;
import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
import java.io.Serializable;
import java.sql.Timestamp;
-import java.util.*;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
import static com.google.common.collect.Lists.newArrayList;
import static com.google.common.collect.Maps.newHashMap;
@@ -115,7 +124,7 @@ import static com.google.common.collect.Maps.newHashMap;
*/
public abstract class BaseDao<MAPPER, DTO extends Dto<KEY>, KEY extends Serializable> implements Dao<DTO, KEY>, DaoComponent {
- private static final Logger LOGGER = LoggerFactory.getLogger(BaseDao.class);
+ private static final Logger LOGGER = Loggers.get(BaseDao.class);
protected IndexDefinition indexDefinition;
private Class<MAPPER> mapperClass;
diff --git a/server/sonar-server/src/main/java/org/sonar/server/db/DatabaseChecker.java b/server/sonar-server/src/main/java/org/sonar/server/db/DatabaseChecker.java
index 1b3fc5aeedd..81bd8088099 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/db/DatabaseChecker.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/db/DatabaseChecker.java
@@ -23,7 +23,7 @@ import com.google.common.base.Throwables;
import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.lang.StringUtils;
import org.picocontainer.Startable;
-import org.slf4j.LoggerFactory;
+import org.sonar.api.utils.log.Loggers;
import org.sonar.api.ServerComponent;
import org.sonar.core.persistence.Database;
import org.sonar.core.persistence.dialect.H2;
@@ -44,7 +44,7 @@ public class DatabaseChecker implements ServerComponent, Startable {
public void start() {
try {
if (H2.ID.equals(db.getDialect().getId())) {
- LoggerFactory.getLogger(DatabaseChecker.class).warn("H2 database should be used for evaluation purpose only");
+ Loggers.get(DatabaseChecker.class).warn("H2 database should be used for evaluation purpose only");
} else if (Oracle.ID.equals(db.getDialect().getId())) {
checkOracleDriverVersion();
}
diff --git a/server/sonar-server/src/main/java/org/sonar/server/db/EmbeddedDatabase.java b/server/sonar-server/src/main/java/org/sonar/server/db/EmbeddedDatabase.java
index 51d8b6dd593..ef0ab6c5ed1 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/db/EmbeddedDatabase.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/db/EmbeddedDatabase.java
@@ -24,11 +24,11 @@ import org.apache.commons.lang.StringUtils;
import org.h2.Driver;
import org.h2.tools.Server;
import org.picocontainer.Startable;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.sonar.api.config.Settings;
import org.sonar.api.database.DatabaseProperties;
import org.sonar.api.utils.SonarException;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
import org.sonar.process.ProcessConstants;
import java.io.File;
@@ -36,7 +36,7 @@ import java.sql.DriverManager;
import java.sql.SQLException;
public class EmbeddedDatabase implements Startable {
- private static final Logger LOG = LoggerFactory.getLogger(EmbeddedDatabase.class);
+ private static final Logger LOG = Loggers.get(EmbeddedDatabase.class);
private final Settings settings;
private Server server;
diff --git a/server/sonar-server/src/main/java/org/sonar/server/db/migrations/DatabaseMigrator.java b/server/sonar-server/src/main/java/org/sonar/server/db/migrations/DatabaseMigrator.java
index 9b69826fcd4..e13c246802d 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/db/migrations/DatabaseMigrator.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/db/migrations/DatabaseMigrator.java
@@ -23,7 +23,7 @@ import com.google.common.annotations.VisibleForTesting;
import org.apache.commons.dbutils.DbUtils;
import org.apache.ibatis.session.SqlSession;
import org.picocontainer.Startable;
-import org.slf4j.LoggerFactory;
+import org.sonar.api.utils.log.Loggers;
import org.sonar.api.ServerComponent;
import org.sonar.api.platform.ServerUpgradeStatus;
import org.sonar.core.persistence.DdlUtils;
@@ -70,7 +70,7 @@ public class DatabaseMigrator implements ServerComponent, Startable {
@VisibleForTesting
boolean createDatabase() {
if (DdlUtils.supportsDialect(dbClient.database().getDialect().getId()) && serverUpgradeStatus.isFreshInstall()) {
- LoggerFactory.getLogger(getClass()).info("Create database");
+ Loggers.get(getClass()).info("Create database");
SqlSession session = dbClient.openSession(false);
Connection connection = null;
try {
@@ -96,7 +96,7 @@ public class DatabaseMigrator implements ServerComponent, Startable {
} catch (Exception e) {
// duplication between log and exception because webapp does not correctly log initial stacktrace
String msg = "Fail to execute database migration: " + className;
- LoggerFactory.getLogger(getClass()).error(msg, e);
+ Loggers.get(getClass()).error(msg, e);
throw new IllegalStateException(msg, e);
}
}
diff --git a/server/sonar-server/src/main/java/org/sonar/server/db/migrations/SqlUtil.java b/server/sonar-server/src/main/java/org/sonar/server/db/migrations/SqlUtil.java
index 0a02368b43d..17b0f16b1de 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/db/migrations/SqlUtil.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/db/migrations/SqlUtil.java
@@ -19,7 +19,8 @@
*/
package org.sonar.server.db.migrations;
-import org.slf4j.Logger;
+
+import org.sonar.api.utils.log.Logger;
import javax.annotation.CheckForNull;
diff --git a/server/sonar-server/src/main/java/org/sonar/server/db/migrations/v36/Progress.java b/server/sonar-server/src/main/java/org/sonar/server/db/migrations/v36/Progress.java
index 5ae8b86c689..0e4c2e08273 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/db/migrations/v36/Progress.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/db/migrations/v36/Progress.java
@@ -19,8 +19,9 @@
*/
package org.sonar.server.db.migrations.v36;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
import java.util.TimerTask;
import java.util.concurrent.atomic.AtomicLong;
@@ -46,7 +47,7 @@ class Progress extends TimerTask {
}
Progress(long totalViolations) {
- this(totalViolations, LoggerFactory.getLogger(Progress.class), System.currentTimeMillis());
+ this(totalViolations, Loggers.get(Progress.class), System.currentTimeMillis());
}
void increment(int delta) {
diff --git a/server/sonar-server/src/main/java/org/sonar/server/db/migrations/v36/ViolationMigration.java b/server/sonar-server/src/main/java/org/sonar/server/db/migrations/v36/ViolationMigration.java
index b1f752991ad..c5e955b2c94 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/db/migrations/v36/ViolationMigration.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/db/migrations/v36/ViolationMigration.java
@@ -19,10 +19,11 @@
*/
package org.sonar.server.db.migrations.v36;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+
import org.sonar.api.config.Settings;
import org.sonar.api.utils.MessageException;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
import org.sonar.core.persistence.Database;
import org.sonar.server.db.migrations.DatabaseMigration;
import org.sonar.server.db.migrations.SqlUtil;
@@ -34,7 +35,7 @@ import java.sql.SQLException;
*/
public class ViolationMigration implements DatabaseMigration {
- private static final Logger LOGGER = LoggerFactory.getLogger(ViolationMigration.class);
+ private static final Logger LOGGER = Loggers.get(ViolationMigration.class);
private static final String FAILURE_MESSAGE = "Fail to convert violations to issues";
diff --git a/server/sonar-server/src/main/java/org/sonar/server/debt/DebtModelBackup.java b/server/sonar-server/src/main/java/org/sonar/server/debt/DebtModelBackup.java
index a695592cba2..e7092c1f07a 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/debt/DebtModelBackup.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/debt/DebtModelBackup.java
@@ -24,8 +24,6 @@ import com.google.common.base.Predicate;
import com.google.common.collect.Iterables;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.ObjectUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.sonar.api.ServerComponent;
import org.sonar.api.rule.RuleKey;
import org.sonar.api.server.debt.DebtCharacteristic;
@@ -34,6 +32,8 @@ import org.sonar.api.server.debt.internal.DefaultDebtCharacteristic;
import org.sonar.api.server.rule.RulesDefinition;
import org.sonar.api.utils.System2;
import org.sonar.api.utils.ValidationMessages;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
import org.sonar.core.permission.GlobalPermissions;
import org.sonar.core.persistence.DbSession;
import org.sonar.core.persistence.MyBatis;
@@ -58,7 +58,7 @@ import static com.google.common.collect.Lists.newArrayList;
public class DebtModelBackup implements ServerComponent {
- private static final Logger LOG = LoggerFactory.getLogger(DebtModelBackup.class);
+ private static final Logger LOG = Loggers.get(DebtModelBackup.class);
private final DbClient dbClient;
private final DebtModelOperations debtModelOperations;
diff --git a/server/sonar-server/src/main/java/org/sonar/server/es/BulkIndexer.java b/server/sonar-server/src/main/java/org/sonar/server/es/BulkIndexer.java
index 21ed0c37e41..4925a050ba0 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/es/BulkIndexer.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/es/BulkIndexer.java
@@ -32,8 +32,8 @@ import org.elasticsearch.cluster.metadata.IndexMetaData;
import org.elasticsearch.common.unit.ByteSizeUnit;
import org.elasticsearch.common.unit.ByteSizeValue;
import org.picocontainer.Startable;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
import org.sonar.server.util.ProgressLogger;
import java.util.List;
@@ -49,7 +49,7 @@ import java.util.concurrent.atomic.AtomicLong;
* </ul>
*/
public class BulkIndexer implements Startable {
- private static final Logger LOGGER = LoggerFactory.getLogger(BulkIndexer.class);
+ private static final Logger LOGGER = Loggers.get(BulkIndexer.class);
private static final long FLUSH_BYTE_SIZE = new ByteSizeValue(5, ByteSizeUnit.MB).bytes();
private static final String REFRESH_INTERVAL_SETTING = "index.refresh_interval";
private static final String ALREADY_STARTED_MESSAGE = "Bulk indexing is already started";
diff --git a/server/sonar-server/src/main/java/org/sonar/server/es/IndexCreator.java b/server/sonar-server/src/main/java/org/sonar/server/es/IndexCreator.java
index 65888f72610..909fd00bcba 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/es/IndexCreator.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/es/IndexCreator.java
@@ -25,9 +25,9 @@ import org.elasticsearch.action.admin.indices.create.CreateIndexResponse;
import org.elasticsearch.action.admin.indices.mapping.put.PutMappingResponse;
import org.elasticsearch.common.settings.ImmutableSettings;
import org.picocontainer.Startable;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.sonar.api.ServerComponent;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
import java.util.Map;
@@ -36,7 +36,7 @@ import java.util.Map;
*/
public class IndexCreator implements ServerComponent, Startable {
- private static final Logger LOGGER = LoggerFactory.getLogger(IndexCreator.class);
+ private static final Logger LOGGER = Loggers.get(IndexCreator.class);
/**
* Internal setting stored on index to know its version. It's used to re-create index
diff --git a/server/sonar-server/src/main/java/org/sonar/server/issue/IssueBulkChangeService.java b/server/sonar-server/src/main/java/org/sonar/server/issue/IssueBulkChangeService.java
index d29e4a4eabe..0ec177045a3 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/issue/IssueBulkChangeService.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/issue/IssueBulkChangeService.java
@@ -25,14 +25,14 @@ import com.google.common.base.Predicate;
import com.google.common.collect.Collections2;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.sonar.api.issue.Issue;
import org.sonar.api.issue.internal.DefaultIssue;
import org.sonar.api.issue.internal.IssueChangeContext;
import org.sonar.api.notifications.NotificationManager;
import org.sonar.api.rule.RuleKey;
import org.sonar.api.rules.Rule;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
import org.sonar.core.component.ComponentDto;
import org.sonar.core.issue.db.IssueDto;
import org.sonar.core.issue.db.IssueStorage;
@@ -63,7 +63,7 @@ import static com.google.common.collect.Sets.newHashSet;
public class IssueBulkChangeService {
- private static final Logger LOG = LoggerFactory.getLogger(IssueBulkChangeService.class);
+ private static final Logger LOG = Loggers.get(IssueBulkChangeService.class);
private final DbClient dbClient;
private final IssueService issueService;
diff --git a/server/sonar-server/src/main/java/org/sonar/server/measure/MeasureFilterEngine.java b/server/sonar-server/src/main/java/org/sonar/server/measure/MeasureFilterEngine.java
index 280ab6e2197..c935e136b1d 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/measure/MeasureFilterEngine.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/measure/MeasureFilterEngine.java
@@ -21,9 +21,9 @@ package org.sonar.server.measure;
import com.google.common.base.Joiner;
import org.apache.commons.lang.SystemUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.sonar.api.ServerComponent;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
import org.sonar.core.profiling.Profiling;
import org.sonar.core.profiling.Profiling.Level;
import org.sonar.core.profiling.StopWatch;
@@ -35,7 +35,7 @@ import java.util.Map;
public class MeasureFilterEngine implements ServerComponent {
- private static final Logger LOG = LoggerFactory.getLogger("org.sonar.MEASURE_FILTER");
+ private static final Logger LOG = Loggers.get("org.sonar.MEASURE_FILTER");
private final MeasureFilterFactory factory;
private final MeasureFilterExecutor executor;
diff --git a/server/sonar-server/src/main/java/org/sonar/server/notifications/NotificationCenter.java b/server/sonar-server/src/main/java/org/sonar/server/notifications/NotificationCenter.java
index 9a3fb0565d3..4f68514f3e5 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/notifications/NotificationCenter.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/notifications/NotificationCenter.java
@@ -20,13 +20,14 @@
package org.sonar.server.notifications;
import com.google.common.collect.Lists;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.sonar.api.ServerComponent;
import org.sonar.api.notifications.NotificationChannel;
import org.sonar.api.notifications.NotificationDispatcherMetadata;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
import javax.annotation.Nullable;
+
import java.util.Arrays;
import java.util.List;
@@ -35,7 +36,7 @@ import java.util.List;
*/
public class NotificationCenter implements ServerComponent {
- private static final Logger LOG = LoggerFactory.getLogger(NotificationCenter.class);
+ private static final Logger LOG = Loggers.get(NotificationCenter.class);
private final NotificationDispatcherMetadata[] dispatchersMetadata;
private final NotificationChannel[] channels;
diff --git a/server/sonar-server/src/main/java/org/sonar/server/notifications/NotificationService.java b/server/sonar-server/src/main/java/org/sonar/server/notifications/NotificationService.java
index 97764e97a47..f832d51127d 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/notifications/NotificationService.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/notifications/NotificationService.java
@@ -24,8 +24,6 @@ import com.google.common.collect.HashMultimap;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.SetMultimap;
import org.picocontainer.Startable;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.sonar.api.Properties;
import org.sonar.api.Property;
import org.sonar.api.ServerComponent;
@@ -34,6 +32,8 @@ import org.sonar.api.notifications.Notification;
import org.sonar.api.notifications.NotificationChannel;
import org.sonar.api.notifications.NotificationDispatcher;
import org.sonar.api.utils.TimeProfiler;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
import org.sonar.core.notification.DefaultNotificationManager;
import org.sonar.server.db.DbClient;
@@ -65,7 +65,7 @@ import java.util.concurrent.TimeUnit;
})
public class NotificationService implements ServerComponent, Startable {
- private static final Logger LOG = LoggerFactory.getLogger(NotificationService.class);
+ private static final Logger LOG = Loggers.get(NotificationService.class);
public static final String PROPERTY_DELAY = "sonar.notifications.delay";
public static final String PROPERTY_DELAY_BEFORE_REPORTING_STATUS = "sonar.notifications.runningDelayBeforeReportingStatus";
diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/BackendCleanup.java b/server/sonar-server/src/main/java/org/sonar/server/platform/BackendCleanup.java
index abd3c838ebb..b8f87770142 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/platform/BackendCleanup.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/platform/BackendCleanup.java
@@ -21,7 +21,7 @@ package org.sonar.server.platform;
import org.apache.commons.dbutils.DbUtils;
import org.elasticsearch.index.query.QueryBuilders;
-import org.slf4j.LoggerFactory;
+import org.sonar.api.utils.log.Loggers;
import org.sonar.api.ServerComponent;
import org.sonar.core.persistence.DatabaseVersion;
import org.sonar.core.persistence.DbSession;
@@ -79,7 +79,7 @@ public class BackendCleanup implements ServerComponent {
}
public void clearIndexes() {
- LoggerFactory.getLogger(getClass()).info("Truncate Elasticsearch indices");
+ Loggers.get(getClass()).info("Truncate Elasticsearch indices");
try {
esClient.prepareClearCache()
.get();
diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/ClassLoaderUtils.java b/server/sonar-server/src/main/java/org/sonar/server/platform/ClassLoaderUtils.java
index d9d0f57d3e3..989c79561c5 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/platform/ClassLoaderUtils.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/platform/ClassLoaderUtils.java
@@ -24,7 +24,7 @@ import com.google.common.collect.Lists;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.CharEncoding;
import org.apache.commons.lang.StringUtils;
-import org.slf4j.LoggerFactory;
+import org.sonar.api.utils.log.Loggers;
import javax.annotation.Nullable;
@@ -128,7 +128,7 @@ class ClassLoaderUtils {
try {
jar.close();
} catch (Exception e) {
- LoggerFactory.getLogger(ClassLoaderUtils.class).error("Fail to close JAR file: " + jarPath, e);
+ Loggers.get(ClassLoaderUtils.class).error("Fail to close JAR file: " + jarPath, e);
}
}
}
diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/DatabaseServerCompatibility.java b/server/sonar-server/src/main/java/org/sonar/server/platform/DatabaseServerCompatibility.java
index 7675bee941a..94066a1eaa9 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/platform/DatabaseServerCompatibility.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/platform/DatabaseServerCompatibility.java
@@ -20,7 +20,7 @@
package org.sonar.server.platform;
import org.picocontainer.Startable;
-import org.slf4j.LoggerFactory;
+import org.sonar.api.utils.log.Loggers;
import org.sonar.api.utils.MessageException;
import org.sonar.core.persistence.DatabaseVersion;
@@ -39,7 +39,7 @@ public class DatabaseServerCompatibility implements Startable {
throw MessageException.of("Database relates to a more recent version of sonar. Please check your settings.");
}
if (status == DatabaseVersion.Status.REQUIRES_UPGRADE) {
- LoggerFactory.getLogger(DatabaseServerCompatibility.class).warn("Database must be upgraded. Please browse /setup");
+ Loggers.get(DatabaseServerCompatibility.class).warn("Database must be upgraded. Please browse /setup");
}
}
diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/DefaultServerFileSystem.java b/server/sonar-server/src/main/java/org/sonar/server/platform/DefaultServerFileSystem.java
index a23eab31aa9..e8e65acbee8 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/platform/DefaultServerFileSystem.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/platform/DefaultServerFileSystem.java
@@ -22,11 +22,11 @@ package org.sonar.server.platform;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.filefilter.FileFilterUtils;
import org.picocontainer.Startable;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.sonar.api.config.Settings;
import org.sonar.api.platform.Server;
import org.sonar.api.platform.ServerFileSystem;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
import org.sonar.process.ProcessConstants;
import java.io.File;
@@ -43,7 +43,7 @@ import java.util.List;
*/
public class DefaultServerFileSystem implements ServerFileSystem, Startable {
- private static final Logger LOGGER = LoggerFactory.getLogger(DefaultServerFileSystem.class);
+ private static final Logger LOGGER = Loggers.get(DefaultServerFileSystem.class);
private final Server server;
private File homeDir;
diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/MasterServletFilter.java b/server/sonar-server/src/main/java/org/sonar/server/platform/MasterServletFilter.java
index ee7790e938a..cb4567267c0 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/platform/MasterServletFilter.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/platform/MasterServletFilter.java
@@ -22,7 +22,7 @@ package org.sonar.server.platform;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Preconditions;
import com.google.common.collect.Lists;
-import org.slf4j.LoggerFactory;
+import org.sonar.api.utils.log.Loggers;
import org.sonar.api.web.ServletFilter;
import javax.servlet.*;
@@ -63,7 +63,7 @@ public class MasterServletFilter implements Filter {
List<Filter> filterList = Lists.newArrayList();
for (ServletFilter extension : filterExtensions) {
try {
- LoggerFactory.getLogger(MasterServletFilter.class).info(String.format("Initializing servlet filter %s [pattern=%s]", extension, extension.doGetPattern()));
+ Loggers.get(MasterServletFilter.class).info(String.format("Initializing servlet filter %s [pattern=%s]", extension, extension.doGetPattern()));
extension.init(config);
filterList.add(extension);
} catch (Exception e) {
diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/Platform.java b/server/sonar-server/src/main/java/org/sonar/server/platform/Platform.java
index dc1ce4f53b9..bbc3cc6b083 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/platform/Platform.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/platform/Platform.java
@@ -19,7 +19,7 @@
*/
package org.sonar.server.platform;
-import org.slf4j.LoggerFactory;
+import org.sonar.api.utils.log.Loggers;
import org.sonar.api.platform.ComponentContainer;
import org.sonar.api.platform.Server;
import org.sonar.core.persistence.DatabaseVersion;
@@ -151,7 +151,7 @@ public class Platform {
dbConnected = false;
started = false;
} catch (Exception e) {
- LoggerFactory.getLogger(getClass()).debug("Fail to stop server - ignored", e);
+ Loggers.get(getClass()).debug("Fail to stop server - ignored", e);
}
}
}
diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/RailsAppsDeployer.java b/server/sonar-server/src/main/java/org/sonar/server/platform/RailsAppsDeployer.java
index 9b6aa28c4d7..c034a78ee38 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/platform/RailsAppsDeployer.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/platform/RailsAppsDeployer.java
@@ -24,14 +24,15 @@ import com.google.common.base.Function;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils;
import org.picocontainer.Startable;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.sonar.api.Plugin;
import org.sonar.api.platform.PluginMetadata;
import org.sonar.api.platform.PluginRepository;
import org.sonar.api.platform.ServerFileSystem;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
import javax.annotation.Nullable;
+
import java.io.File;
import java.io.IOException;
@@ -43,7 +44,7 @@ import java.io.IOException;
*/
public class RailsAppsDeployer implements Startable {
- private static final Logger LOG = LoggerFactory.getLogger(RailsAppsDeployer.class);
+ private static final Logger LOG = Loggers.get(RailsAppsDeployer.class);
private static final String ROR_PATH = "org/sonar/ror/";
private final ServerFileSystem fileSystem;
diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/ServerIdGenerator.java b/server/sonar-server/src/main/java/org/sonar/server/platform/ServerIdGenerator.java
index 7979bca8a8c..cd9cb3229ed 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/platform/ServerIdGenerator.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/platform/ServerIdGenerator.java
@@ -22,7 +22,7 @@ package org.sonar.server.platform;
import com.google.common.collect.Lists;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang.StringUtils;
-import org.slf4j.LoggerFactory;
+import org.sonar.api.utils.log.Loggers;
import java.io.UnsupportedEncodingException;
import java.net.InetAddress;
@@ -121,7 +121,7 @@ public class ServerIdGenerator {
}
}
} catch (SocketException e) {
- LoggerFactory.getLogger(ServerIdGenerator.class).error("Fail to browse network interfaces", e);
+ Loggers.get(ServerIdGenerator.class).error("Fail to browse network interfaces", e);
}
return result;
}
diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/ServerImpl.java b/server/sonar-server/src/main/java/org/sonar/server/platform/ServerImpl.java
index 8da34aad46a..991ceb18d1d 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/platform/ServerImpl.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/platform/ServerImpl.java
@@ -26,11 +26,11 @@ import com.google.common.io.Resources;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
import org.picocontainer.Startable;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.sonar.api.CoreProperties;
import org.sonar.api.config.Settings;
import org.sonar.api.platform.Server;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
import org.sonar.process.ProcessConstants;
import java.io.File;
@@ -42,7 +42,7 @@ import java.util.Date;
import java.util.Properties;
public final class ServerImpl extends Server implements Startable {
- private static final Logger LOG = LoggerFactory.getLogger(ServerImpl.class);
+ private static final Logger LOG = Loggers.get(ServerImpl.class);
private final Settings settings;
private final Date startedAt;
diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/ServerLifecycleNotifier.java b/server/sonar-server/src/main/java/org/sonar/server/platform/ServerLifecycleNotifier.java
index ebed1d422b0..823f4a5d880 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/platform/ServerLifecycleNotifier.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/platform/ServerLifecycleNotifier.java
@@ -20,7 +20,7 @@
package org.sonar.server.platform;
import org.picocontainer.Startable;
-import org.slf4j.LoggerFactory;
+import org.sonar.api.utils.log.Loggers;
import org.sonar.api.platform.Server;
import org.sonar.api.platform.ServerStartHandler;
import org.sonar.api.platform.ServerStopHandler;
@@ -62,7 +62,7 @@ public class ServerLifecycleNotifier implements Startable {
}
public void notifyStart() {
- LoggerFactory.getLogger(ServerLifecycleNotifier.class).debug("Notify " + ServerStartHandler.class.getSimpleName() + " handlers...");
+ Loggers.get(ServerLifecycleNotifier.class).debug("Notify " + ServerStartHandler.class.getSimpleName() + " handlers...");
for (ServerStartHandler handler : startHandlers) {
handler.onServerStart(server);
}
@@ -70,7 +70,7 @@ public class ServerLifecycleNotifier implements Startable {
@Override
public void stop() {
- LoggerFactory.getLogger(ServerLifecycleNotifier.class).debug("Notify " + ServerStopHandler.class.getSimpleName() + " handlers...");
+ Loggers.get(ServerLifecycleNotifier.class).debug("Notify " + ServerStopHandler.class.getSimpleName() + " handlers...");
for (ServerStopHandler handler : stopHandlers) {
handler.onServerStop(server);
}
diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/SwitchLogbackAppender.java b/server/sonar-server/src/main/java/org/sonar/server/platform/SwitchLogbackAppender.java
deleted file mode 100644
index fbc46101522..00000000000
--- a/server/sonar-server/src/main/java/org/sonar/server/platform/SwitchLogbackAppender.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * SonarQube, open source software quality management tool.
- * Copyright (C) 2008-2014 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * SonarQube is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * SonarQube is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-package org.sonar.server.platform;
-
-import ch.qos.logback.classic.Level;
-import ch.qos.logback.classic.spi.ILoggingEvent;
-import ch.qos.logback.core.Appender;
-import ch.qos.logback.core.AppenderBase;
-import ch.qos.logback.core.spi.AppenderAttachable;
-import ch.qos.logback.core.spi.AppenderAttachableImpl;
-import org.sonar.server.computation.ComputationThreadLauncher;
-
-import java.util.Iterator;
-
-public class SwitchLogbackAppender extends AppenderBase<ILoggingEvent> implements AppenderAttachable<ILoggingEvent> {
-
- private AppenderAttachableImpl<ILoggingEvent> attachedAppenders = new AppenderAttachableImpl<>();
- private Appender<ILoggingEvent> console = null;
- private Appender<ILoggingEvent> analysisReports = null;
-
- @Override
- protected void append(ILoggingEvent event) {
- if (Thread.currentThread().getName().startsWith(ComputationThreadLauncher.THREAD_NAME_PREFIX)) {
- analysisReports.doAppend(event);
- if (event.getLevel().isGreaterOrEqual(Level.WARN)) {
- console.doAppend(event);
- }
- } else {
- console.doAppend(event);
- }
- }
-
- @Override
- public void addAppender(Appender<ILoggingEvent> newAppender) {
- attachedAppenders.addAppender(newAppender);
- if ("CONSOLE".equals(newAppender.getName())) {
- console = newAppender;
- } else if ("ANALYSIS_REPORTS".equals(newAppender.getName())) {
- analysisReports = newAppender;
- } else {
- throw new IllegalArgumentException("Invalid appender name: " + newAppender.getName());
- }
- }
-
- @Override
- public Iterator<Appender<ILoggingEvent>> iteratorForAppenders() {
- return attachedAppenders.iteratorForAppenders();
- }
-
- @Override
- public Appender<ILoggingEvent> getAppender(String name) {
- return attachedAppenders.getAppender(name);
- }
-
- @Override
- public boolean isAttached(Appender<ILoggingEvent> appender) {
- return attachedAppenders.isAttached(appender);
- }
-
- @Override
- public void detachAndStopAllAppenders() {
- attachedAppenders.detachAndStopAllAppenders();
-
- }
-
- @Override
- public boolean detachAppender(Appender<ILoggingEvent> appender) {
- return attachedAppenders.detachAppender(appender);
- }
-
- @Override
- public boolean detachAppender(String name) {
- return attachedAppenders.detachAppender(name);
- }
-
-}
diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/ws/RestartHandler.java b/server/sonar-server/src/main/java/org/sonar/server/platform/ws/RestartHandler.java
index d32623de5a5..79c0d51cbad 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/platform/ws/RestartHandler.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/platform/ws/RestartHandler.java
@@ -19,14 +19,15 @@
*/
package org.sonar.server.platform.ws;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+
import org.sonar.api.config.Settings;
import org.sonar.api.server.ws.Request;
import org.sonar.api.server.ws.RequestHandler;
import org.sonar.api.server.ws.Response;
import org.sonar.api.server.ws.WebService;
import org.sonar.api.utils.System2;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
import org.sonar.server.exceptions.ForbiddenException;
import org.sonar.server.platform.Platform;
@@ -54,7 +55,7 @@ public class RestartHandler implements RequestHandler {
@Override
public void handle(Request request, Response response) {
if (canRestart()) {
- Logger logger = LoggerFactory.getLogger(getClass());
+ Logger logger = Loggers.get(getClass());
logger.info("Restart server");
platform.restart();
logger.info("Server restarted");
diff --git a/server/sonar-server/src/main/java/org/sonar/server/plugins/PluginDownloader.java b/server/sonar-server/src/main/java/org/sonar/server/plugins/PluginDownloader.java
index 0263c928fcf..18de6b9e09c 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/plugins/PluginDownloader.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/plugins/PluginDownloader.java
@@ -22,10 +22,10 @@ package org.sonar.server.plugins;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils;
import org.picocontainer.Startable;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.sonar.api.utils.HttpDownloader;
import org.sonar.api.utils.SonarException;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
import org.sonar.server.platform.DefaultServerFileSystem;
import org.sonar.updatecenter.common.Release;
import org.sonar.updatecenter.common.Version;
@@ -40,7 +40,7 @@ import java.util.List;
public class PluginDownloader implements Startable {
- private static final Logger LOG = LoggerFactory.getLogger(PluginDownloader.class);
+ private static final Logger LOG = Loggers.get(PluginDownloader.class);
private static final String TMP_SUFFIX = "tmp";
private static final String PLUGIN_EXTENSION = "jar";
diff --git a/server/sonar-server/src/main/java/org/sonar/server/plugins/ServerPluginJarsInstaller.java b/server/sonar-server/src/main/java/org/sonar/server/plugins/ServerPluginJarsInstaller.java
index 2c80dcd6695..1d23bfebe59 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/plugins/ServerPluginJarsInstaller.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/plugins/ServerPluginJarsInstaller.java
@@ -24,13 +24,13 @@ import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.sonar.api.platform.PluginMetadata;
import org.sonar.api.platform.Server;
import org.sonar.api.platform.ServerUpgradeStatus;
import org.sonar.api.utils.MessageException;
import org.sonar.api.utils.TimeProfiler;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
import org.sonar.core.plugins.DefaultPluginMetadata;
import org.sonar.server.platform.DefaultServerFileSystem;
import org.sonar.updatecenter.common.PluginReferential;
@@ -46,7 +46,7 @@ import java.util.Set;
public class ServerPluginJarsInstaller {
- private static final Logger LOG = LoggerFactory.getLogger(ServerPluginJarsInstaller.class);
+ private static final Logger LOG = Loggers.get(ServerPluginJarsInstaller.class);
private final Server server;
private final DefaultServerFileSystem fs;
diff --git a/server/sonar-server/src/main/java/org/sonar/server/plugins/ServerPluginRepository.java b/server/sonar-server/src/main/java/org/sonar/server/plugins/ServerPluginRepository.java
index 71ab9c41f44..16028617966 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/plugins/ServerPluginRepository.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/plugins/ServerPluginRepository.java
@@ -20,7 +20,7 @@
package org.sonar.server.plugins;
import org.picocontainer.Startable;
-import org.slf4j.LoggerFactory;
+import org.sonar.api.utils.log.Loggers;
import org.sonar.api.Plugin;
import org.sonar.api.platform.PluginMetadata;
import org.sonar.api.platform.PluginRepository;
@@ -75,7 +75,7 @@ public class ServerPluginRepository implements PluginRepository, Startable {
clazz = classloader.loadClass(classname);
} catch (ClassNotFoundException e) {
- LoggerFactory.getLogger(getClass()).warn("Class not found in plugin " + pluginKey + ": " + classname, e);
+ Loggers.get(getClass()).warn("Class not found in plugin " + pluginKey + ": " + classname, e);
}
}
return clazz;
diff --git a/server/sonar-server/src/main/java/org/sonar/server/plugins/StaticResourcesServlet.java b/server/sonar-server/src/main/java/org/sonar/server/plugins/StaticResourcesServlet.java
index 41e0d2a4570..8d24a1ae5f0 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/plugins/StaticResourcesServlet.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/plugins/StaticResourcesServlet.java
@@ -22,21 +22,22 @@ package org.sonar.server.plugins;
import com.google.common.annotations.VisibleForTesting;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
import org.sonar.server.platform.Platform;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class StaticResourcesServlet extends HttpServlet {
- private static final Logger LOG = LoggerFactory.getLogger(StaticResourcesServlet.class);
+ private static final Logger LOG = Loggers.get(StaticResourcesServlet.class);
private static final long serialVersionUID = -2577454614650178426L;
@Override
diff --git a/server/sonar-server/src/main/java/org/sonar/server/plugins/UpdateCenterClient.java b/server/sonar-server/src/main/java/org/sonar/server/plugins/UpdateCenterClient.java
index 7af55f4a1f5..3895d6d7a40 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/plugins/UpdateCenterClient.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/plugins/UpdateCenterClient.java
@@ -21,7 +21,7 @@ package org.sonar.server.plugins;
import com.google.common.base.Charsets;
import org.apache.commons.io.IOUtils;
-import org.slf4j.LoggerFactory;
+import org.sonar.api.utils.log.Loggers;
import org.sonar.api.Properties;
import org.sonar.api.Property;
import org.sonar.api.PropertyType;
@@ -73,7 +73,7 @@ public class UpdateCenterClient {
public UpdateCenterClient(UriReader uriReader, Settings settings) throws URISyntaxException {
this.uriReader = uriReader;
this.uri = new URI(settings.getString(URL_PROPERTY));
- LoggerFactory.getLogger(getClass()).info("Update center: " + uriReader.description(uri));
+ Loggers.get(getClass()).info("Update center: " + uriReader.description(uri));
}
public UpdateCenter getUpdateCenter() {
@@ -106,7 +106,7 @@ public class UpdateCenterClient {
return new UpdateCenterDeserializer(Mode.PROD, true).fromProperties(properties);
} catch (Exception e) {
- LoggerFactory.getLogger(getClass()).error("Fail to connect to update center", e);
+ Loggers.get(getClass()).error("Fail to connect to update center", e);
return null;
} finally {
diff --git a/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/RegisterQualityProfiles.java b/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/RegisterQualityProfiles.java
index 0f8016fc22c..7ee0390bc9e 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/RegisterQualityProfiles.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/RegisterQualityProfiles.java
@@ -25,8 +25,6 @@ import com.google.common.collect.ListMultimap;
import com.google.common.collect.Multimaps;
import com.google.common.collect.Sets;
import org.apache.commons.lang.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.sonar.api.ServerComponent;
import org.sonar.api.profiles.ProfileDefinition;
import org.sonar.api.profiles.RulesProfile;
@@ -35,6 +33,8 @@ import org.sonar.api.rule.RuleKey;
import org.sonar.api.rules.ActiveRuleParam;
import org.sonar.api.utils.TimeProfiler;
import org.sonar.api.utils.ValidationMessages;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
import org.sonar.core.persistence.DbSession;
import org.sonar.core.qualityprofile.db.QualityProfileDto;
import org.sonar.core.template.LoadedTemplateDto;
@@ -54,7 +54,7 @@ import java.util.Set;
*/
public class RegisterQualityProfiles implements ServerComponent {
- private static final Logger LOGGER = LoggerFactory.getLogger(RegisterQualityProfiles.class);
+ private static final Logger LOGGER = Loggers.get(RegisterQualityProfiles.class);
private static final String DEFAULT_PROFILE_NAME = "Sonar way";
private final PersistentSettings settings;
diff --git a/server/sonar-server/src/main/java/org/sonar/server/rule/DeprecatedRulesDefinitionLoader.java b/server/sonar-server/src/main/java/org/sonar/server/rule/DeprecatedRulesDefinitionLoader.java
index e54002f4bc9..563bcb1ae18 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/rule/DeprecatedRulesDefinitionLoader.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/rule/DeprecatedRulesDefinitionLoader.java
@@ -23,8 +23,6 @@ import com.google.common.base.Predicate;
import com.google.common.collect.Iterables;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.sonar.api.ServerComponent;
import org.sonar.api.rule.RuleKey;
import org.sonar.api.rule.RuleStatus;
@@ -34,6 +32,8 @@ import org.sonar.api.server.debt.DebtRemediationFunction;
import org.sonar.api.server.rule.RuleParamType;
import org.sonar.api.server.rule.RulesDefinition;
import org.sonar.api.utils.ValidationMessages;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
import org.sonar.core.i18n.RuleI18nManager;
import org.sonar.server.debt.DebtModelPluginRepository;
import org.sonar.server.debt.DebtModelXMLExporter;
@@ -54,7 +54,7 @@ import static org.sonar.server.debt.DebtModelXMLExporter.RuleDebt;
*/
public class DeprecatedRulesDefinitionLoader implements ServerComponent {
- private static final Logger LOG = LoggerFactory.getLogger(DeprecatedRulesDefinitionLoader.class);
+ private static final Logger LOG = Loggers.get(DeprecatedRulesDefinitionLoader.class);
private final RuleI18nManager i18n;
private final RuleRepository[] repositories;
diff --git a/server/sonar-server/src/main/java/org/sonar/server/rule/RegisterRules.java b/server/sonar-server/src/main/java/org/sonar/server/rule/RegisterRules.java
index 8f123326ed4..2d16e250dce 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/rule/RegisterRules.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/rule/RegisterRules.java
@@ -28,8 +28,6 @@ import com.google.common.collect.Sets;
import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.StringUtils;
import org.picocontainer.Startable;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.sonar.api.resources.Languages;
import org.sonar.api.rule.RuleKey;
import org.sonar.api.rule.RuleStatus;
@@ -37,6 +35,8 @@ import org.sonar.api.server.debt.DebtRemediationFunction;
import org.sonar.api.server.rule.RulesDefinition;
import org.sonar.api.utils.MessageException;
import org.sonar.api.utils.TimeProfiler;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
import org.sonar.core.persistence.DbSession;
import org.sonar.core.qualityprofile.db.ActiveRuleDto;
import org.sonar.core.qualityprofile.db.ActiveRuleParamDto;
@@ -52,7 +52,12 @@ import org.sonar.server.startup.RegisterDebtModel;
import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
import static com.google.common.collect.Lists.newArrayList;
@@ -61,7 +66,7 @@ import static com.google.common.collect.Lists.newArrayList;
*/
public class RegisterRules implements Startable {
- private static final Logger LOG = LoggerFactory.getLogger(RegisterRules.class);
+ private static final Logger LOG = Loggers.get(RegisterRules.class);
private final RuleDefinitionsLoader defLoader;
private final RuleActivator ruleActivator;
diff --git a/server/sonar-server/src/main/java/org/sonar/server/rule/ws/ActiveRuleCompleter.java b/server/sonar-server/src/main/java/org/sonar/server/rule/ws/ActiveRuleCompleter.java
index c0d0d57256f..6ad59c20601 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/rule/ws/ActiveRuleCompleter.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/rule/ws/ActiveRuleCompleter.java
@@ -21,12 +21,12 @@ package org.sonar.server.rule.ws;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.sonar.api.ServerComponent;
import org.sonar.api.resources.Language;
import org.sonar.api.resources.Languages;
import org.sonar.api.rule.RuleKey;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
import org.sonar.api.utils.text.JsonWriter;
import org.sonar.core.qualityprofile.db.ActiveRuleKey;
import org.sonar.core.qualityprofile.db.QualityProfileDto;
@@ -47,7 +47,7 @@ import java.util.Map;
*/
public class ActiveRuleCompleter implements ServerComponent {
- private static final Logger LOG = LoggerFactory.getLogger(ActiveRuleCompleter.class);
+ private static final Logger LOG = Loggers.get(ActiveRuleCompleter.class);
private final QProfileLoader loader;
private final Languages languages;
diff --git a/server/sonar-server/src/main/java/org/sonar/server/search/BaseIndex.java b/server/sonar-server/src/main/java/org/sonar/server/search/BaseIndex.java
index 460e7b2ff48..4492b24a937 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/search/BaseIndex.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/search/BaseIndex.java
@@ -26,14 +26,23 @@ import com.google.common.collect.Multimap;
import org.elasticsearch.action.admin.indices.exists.indices.IndicesExistsResponse;
import org.elasticsearch.action.count.CountRequestBuilder;
import org.elasticsearch.action.count.CountResponse;
-import org.elasticsearch.action.get.*;
+import org.elasticsearch.action.get.GetRequestBuilder;
+import org.elasticsearch.action.get.GetResponse;
+import org.elasticsearch.action.get.MultiGetItemResponse;
+import org.elasticsearch.action.get.MultiGetRequest;
+import org.elasticsearch.action.get.MultiGetRequestBuilder;
+import org.elasticsearch.action.get.MultiGetResponse;
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.search.SearchScrollRequestBuilder;
import org.elasticsearch.common.settings.ImmutableSettings;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.unit.TimeValue;
-import org.elasticsearch.index.query.*;
+import org.elasticsearch.index.query.BoolFilterBuilder;
+import org.elasticsearch.index.query.FilterBuilder;
+import org.elasticsearch.index.query.FilterBuilders;
+import org.elasticsearch.index.query.QueryBuilder;
+import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.aggregations.Aggregation;
import org.elasticsearch.search.aggregations.AggregationBuilders;
@@ -44,8 +53,8 @@ import org.elasticsearch.search.aggregations.metrics.max.Max;
import org.elasticsearch.search.aggregations.metrics.valuecount.InternalValueCount;
import org.elasticsearch.search.fetch.source.FetchSourceContext;
import org.joda.time.DateTime;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
import org.sonar.core.persistence.Dto;
import org.sonar.server.exceptions.NotFoundException;
@@ -53,12 +62,22 @@ import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
import java.io.Serializable;
-import java.util.*;
+import java.util.ArrayDeque;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.NoSuchElementException;
+import java.util.Queue;
public abstract class BaseIndex<DOMAIN, DTO extends Dto<KEY>, KEY extends Serializable>
implements Index<DOMAIN, DTO, KEY> {
- private static final Logger LOG = LoggerFactory.getLogger(BaseIndex.class);
+ private static final Logger LOG = Loggers.get(BaseIndex.class);
private final SearchClient client;
private final BaseNormalizer<DTO, KEY> normalizer;
diff --git a/server/sonar-server/src/main/java/org/sonar/server/search/Facets.java b/server/sonar-server/src/main/java/org/sonar/server/search/Facets.java
index 09b99fc1795..58f6b140bc4 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/search/Facets.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/search/Facets.java
@@ -29,8 +29,8 @@ import org.elasticsearch.search.aggregations.HasAggregations;
import org.elasticsearch.search.aggregations.bucket.histogram.DateHistogram;
import org.elasticsearch.search.aggregations.bucket.missing.Missing;
import org.elasticsearch.search.aggregations.bucket.terms.Terms;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
import java.util.ArrayList;
import java.util.Collection;
@@ -39,7 +39,7 @@ import java.util.Map;
class Facets {
- private static final Logger LOGGER = LoggerFactory.getLogger(Facets.class);
+ private static final Logger LOGGER = Loggers.get(Facets.class);
private final Multimap<String, FacetValue> facetValues;
diff --git a/server/sonar-server/src/main/java/org/sonar/server/search/IndexQueue.java b/server/sonar-server/src/main/java/org/sonar/server/search/IndexQueue.java
index 2944ac89701..1ad5214180d 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/search/IndexQueue.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/search/IndexQueue.java
@@ -28,14 +28,18 @@ import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.update.UpdateRequest;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.sonar.api.ServerComponent;
import org.sonar.api.platform.ComponentContainer;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
import org.sonar.core.cluster.WorkQueue;
import org.sonar.server.search.action.IndexAction;
-import java.util.*;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
@@ -46,7 +50,7 @@ public class IndexQueue implements ServerComponent, WorkQueue<IndexAction<?>> {
private final SearchClient searchClient;
private final ComponentContainer container;
- private static final Logger LOGGER = LoggerFactory.getLogger(IndexQueue.class);
+ private static final Logger LOGGER = Loggers.get(IndexQueue.class);
private static final Integer CONCURRENT_NORMALIZATION_FACTOR = 1;
diff --git a/server/sonar-server/src/main/java/org/sonar/server/search/IndexSynchronizer.java b/server/sonar-server/src/main/java/org/sonar/server/search/IndexSynchronizer.java
index 1afa9eb55b1..2aaa1e874b7 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/search/IndexSynchronizer.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/search/IndexSynchronizer.java
@@ -19,8 +19,9 @@
*/
package org.sonar.server.search;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
import org.sonar.core.persistence.DbSession;
import org.sonar.server.activity.index.ActivityIndex;
import org.sonar.server.db.Dao;
@@ -37,7 +38,7 @@ import java.util.Date;
public class IndexSynchronizer {
- private static final Logger LOG = LoggerFactory.getLogger(IndexSynchronizer.class);
+ private static final Logger LOG = Loggers.get(IndexSynchronizer.class);
private final DbClient db;
private final IndexClient index;
diff --git a/server/sonar-server/src/main/java/org/sonar/server/source/HtmlTextDecorator.java b/server/sonar-server/src/main/java/org/sonar/server/source/HtmlTextDecorator.java
index 18d7841dc9a..0a6d74e96ea 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/source/HtmlTextDecorator.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/source/HtmlTextDecorator.java
@@ -20,7 +20,7 @@
package org.sonar.server.source;
import com.google.common.io.Closeables;
-import org.slf4j.LoggerFactory;
+import org.sonar.api.utils.log.Loggers;
import javax.annotation.Nullable;
@@ -89,7 +89,7 @@ class HtmlTextDecorator {
} catch (IOException exception) {
String errorMsg = "An exception occurred while highlighting the syntax of one of the project's files";
- LoggerFactory.getLogger(HtmlTextDecorator.class).error(errorMsg);
+ Loggers.get(HtmlTextDecorator.class).error(errorMsg);
throw new IllegalStateException(errorMsg, exception);
} finally {
Closeables.closeQuietly(stringBuffer);
diff --git a/server/sonar-server/src/main/java/org/sonar/server/startup/CopyRequirementsFromCharacteristicsToRules.java b/server/sonar-server/src/main/java/org/sonar/server/startup/CopyRequirementsFromCharacteristicsToRules.java
index e40a54ba10e..cdefebfdd23 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/startup/CopyRequirementsFromCharacteristicsToRules.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/startup/CopyRequirementsFromCharacteristicsToRules.java
@@ -26,12 +26,12 @@ import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.Iterables;
import com.google.common.collect.Multimap;
import org.apache.commons.lang.builder.EqualsBuilder;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.sonar.api.ServerComponent;
import org.sonar.api.rule.RuleStatus;
import org.sonar.api.server.debt.DebtRemediationFunction;
import org.sonar.api.utils.Duration;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
import org.sonar.core.persistence.DbSession;
import org.sonar.core.persistence.MyBatis;
import org.sonar.core.rule.RuleDto;
@@ -59,7 +59,7 @@ import java.util.List;
*/
public class CopyRequirementsFromCharacteristicsToRules implements ServerComponent {
- private static final Logger LOGGER = LoggerFactory.getLogger(CopyRequirementsFromCharacteristicsToRules.class);
+ private static final Logger LOGGER = Loggers.get(CopyRequirementsFromCharacteristicsToRules.class);
private static final String TEMPLATE_KEY = "CopyRequirementsFromCharacteristicsToRules";
diff --git a/server/sonar-server/src/main/java/org/sonar/server/startup/LogServerId.java b/server/sonar-server/src/main/java/org/sonar/server/startup/LogServerId.java
index a3e95c1c9a9..cf6ea5dd47d 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/startup/LogServerId.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/startup/LogServerId.java
@@ -20,9 +20,9 @@
package org.sonar.server.startup;
import com.google.common.annotations.VisibleForTesting;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.sonar.api.CoreProperties;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
import org.sonar.core.properties.PropertiesDao;
import org.sonar.core.properties.PropertyDto;
@@ -38,7 +38,7 @@ public final class LogServerId {
}
public void start() {
- logServerId(LoggerFactory.getLogger(LogServerId.class));
+ logServerId(Loggers.get(LogServerId.class));
}
@VisibleForTesting
diff --git a/server/sonar-server/src/main/java/org/sonar/server/startup/RegisterDashboards.java b/server/sonar-server/src/main/java/org/sonar/server/startup/RegisterDashboards.java
index 0e3a32b20cc..6848c52aa21 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/startup/RegisterDashboards.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/startup/RegisterDashboards.java
@@ -22,9 +22,9 @@ package org.sonar.server.startup;
import com.google.common.collect.Lists;
import com.google.common.collect.Ordering;
import org.picocontainer.Startable;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.sonar.api.utils.TimeProfiler;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
import org.sonar.api.web.Dashboard;
import org.sonar.api.web.DashboardTemplate;
import org.sonar.core.dashboard.ActiveDashboardDao;
@@ -45,7 +45,7 @@ import java.util.Map.Entry;
* @since 2.13
*/
public class RegisterDashboards implements Startable {
- private static final Logger LOG = LoggerFactory.getLogger(RegisterDashboards.class);
+ private static final Logger LOG = Loggers.get(RegisterDashboards.class);
static final String DEFAULT_DASHBOARD_NAME = "Dashboard";
diff --git a/server/sonar-server/src/main/java/org/sonar/server/startup/RegisterDebtModel.java b/server/sonar-server/src/main/java/org/sonar/server/startup/RegisterDebtModel.java
index e922638a831..1319f3463b4 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/startup/RegisterDebtModel.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/startup/RegisterDebtModel.java
@@ -20,15 +20,16 @@
package org.sonar.server.startup;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+
import org.sonar.api.utils.TimeProfiler;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
import org.sonar.core.technicaldebt.db.CharacteristicDao;
import org.sonar.server.debt.DebtModelBackup;
public class RegisterDebtModel {
- private static final Logger LOGGER = LoggerFactory.getLogger(RegisterDebtModel.class);
+ private static final Logger LOGGER = Loggers.get(RegisterDebtModel.class);
private final CharacteristicDao dao;
private final DebtModelBackup debtModelBackup;
diff --git a/server/sonar-server/src/main/java/org/sonar/server/startup/RegisterMetrics.java b/server/sonar-server/src/main/java/org/sonar/server/startup/RegisterMetrics.java
index 5e5b6cfc582..01160def8fb 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/startup/RegisterMetrics.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/startup/RegisterMetrics.java
@@ -23,12 +23,12 @@ import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Predicate;
import com.google.common.collect.Iterables;
import com.google.common.collect.Maps;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.sonar.api.measures.CoreMetrics;
import org.sonar.api.measures.Metric;
import org.sonar.api.measures.Metrics;
import org.sonar.api.utils.TimeProfiler;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
import org.sonar.core.qualitygate.db.QualityGateConditionDao;
import org.sonar.jpa.dao.MeasuresDao;
@@ -39,7 +39,7 @@ import static com.google.common.collect.Lists.newArrayList;
public class RegisterMetrics {
- private static final Logger LOG = LoggerFactory.getLogger(RegisterMetrics.class);
+ private static final Logger LOG = Loggers.get(RegisterMetrics.class);
private final MeasuresDao measuresDao;
private final Metrics[] metricsRepositories;
diff --git a/server/sonar-server/src/main/java/org/sonar/server/startup/RegisterNewMeasureFilters.java b/server/sonar-server/src/main/java/org/sonar/server/startup/RegisterNewMeasureFilters.java
index 84c53745e9b..02c173aa621 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/startup/RegisterNewMeasureFilters.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/startup/RegisterNewMeasureFilters.java
@@ -23,9 +23,9 @@ import com.google.common.base.Joiner;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
import org.apache.commons.lang.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.sonar.api.utils.TimeProfiler;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
import org.sonar.api.web.Criterion;
import org.sonar.api.web.Filter;
import org.sonar.api.web.FilterColumn;
@@ -42,7 +42,7 @@ import java.util.List;
* @since 3.1
*/
public final class RegisterNewMeasureFilters {
- private static final Logger LOG = LoggerFactory.getLogger(RegisterNewMeasureFilters.class);
+ private static final Logger LOG = Loggers.get(RegisterNewMeasureFilters.class);
private final List<FilterTemplate> filterTemplates;
private final MeasureFilterDao filterDao;
diff --git a/server/sonar-server/src/main/java/org/sonar/server/startup/RegisterPermissionTemplates.java b/server/sonar-server/src/main/java/org/sonar/server/startup/RegisterPermissionTemplates.java
index df115467d1c..bf468fdf55f 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/startup/RegisterPermissionTemplates.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/startup/RegisterPermissionTemplates.java
@@ -20,10 +20,11 @@
package org.sonar.server.startup;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+
import org.sonar.api.security.DefaultGroups;
import org.sonar.api.utils.TimeProfiler;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
import org.sonar.api.web.UserRole;
import org.sonar.core.permission.PermissionTemplateDao;
import org.sonar.core.permission.PermissionTemplateDto;
@@ -38,7 +39,7 @@ public class RegisterPermissionTemplates {
public static final String DEFAULT_TEMPLATE_PROPERTY = "sonar.permission.template.default";
public static final String DEFAULT_PROJECTS_TEMPLATE_PROPERTY = "sonar.permission.template.TRK.default";
- private static final Logger LOG = LoggerFactory.getLogger(RegisterPermissionTemplates.class);
+ private static final Logger LOG = Loggers.get(RegisterPermissionTemplates.class);
private final LoadedTemplateDao loadedTemplateDao;
private final PermissionTemplateDao permissionTemplateDao;
diff --git a/server/sonar-server/src/main/java/org/sonar/server/startup/RenameDeprecatedPropertyKeys.java b/server/sonar-server/src/main/java/org/sonar/server/startup/RenameDeprecatedPropertyKeys.java
index f74e9b1898a..8111277c509 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/startup/RenameDeprecatedPropertyKeys.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/startup/RenameDeprecatedPropertyKeys.java
@@ -20,7 +20,7 @@
package org.sonar.server.startup;
import com.google.common.base.Strings;
-import org.slf4j.LoggerFactory;
+import org.sonar.api.utils.log.Loggers;
import org.sonar.api.config.PropertyDefinition;
import org.sonar.api.config.PropertyDefinitions;
import org.sonar.core.properties.PropertiesDao;
@@ -39,7 +39,7 @@ public class RenameDeprecatedPropertyKeys {
}
public void start() {
- LoggerFactory.getLogger(RenameDeprecatedPropertyKeys.class).info("Rename deprecated property keys");
+ Loggers.get(RenameDeprecatedPropertyKeys.class).info("Rename deprecated property keys");
for (PropertyDefinition definition : definitions.getAll()) {
if (!Strings.isNullOrEmpty(definition.deprecatedKey())) {
dao.renamePropertyKey(definition.deprecatedKey(), definition.key());
diff --git a/server/sonar-server/src/main/java/org/sonar/server/startup/ServerMetadataPersister.java b/server/sonar-server/src/main/java/org/sonar/server/startup/ServerMetadataPersister.java
index 64712848ac7..8e6e6c9c08f 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/startup/ServerMetadataPersister.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/startup/ServerMetadataPersister.java
@@ -21,7 +21,7 @@ package org.sonar.server.startup;
import com.google.common.collect.ImmutableMap;
import org.picocontainer.Startable;
-import org.slf4j.LoggerFactory;
+import org.sonar.api.utils.log.Loggers;
import org.sonar.api.CoreProperties;
import org.sonar.api.platform.Server;
import org.sonar.server.platform.PersistentSettings;
@@ -40,7 +40,7 @@ public final class ServerMetadataPersister implements Startable {
@Override
public void start() {
- LoggerFactory.getLogger(getClass()).debug("Persisting server metadata");
+ Loggers.get(getClass()).debug("Persisting server metadata");
persistentSettings.saveProperties(ImmutableMap.of(
CoreProperties.SERVER_ID, server.getId(),
CoreProperties.SERVER_VERSION, server.getVersion(),
diff --git a/server/sonar-server/src/main/java/org/sonar/server/ui/JRubyFacade.java b/server/sonar-server/src/main/java/org/sonar/server/ui/JRubyFacade.java
index 9318df53313..f7a3a25875f 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/ui/JRubyFacade.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/ui/JRubyFacade.java
@@ -19,7 +19,7 @@
*/
package org.sonar.server.ui;
-import org.slf4j.LoggerFactory;
+import org.sonar.api.utils.log.Loggers;
import org.sonar.api.config.License;
import org.sonar.api.config.PropertyDefinitions;
import org.sonar.api.config.Settings;
@@ -279,7 +279,7 @@ public final class JRubyFacade {
try {
return get(Class.forName(className));
} catch (ClassNotFoundException e) {
- LoggerFactory.getLogger(getClass()).error("Component not found: " + className, e);
+ Loggers.get(getClass()).error("Component not found: " + className, e);
return null;
}
}
@@ -313,13 +313,13 @@ public final class JRubyFacade {
try {
get(ComponentCleanerService.class).delete(projectKey);
} catch (RuntimeException e) {
- LoggerFactory.getLogger(JRubyFacade.class).error("Fail to delete resource with key: " + projectKey, e);
+ Loggers.get(JRubyFacade.class).error("Fail to delete resource with key: " + projectKey, e);
throw e;
}
}
public void logError(String message) {
- LoggerFactory.getLogger(getClass()).error(message);
+ Loggers.get(getClass()).error(message);
}
public boolean hasSecretKey() {
diff --git a/server/sonar-server/src/main/java/org/sonar/server/ui/JRubyProfiling.java b/server/sonar-server/src/main/java/org/sonar/server/ui/JRubyProfiling.java
index c142a49c0ef..3d8f3930cea 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/ui/JRubyProfiling.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/ui/JRubyProfiling.java
@@ -20,8 +20,9 @@
package org.sonar.server.ui;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
import org.sonar.core.profiling.Profiling;
import org.sonar.core.profiling.Profiling.Level;
import org.sonar.core.profiling.StopWatch;
@@ -31,7 +32,7 @@ import org.sonar.core.profiling.StopWatch;
*/
public class JRubyProfiling {
- private static final Logger LOG = LoggerFactory.getLogger(JRubyProfiling.class);
+ private static final Logger LOG = Loggers.get(JRubyProfiling.class);
private Profiling profiling;
diff --git a/server/sonar-server/src/main/java/org/sonar/server/user/NewUserNotifier.java b/server/sonar-server/src/main/java/org/sonar/server/user/NewUserNotifier.java
index 1a8fce0e8f2..a3b8da575d8 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/user/NewUserNotifier.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/user/NewUserNotifier.java
@@ -19,7 +19,7 @@
*/
package org.sonar.server.user;
-import org.slf4j.LoggerFactory;
+import org.sonar.api.utils.log.Loggers;
import org.sonar.api.ServerComponent;
import org.sonar.api.platform.NewUserHandler;
@@ -39,7 +39,7 @@ public class NewUserNotifier implements ServerComponent {
}
public void onNewUser(NewUserHandler.Context context) {
- LoggerFactory.getLogger(NewUserNotifier.class).debug("User created: " + context.getLogin() + ". Notifying " + NewUserHandler.class.getSimpleName() + " handlers...");
+ Loggers.get(NewUserNotifier.class).debug("User created: " + context.getLogin() + ". Notifying " + NewUserHandler.class.getSimpleName() + " handlers...");
for (NewUserHandler handler : handlers) {
handler.doOnNewUser(context);
}
diff --git a/server/sonar-server/src/main/java/org/sonar/server/user/SecurityRealmFactory.java b/server/sonar-server/src/main/java/org/sonar/server/user/SecurityRealmFactory.java
index dfe9017e2ab..c6f9cd806d9 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/user/SecurityRealmFactory.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/user/SecurityRealmFactory.java
@@ -21,14 +21,14 @@ package org.sonar.server.user;
import org.apache.commons.lang.StringUtils;
import org.picocontainer.Startable;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.sonar.api.CoreProperties;
import org.sonar.api.ServerComponent;
import org.sonar.api.config.Settings;
import org.sonar.api.security.LoginPasswordAuthenticator;
import org.sonar.api.security.SecurityRealm;
import org.sonar.api.utils.SonarException;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
/**
* @since 2.14
@@ -76,7 +76,7 @@ public class SecurityRealmFactory implements ServerComponent, Startable {
@Override
public void start() {
if (realm != null) {
- Logger logger = LoggerFactory.getLogger("org.sonar.INFO");
+ Logger logger = Loggers.get("org.sonar.INFO");
try {
logger.info("Security realm: " + realm.getName());
realm.init();
diff --git a/server/sonar-server/src/main/java/org/sonar/server/user/UserSession.java b/server/sonar-server/src/main/java/org/sonar/server/user/UserSession.java
index 68fced94686..c7e3c95f658 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/user/UserSession.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/user/UserSession.java
@@ -22,9 +22,9 @@ package org.sonar.server.user;
import com.google.common.base.Objects;
import com.google.common.base.Strings;
import com.google.common.collect.HashMultimap;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.sonar.api.security.DefaultGroups;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
import org.sonar.core.permission.GlobalPermissions;
import org.sonar.core.resource.ResourceDao;
import org.sonar.core.resource.ResourceDto;
@@ -36,7 +36,13 @@ import org.sonar.server.platform.Platform;
import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Set;
import static com.google.common.collect.Lists.newArrayList;
import static com.google.common.collect.Maps.newHashMap;
@@ -50,7 +56,7 @@ public class UserSession {
public static final UserSession ANONYMOUS = new UserSession();
private static final ThreadLocal<UserSession> THREAD_LOCAL = new ThreadLocal<UserSession>();
- private static final Logger LOG = LoggerFactory.getLogger(UserSession.class);
+ private static final Logger LOG = Loggers.get(UserSession.class);
private static final String INSUFFICIENT_PRIVILEGES_MESSAGE = "Insufficient privileges";
private Integer userId;
diff --git a/server/sonar-server/src/main/java/org/sonar/server/util/ProgressLogger.java b/server/sonar-server/src/main/java/org/sonar/server/util/ProgressLogger.java
index de0ba605c9b..660dfcd4ded 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/util/ProgressLogger.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/util/ProgressLogger.java
@@ -19,8 +19,9 @@
*/
package org.sonar.server.util;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
import java.util.Timer;
import java.util.TimerTask;
@@ -44,7 +45,7 @@ public class ProgressLogger {
public static ProgressLogger create(Class clazz, AtomicLong counter) {
String threadName = String.format("ProgressLogger[%s]", clazz.getSimpleName());
- Logger logger = LoggerFactory.getLogger(clazz);
+ Logger logger = Loggers.get(clazz);
return new ProgressLogger(threadName, counter, logger);
}
diff --git a/server/sonar-server/src/main/java/org/sonar/server/ws/WebServiceEngine.java b/server/sonar-server/src/main/java/org/sonar/server/ws/WebServiceEngine.java
index fe12f49acd7..c27b2bb7132 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/ws/WebServiceEngine.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/ws/WebServiceEngine.java
@@ -21,7 +21,7 @@ package org.sonar.server.ws;
import com.google.common.base.Charsets;
import org.picocontainer.Startable;
-import org.slf4j.LoggerFactory;
+import org.sonar.api.utils.log.Loggers;
import org.sonar.api.ServerComponent;
import org.sonar.api.i18n.I18n;
import org.sonar.api.server.ws.Request;
@@ -91,7 +91,8 @@ public class WebServiceEngine implements ServerComponent, Startable {
} catch (ServerException e) {
sendErrors(response, e.httpCode(), new Errors().add(Message.of(e.getMessage())));
} catch (Exception e) {
- LoggerFactory.getLogger(getClass()).error("Fail to process request " + request, e);
+ // TODO implement Request.toString()
+ Loggers.get(getClass()).error("Fail to process request " + request, e);
sendErrors(response, 500, new Errors().add(Message.of(e.getMessage())));
}
}
diff --git a/server/sonar-server/src/test/java/org/sonar/core/computation/dbcleaner/ProjectCleanerTest.java b/server/sonar-server/src/test/java/org/sonar/core/computation/dbcleaner/ProjectCleanerTest.java
index f2a58bd6107..d72ffb96335 100644
--- a/server/sonar-server/src/test/java/org/sonar/core/computation/dbcleaner/ProjectCleanerTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/core/computation/dbcleaner/ProjectCleanerTest.java
@@ -22,9 +22,9 @@ package org.sonar.core.computation.dbcleaner;
import org.junit.Before;
import org.junit.Test;
-import org.slf4j.Logger;
import org.sonar.api.CoreProperties;
import org.sonar.api.config.Settings;
+import org.sonar.api.utils.log.Logger;
import org.sonar.core.computation.dbcleaner.period.DefaultPeriodCleaner;
import org.sonar.core.persistence.DbSession;
import org.sonar.core.purge.IdUuidPair;
diff --git a/server/sonar-server/src/test/java/org/sonar/server/app/StartupLogsTest.java b/server/sonar-server/src/test/java/org/sonar/server/app/StartupLogsTest.java
index b4906a5ca14..1d85a118a00 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/app/StartupLogsTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/app/StartupLogsTest.java
@@ -24,7 +24,7 @@ import org.apache.catalina.startup.Tomcat;
import org.apache.coyote.http11.AbstractHttp11JsseProtocol;
import org.junit.Test;
import org.mockito.Mockito;
-import org.slf4j.Logger;
+import org.sonar.api.utils.log.Logger;
import org.sonar.process.Props;
import java.util.Properties;
diff --git a/server/sonar-server/src/test/java/org/sonar/server/app/TomcatAccessLogTest.java b/server/sonar-server/src/test/java/org/sonar/server/app/TomcatAccessLogTest.java
index 7e081214eb3..0e64c81de60 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/app/TomcatAccessLogTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/app/TomcatAccessLogTest.java
@@ -27,7 +27,7 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import org.mockito.Mockito;
-import org.slf4j.Logger;
+import org.sonar.api.utils.log.Logger;
import org.sonar.process.ProcessConstants;
import org.sonar.process.Props;
diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/issue/ScmAccountCacheLoaderTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/issue/ScmAccountCacheLoaderTest.java
index fd070959266..faa52fcbec6 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/computation/issue/ScmAccountCacheLoaderTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/computation/issue/ScmAccountCacheLoaderTest.java
@@ -22,8 +22,8 @@ package org.sonar.server.computation.issue;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Test;
-import org.slf4j.Logger;
import org.sonar.api.config.Settings;
+import org.sonar.api.utils.log.Logger;
import org.sonar.server.es.EsTester;
import org.sonar.server.user.index.UserIndex;
import org.sonar.server.user.index.UserIndexDefinition;
diff --git a/server/sonar-server/src/test/java/org/sonar/server/db/migrations/SqlUtilTest.java b/server/sonar-server/src/test/java/org/sonar/server/db/migrations/SqlUtilTest.java
index b3bcc72ead8..2e18a4531b5 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/db/migrations/SqlUtilTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/db/migrations/SqlUtilTest.java
@@ -20,7 +20,7 @@
package org.sonar.server.db.migrations;
import org.junit.Test;
-import org.slf4j.Logger;
+import org.sonar.api.utils.log.Logger;
import java.sql.SQLException;
diff --git a/server/sonar-server/src/test/java/org/sonar/server/db/migrations/v36/ProgressTest.java b/server/sonar-server/src/test/java/org/sonar/server/db/migrations/v36/ProgressTest.java
index d7800ebf86a..4ce1d029507 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/db/migrations/v36/ProgressTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/db/migrations/v36/ProgressTest.java
@@ -21,12 +21,10 @@ package org.sonar.server.db.migrations.v36;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
-import org.slf4j.Logger;
+import org.sonar.api.utils.log.Logger;
import static org.assertj.core.api.Assertions.assertThat;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.*;
public class ProgressTest {
@Test
diff --git a/server/sonar-server/src/test/java/org/sonar/server/platform/SwitchLogbackAppenderTest.java b/server/sonar-server/src/test/java/org/sonar/server/platform/SwitchLogbackAppenderTest.java
deleted file mode 100644
index de87f67f688..00000000000
--- a/server/sonar-server/src/test/java/org/sonar/server/platform/SwitchLogbackAppenderTest.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * SonarQube, open source software quality management tool.
- * Copyright (C) 2008-2014 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * SonarQube is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * SonarQube is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-package org.sonar.server.platform;
-
-import ch.qos.logback.classic.Logger;
-import ch.qos.logback.classic.LoggerContext;
-import ch.qos.logback.classic.joran.JoranConfigurator;
-import ch.qos.logback.classic.spi.ILoggingEvent;
-import ch.qos.logback.core.joran.spi.JoranException;
-import ch.qos.logback.core.read.ListAppender;
-import ch.qos.logback.core.status.Status;
-import ch.qos.logback.core.util.StatusPrinter;
-import org.junit.Test;
-import org.sonar.server.computation.ComputationThreadLauncher;
-
-import java.net.URL;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-public class SwitchLogbackAppenderTest {
-
- LoggerContext loggerContext = new LoggerContext();
- Logger logger = loggerContext.getLogger(this.getClass().getName());
- SwitchLogbackAppender switchAppender;
- ListAppender<ILoggingEvent> console, analyisReports;
-
- protected void configure(URL file) throws JoranException {
- JoranConfigurator jc = new JoranConfigurator();
- jc.setContext(loggerContext);
- jc.doConfigure(file);
-
- Logger root = loggerContext.getLogger(Logger.ROOT_LOGGER_NAME);
- switchAppender = (SwitchLogbackAppender) root.getAppender("SWITCH");
- console = (ListAppender<ILoggingEvent>) switchAppender.getAppender("CONSOLE");
- analyisReports = (ListAppender<ILoggingEvent>) switchAppender.getAppender("ANALYSIS_REPORTS");
- }
-
- /**
- * Standard log goes to console only
- */
- @Test
- public void standard_log() throws JoranException {
- configure(getClass().getResource("SwitchLogbackAppenderTest/valid-switch.xml"));
-
- logger.info("hello");
-
- assertThat(console.list).hasSize(1);
- assertThat(console.list.get(0).getMessage()).isEqualTo("hello");
- assertThat(analyisReports.list).isEmpty();
- }
-
- /**
- * Compute service log goes to dedicated appender. Warnings and errors are logged in both appenders.
- */
- @Test
- public void compute_service_log_goes_to_dedicated_appender() throws JoranException {
- configure(getClass().getResource("SwitchLogbackAppenderTest/valid-switch.xml"));
-
- String initialThreadName = Thread.currentThread().getName();
- Thread.currentThread().setName(ComputationThreadLauncher.THREAD_NAME_PREFIX + "test");
- try {
- logger.info("hello");
- assertThat(analyisReports.list).hasSize(1);
- assertThat(analyisReports.list.get(0).getMessage()).isEqualTo("hello");
- assertThat(console.list).isEmpty();
-
- logger.warn("a warning");
- assertThat(analyisReports.list).hasSize(2);
- assertThat(analyisReports.list.get(1).getMessage()).isEqualTo("a warning");
- assertThat(console.list).hasSize(1);
- assertThat(console.list.get(0).getMessage()).isEqualTo("a warning");
-
- logger.error("an error");
- assertThat(analyisReports.list).hasSize(3);
- assertThat(analyisReports.list.get(2).getMessage()).isEqualTo("an error");
- assertThat(console.list).hasSize(2);
- assertThat(console.list.get(1).getMessage()).isEqualTo("an error");
-
- } finally {
- Thread.currentThread().setName(initialThreadName);
- }
- }
-
- @Test
- public void fail_if_bad_configuration() throws JoranException {
- boolean foundError = false;
- configure(getClass().getResource("SwitchLogbackAppenderTest/invalid-switch.xml"));
- StatusPrinter.printInCaseOfErrorsOrWarnings(loggerContext);
- for (Status status : loggerContext.getStatusManager().getCopyOfStatusList()) {
- Throwable error = status.getThrowable();
- if (error != null) {
- assertThat(error).hasMessage("Invalid appender name: UNKNOWN");
- foundError = true;
- }
- }
- assertThat(foundError).isTrue();
- }
-
- @Test
- public void test_logback_internals() throws Exception {
- configure(getClass().getResource("SwitchLogbackAppenderTest/valid-switch.xml"));
-
- assertThat(switchAppender.iteratorForAppenders()).hasSize(2);
- assertThat(switchAppender.isAttached(console)).isTrue();
-
- assertThat(switchAppender.detachAppender("CONSOLE")).isTrue();
- assertThat(switchAppender.detachAppender(analyisReports)).isTrue();
- switchAppender.detachAndStopAllAppenders();
- }
-}
diff --git a/server/sonar-server/src/test/java/org/sonar/server/startup/ActivityServerIdTest.java b/server/sonar-server/src/test/java/org/sonar/server/startup/ActivityServerIdTest.java
index 96ecafa0193..8e5466dfeda 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/startup/ActivityServerIdTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/startup/ActivityServerIdTest.java
@@ -23,8 +23,8 @@ import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
-import org.slf4j.Logger;
import org.sonar.api.CoreProperties;
+import org.sonar.api.utils.log.Logger;
import org.sonar.core.properties.PropertiesDao;
import org.sonar.core.properties.PropertyDto;
diff --git a/server/sonar-server/src/test/java/org/sonar/server/tester/ServerTester.java b/server/sonar-server/src/test/java/org/sonar/server/tester/ServerTester.java
index e444f2be0fa..3644a921813 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/tester/ServerTester.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/tester/ServerTester.java
@@ -25,10 +25,10 @@ import com.google.common.collect.Lists;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils;
import org.junit.rules.ExternalResource;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.sonar.api.database.DatabaseProperties;
import org.sonar.api.resources.Language;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
import org.sonar.process.ProcessConstants;
import org.sonar.server.es.EsServerHolder;
import org.sonar.server.platform.BackendCleanup;
@@ -54,7 +54,7 @@ import java.util.Properties;
*/
public class ServerTester extends ExternalResource {
- private static final Logger LOG = LoggerFactory.getLogger(ServerTester.class);
+ private static final Logger LOG = Loggers.get(ServerTester.class);
private static final String PROP_PREFIX = "mediumTests.";
private Platform platform;
diff --git a/server/sonar-server/src/test/java/org/sonar/server/util/ProgressLoggerTest.java b/server/sonar-server/src/test/java/org/sonar/server/util/ProgressLoggerTest.java
index 2fde99f4572..1ce230c21f3 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/util/ProgressLoggerTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/util/ProgressLoggerTest.java
@@ -20,14 +20,12 @@
package org.sonar.server.util;
import org.junit.Test;
-import org.slf4j.Logger;
+import org.sonar.api.utils.log.Logger;
import java.util.concurrent.atomic.AtomicLong;
import static org.assertj.core.api.Assertions.assertThat;
-import static org.mockito.Mockito.atLeast;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.*;
public class ProgressLoggerTest {
diff --git a/server/sonar-server/src/test/resources/org/sonar/server/platform/SwitchLogbackAppenderTest/invalid-switch.xml b/server/sonar-server/src/test/resources/org/sonar/server/platform/SwitchLogbackAppenderTest/invalid-switch.xml
deleted file mode 100644
index 7e59f112353..00000000000
--- a/server/sonar-server/src/test/resources/org/sonar/server/platform/SwitchLogbackAppenderTest/invalid-switch.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<configuration debug="false">
- <appender name="CONSOLE" class="ch.qos.logback.core.read.ListAppender" />
- <appender name="UNKNOWN" class="ch.qos.logback.core.read.ListAppender" />
-
- <appender name="SWITCH" class="org.sonar.server.platform.SwitchLogbackAppender">
- <appender-ref ref="CONSOLE" />
- <appender-ref ref="UNKNOWN" />
- </appender>
-
- <root level="DEBUG">
- <appender-ref ref="SWITCH" />
- </root>
-</configuration>
diff --git a/server/sonar-server/src/test/resources/org/sonar/server/platform/SwitchLogbackAppenderTest/valid-switch.xml b/server/sonar-server/src/test/resources/org/sonar/server/platform/SwitchLogbackAppenderTest/valid-switch.xml
deleted file mode 100644
index e9021148527..00000000000
--- a/server/sonar-server/src/test/resources/org/sonar/server/platform/SwitchLogbackAppenderTest/valid-switch.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<configuration debug="false">
- <appender name="CONSOLE" class="ch.qos.logback.core.read.ListAppender" />
- <appender name="ANALYSIS_REPORTS" class="ch.qos.logback.core.read.ListAppender" />
-
- <appender name="SWITCH" class="org.sonar.server.platform.SwitchLogbackAppender">
- <!-- do not change appender names. See org.sonar.server.platform.SwitchLogbackAppender -->
- <appender-ref ref="CONSOLE" />
- <appender-ref ref="ANALYSIS_REPORTS" />
- </appender>
-
- <root level="DEBUG">
- <appender-ref ref="SWITCH" />
- </root>
-</configuration>
diff --git a/sonar-batch/pom.xml b/sonar-batch/pom.xml
index d96777a8b16..7d1559266c3 100644
--- a/sonar-batch/pom.xml
+++ b/sonar-batch/pom.xml
@@ -92,6 +92,18 @@
<artifactId>slf4j-api</artifactId>
</dependency>
<dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>jcl-over-slf4j</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>log4j-over-slf4j</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>jul-to-slf4j</artifactId>
+ </dependency>
+ <dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-plugin-api</artifactId>
<scope>provided</scope>
diff --git a/sonar-batch/src/main/java/org/sonar/batch/debt/DebtModelProvider.java b/sonar-batch/src/main/java/org/sonar/batch/debt/DebtModelProvider.java
index a00b9f909f5..bb434c22737 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/debt/DebtModelProvider.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/debt/DebtModelProvider.java
@@ -23,13 +23,13 @@ package org.sonar.batch.debt;
import com.google.common.base.Predicate;
import com.google.common.collect.Iterables;
import org.picocontainer.injectors.ProviderAdapter;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.sonar.api.batch.debt.DebtCharacteristic;
import org.sonar.api.batch.debt.DebtModel;
import org.sonar.api.batch.debt.internal.DefaultDebtCharacteristic;
import org.sonar.api.batch.debt.internal.DefaultDebtModel;
import org.sonar.api.utils.TimeProfiler;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
import org.sonar.core.technicaldebt.db.CharacteristicDao;
import org.sonar.core.technicaldebt.db.CharacteristicDto;
@@ -39,7 +39,7 @@ import java.util.List;
public class DebtModelProvider extends ProviderAdapter {
- private static final Logger LOG = LoggerFactory.getLogger(DebtModelProvider.class);
+ private static final Logger LOG = Loggers.get(DebtModelProvider.class);
private DebtModel model;
diff --git a/sonar-batch/src/main/java/org/sonar/batch/rule/RulesProvider.java b/sonar-batch/src/main/java/org/sonar/batch/rule/RulesProvider.java
index 744c5caa5ba..e5125616e9c 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/rule/RulesProvider.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/rule/RulesProvider.java
@@ -23,8 +23,6 @@ package org.sonar.batch.rule;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.ListMultimap;
import org.picocontainer.injectors.ProviderAdapter;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.sonar.api.batch.debt.DebtCharacteristic;
import org.sonar.api.batch.debt.DebtModel;
import org.sonar.api.batch.debt.DebtRemediationFunction;
@@ -35,6 +33,8 @@ import org.sonar.api.batch.rule.internal.RulesBuilder;
import org.sonar.api.rule.RuleKey;
import org.sonar.api.utils.Durations;
import org.sonar.api.utils.TimeProfiler;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
import org.sonar.core.rule.RuleDao;
import org.sonar.core.rule.RuleDto;
import org.sonar.core.rule.RuleParamDto;
@@ -48,7 +48,7 @@ import java.util.List;
*/
public class RulesProvider extends ProviderAdapter {
- private static final Logger LOG = LoggerFactory.getLogger(RulesProvider.class);
+ private static final Logger LOG = Loggers.get(RulesProvider.class);
private Rules singleton = null;
diff --git a/sonar-batch/src/main/java/org/sonar/batch/scan/LastLineHashes.java b/sonar-batch/src/main/java/org/sonar/batch/scan/LastLineHashes.java
index 2f8cb99d172..5dc690a9da6 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/scan/LastLineHashes.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/scan/LastLineHashes.java
@@ -21,15 +21,15 @@ package org.sonar.batch.scan;
import com.google.common.base.Splitter;
import com.google.common.collect.Iterators;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.sonar.api.BatchComponent;
import org.sonar.api.utils.TimeProfiler;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
import org.sonar.batch.bootstrap.ServerClient;
public class LastLineHashes implements BatchComponent {
- private static final Logger LOG = LoggerFactory.getLogger(LastLineHashes.class);
+ private static final Logger LOG = Loggers.get(LastLineHashes.class);
private final ServerClient server;
diff --git a/sonar-core/src/main/java/org/sonar/core/computation/dbcleaner/DefaultPurgeTask.java b/sonar-core/src/main/java/org/sonar/core/computation/dbcleaner/DefaultPurgeTask.java
index cab746aa79b..d9e7f18193b 100644
--- a/sonar-core/src/main/java/org/sonar/core/computation/dbcleaner/DefaultPurgeTask.java
+++ b/sonar-core/src/main/java/org/sonar/core/computation/dbcleaner/DefaultPurgeTask.java
@@ -21,14 +21,18 @@
package org.sonar.core.computation.dbcleaner;
import com.google.common.annotations.VisibleForTesting;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.sonar.api.CoreProperties;
import org.sonar.api.config.Settings;
import org.sonar.api.resources.Qualifiers;
import org.sonar.api.utils.TimeUtils;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
import org.sonar.core.computation.dbcleaner.period.DefaultPeriodCleaner;
-import org.sonar.core.purge.*;
+import org.sonar.core.purge.IdUuidPair;
+import org.sonar.core.purge.PurgeConfiguration;
+import org.sonar.core.purge.PurgeDao;
+import org.sonar.core.purge.PurgeListener;
+import org.sonar.core.purge.PurgeProfiler;
import org.sonar.core.resource.ResourceDao;
import org.sonar.core.resource.ResourceDto;
import org.sonar.plugins.dbcleaner.api.PurgeTask;
@@ -39,7 +43,7 @@ import static org.sonar.core.purge.PurgeConfiguration.newDefaultPurgeConfigurati
* @since 2.14
*/
public class DefaultPurgeTask implements PurgeTask {
- private static final Logger LOG = LoggerFactory.getLogger(DefaultPurgeTask.class);
+ private static final Logger LOG = Loggers.get(DefaultPurgeTask.class);
private final PurgeProfiler profiler;
private final PurgeDao purgeDao;
private final ResourceDao resourceDao;
diff --git a/sonar-core/src/main/java/org/sonar/core/purge/PurgeProfiler.java b/sonar-core/src/main/java/org/sonar/core/purge/PurgeProfiler.java
index 41d68ae2f64..e3552b5b66c 100644
--- a/sonar-core/src/main/java/org/sonar/core/purge/PurgeProfiler.java
+++ b/sonar-core/src/main/java/org/sonar/core/purge/PurgeProfiler.java
@@ -20,8 +20,8 @@
package org.sonar.core.purge;
import com.google.common.annotations.VisibleForTesting;
-import org.slf4j.Logger;
import org.sonar.api.utils.TimeUtils;
+import org.sonar.api.utils.log.Logger;
import java.util.ArrayList;
import java.util.Collections;
diff --git a/sonar-core/src/test/java/org/sonar/core/computation/dbcleaner/DefaultPurgeTaskTest.java b/sonar-core/src/test/java/org/sonar/core/computation/dbcleaner/DefaultPurgeTaskTest.java
index a65dda0382d..35d53aba1bf 100644
--- a/sonar-core/src/test/java/org/sonar/core/computation/dbcleaner/DefaultPurgeTaskTest.java
+++ b/sonar-core/src/test/java/org/sonar/core/computation/dbcleaner/DefaultPurgeTaskTest.java
@@ -20,7 +20,6 @@
package org.sonar.core.computation.dbcleaner;
-import ch.qos.logback.classic.Logger;
import org.junit.Before;
import org.junit.Test;
import org.mockito.ArgumentMatcher;
@@ -29,8 +28,13 @@ import org.sonar.api.config.PropertyDefinitions;
import org.sonar.api.config.Settings;
import org.sonar.api.resources.Qualifiers;
import org.sonar.api.resources.Scopes;
+import org.sonar.api.utils.log.Logger;
import org.sonar.core.computation.dbcleaner.period.DefaultPeriodCleaner;
-import org.sonar.core.purge.*;
+import org.sonar.core.purge.IdUuidPair;
+import org.sonar.core.purge.PurgeConfiguration;
+import org.sonar.core.purge.PurgeDao;
+import org.sonar.core.purge.PurgeListener;
+import org.sonar.core.purge.PurgeProfiler;
import org.sonar.core.resource.ResourceDao;
import org.sonar.core.resource.ResourceDto;
diff --git a/sonar-core/src/test/java/org/sonar/core/purge/PurgeProfilerTest.java b/sonar-core/src/test/java/org/sonar/core/purge/PurgeProfilerTest.java
index cbbe9088e83..fa80b2ea735 100644
--- a/sonar-core/src/test/java/org/sonar/core/purge/PurgeProfilerTest.java
+++ b/sonar-core/src/test/java/org/sonar/core/purge/PurgeProfilerTest.java
@@ -21,7 +21,7 @@ package org.sonar.core.purge;
import org.junit.Before;
import org.junit.Test;
-import org.slf4j.Logger;
+import org.sonar.api.utils.log.Logger;
import static org.mockito.Matchers.contains;
import static org.mockito.Mockito.mock;
diff --git a/sonar-deprecated/src/main/java/org/sonar/api/rules/AnnotationRuleParser.java b/sonar-deprecated/src/main/java/org/sonar/api/rules/AnnotationRuleParser.java
index acf870597af..6a458a3ba72 100644
--- a/sonar-deprecated/src/main/java/org/sonar/api/rules/AnnotationRuleParser.java
+++ b/sonar-deprecated/src/main/java/org/sonar/api/rules/AnnotationRuleParser.java
@@ -25,13 +25,13 @@ import com.google.common.base.Functions;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists;
import org.apache.commons.lang.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.sonar.api.PropertyType;
import org.sonar.api.ServerComponent;
import org.sonar.api.utils.AnnotationUtils;
import org.sonar.api.utils.FieldUtils2;
import org.sonar.api.utils.SonarException;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
import java.lang.reflect.Field;
import java.util.Collection;
@@ -44,7 +44,7 @@ import java.util.List;
@Deprecated
public final class AnnotationRuleParser implements ServerComponent {
- private static final Logger LOG = LoggerFactory.getLogger(AnnotationRuleParser.class);
+ private static final Logger LOG = Loggers.get(AnnotationRuleParser.class);
public List<Rule> parse(String repositoryKey, Collection<Class> annotatedClasses) {
List<Rule> rules = Lists.newArrayList();
diff --git a/sonar-duplications/src/test/java/org/sonar/duplications/DuplicationsTestUtil.java b/sonar-duplications/src/test/java/org/sonar/duplications/DuplicationsTestUtil.java
index 8d9adaa5411..24e006078e7 100644
--- a/sonar-duplications/src/test/java/org/sonar/duplications/DuplicationsTestUtil.java
+++ b/sonar-duplications/src/test/java/org/sonar/duplications/DuplicationsTestUtil.java
@@ -23,10 +23,13 @@ import java.io.File;
public class DuplicationsTestUtil {
- private static final File fileDir = new File("src/test/files/");
-
public static File findFile(String relativePathToFile) {
- return new File(fileDir, relativePathToFile);
+ File file = new File("src/test/files/", relativePathToFile);
+ if (!file.exists()) {
+ // IntellijIDEA resolves path from root module basedir
+ file = new File("sonar-duplications/src/test/files/", relativePathToFile);
+ }
+ return file;
}
}
diff --git a/sonar-plugin-api/pom.xml b/sonar-plugin-api/pom.xml
index 6eeb77a9630..fef2a0bed26 100644
--- a/sonar-plugin-api/pom.xml
+++ b/sonar-plugin-api/pom.xml
@@ -34,10 +34,22 @@
<dependency>
<groupId>org.codehaus.sonar</groupId>
<artifactId>sonar-colorizer</artifactId>
+ <exclusions>
+ <exclusion>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ </exclusion>
+ </exclusions>
</dependency>
<dependency>
<groupId>org.codehaus.sonar</groupId>
<artifactId>sonar-duplications</artifactId>
+ <exclusions>
+ <exclusion>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ </exclusion>
+ </exclusions>
</dependency>
<dependency>
<groupId>org.codehaus.sonar</groupId>
@@ -46,6 +58,12 @@
<dependency>
<groupId>org.codehaus.sonar</groupId>
<artifactId>sonar-squid</artifactId>
+ <exclusions>
+ <exclusion>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ </exclusion>
+ </exclusions>
</dependency>
<!-- TODO we can't remove hibernate-annotations, because currently it's used
@@ -54,11 +72,16 @@
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-annotations</artifactId>
+ <scope>provided</scope>
<exclusions>
<exclusion>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
</exclusion>
+ <exclusion>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ </exclusion>
</exclusions>
</dependency>
@@ -96,18 +119,12 @@
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>jcl-over-slf4j</artifactId>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>log4j-over-slf4j</artifactId>
+ <optional>true</optional>
</dependency>
<dependency>
<groupId>xpp3</groupId>
<artifactId>xpp3</artifactId>
+ <scope>provided</scope>
</dependency>
<dependency>
<groupId>org.codehaus.woodstox</groupId>
@@ -133,6 +150,16 @@
<version>3.0.1</version>
<optional>true</optional>
</dependency>
+ <dependency>
+ <groupId>ch.qos.logback</groupId>
+ <artifactId>logback-classic</artifactId>
+ <optional>true</optional>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <optional>true</optional>
+ </dependency>
<!-- unit tests -->
<dependency>
@@ -141,11 +168,6 @@
<scope>test</scope>
</dependency>
<dependency>
- <groupId>ch.qos.logback</groupId>
- <artifactId>logback-classic</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
<groupId>xmlunit</groupId>
<artifactId>xmlunit</artifactId>
<scope>test</scope>
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/batch/maven/MavenUtils.java b/sonar-plugin-api/src/main/java/org/sonar/api/batch/maven/MavenUtils.java
index 6fc76d56d9a..655edcdbecb 100644
--- a/sonar-plugin-api/src/main/java/org/sonar/api/batch/maven/MavenUtils.java
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/batch/maven/MavenUtils.java
@@ -23,7 +23,7 @@ import org.apache.commons.lang.StringUtils;
import org.apache.maven.model.Plugin;
import org.apache.maven.model.ReportPlugin;
import org.apache.maven.project.MavenProject;
-import org.slf4j.LoggerFactory;
+import org.sonar.api.utils.log.Loggers;
import java.nio.charset.Charset;
import java.util.Collection;
@@ -142,7 +142,7 @@ public final class MavenUtils {
return Charset.forName(encoding);
} catch (Exception e) {
- LoggerFactory.getLogger(MavenUtils.class).warn("Can not get project charset", e);
+ Loggers.get(MavenUtils.class).warn("Can not get project charset", e);
}
}
return Charset.defaultCharset();
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/platform/ComponentKeys.java b/sonar-plugin-api/src/main/java/org/sonar/api/platform/ComponentKeys.java
index 3a603649e3b..56de51f17e1 100644
--- a/sonar-plugin-api/src/main/java/org/sonar/api/platform/ComponentKeys.java
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/platform/ComponentKeys.java
@@ -20,9 +20,9 @@
package org.sonar.api.platform;
import com.google.common.annotations.VisibleForTesting;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.sonar.api.utils.internal.Uuids;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
import java.util.HashSet;
import java.util.Set;
@@ -37,7 +37,7 @@ class ComponentKeys {
private final Set<Class> objectsWithoutToString = new HashSet<Class>();
Object of(Object component) {
- return of(component, LoggerFactory.getLogger(ComponentKeys.class));
+ return of(component, Loggers.get(ComponentKeys.class));
}
@VisibleForTesting
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/resources/Languages.java b/sonar-plugin-api/src/main/java/org/sonar/api/resources/Languages.java
index 62590f42f36..055b3897c1d 100644
--- a/sonar-plugin-api/src/main/java/org/sonar/api/resources/Languages.java
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/resources/Languages.java
@@ -21,10 +21,10 @@ package org.sonar.api.resources;
import com.google.common.collect.Maps;
import org.apache.commons.lang.ArrayUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.sonar.api.BatchComponent;
import org.sonar.api.ServerComponent;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
import java.util.ArrayList;
import java.util.Arrays;
@@ -39,7 +39,7 @@ import java.util.Map;
*/
public class Languages implements BatchComponent, ServerComponent {
- private static final Logger LOG = LoggerFactory.getLogger(Languages.class);
+ private static final Logger LOG = Loggers.get(Languages.class);
private final Map<String, Language> map = Maps.newLinkedHashMap();
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/rules/Violation.java b/sonar-plugin-api/src/main/java/org/sonar/api/rules/Violation.java
index 3d963373c22..7f19e8214cd 100644
--- a/sonar-plugin-api/src/main/java/org/sonar/api/rules/Violation.java
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/rules/Violation.java
@@ -20,8 +20,8 @@
package org.sonar.api.rules;
import org.apache.commons.lang.builder.ReflectionToStringBuilder;
-import org.slf4j.LoggerFactory;
import org.sonar.api.resources.Resource;
+import org.sonar.api.utils.log.Loggers;
import java.util.Date;
@@ -128,7 +128,7 @@ public class Violation {
public Violation setLineId(Integer lineId) {
if (lineId != null && lineId < 1) {
// TODO this normalization was added in 2.8, throw exception in future versions - see http://jira.codehaus.org/browse/SONAR-2386
- LoggerFactory.getLogger(getClass()).warn("line must not be less than 1 - in future versions this will cause IllegalArgumentException");
+ Loggers.get(getClass()).warn("line must not be less than 1 - in future versions this will cause IllegalArgumentException");
this.lineId = null;
} else {
this.lineId = lineId;
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/server/rule/RulesDefinition.java b/sonar-plugin-api/src/main/java/org/sonar/api/server/rule/RulesDefinition.java
index f26cad3ae4c..6caa31b5217 100644
--- a/sonar-plugin-api/src/main/java/org/sonar/api/server/rule/RulesDefinition.java
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/server/rule/RulesDefinition.java
@@ -23,11 +23,11 @@ import com.google.common.base.Strings;
import com.google.common.collect.*;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
-import org.slf4j.LoggerFactory;
import org.sonar.api.ServerExtension;
import org.sonar.api.rule.RuleStatus;
import org.sonar.api.rule.Severity;
import org.sonar.api.server.debt.DebtRemediationFunction;
+import org.sonar.api.utils.log.Loggers;
import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
@@ -448,7 +448,7 @@ public interface RulesDefinition extends ServerExtension {
// Should fail in a perfect world, but at the time being the Findbugs plugin
// defines several times the rule EC_INCOMPATIBLE_ARRAY_COMPARE
// See http://jira.codehaus.org/browse/SONARJAVA-428
- LoggerFactory.getLogger(getClass()).warn(String.format("The rule '%s' of repository '%s' is declared several times", ruleKey, key));
+ Loggers.get(getClass()).warn(String.format("The rule '%s' of repository '%s' is declared several times", ruleKey, key));
}
NewRule newRule = new NewRule(key, ruleKey);
newRules.put(ruleKey, newRule);
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/server/rule/RulesDefinitionAnnotationLoader.java b/sonar-plugin-api/src/main/java/org/sonar/api/server/rule/RulesDefinitionAnnotationLoader.java
index 0c2a08f3dcc..d7b49912f4d 100644
--- a/sonar-plugin-api/src/main/java/org/sonar/api/server/rule/RulesDefinitionAnnotationLoader.java
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/server/rule/RulesDefinitionAnnotationLoader.java
@@ -24,14 +24,15 @@ import com.google.common.base.Function;
import com.google.common.base.Functions;
import com.google.common.collect.ImmutableMap;
import org.apache.commons.lang.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.sonar.api.rule.RuleStatus;
import org.sonar.api.utils.AnnotationUtils;
import org.sonar.api.utils.FieldUtils2;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
import org.sonar.check.Cardinality;
import javax.annotation.CheckForNull;
+
import java.lang.reflect.Field;
import java.util.List;
@@ -44,7 +45,7 @@ import java.util.List;
*/
public class RulesDefinitionAnnotationLoader {
- private static final Logger LOG = LoggerFactory.getLogger(RulesDefinitionAnnotationLoader.class);
+ private static final Logger LOG = Loggers.get(RulesDefinitionAnnotationLoader.class);
private static final Function<Class<?>, RuleParamType> TYPE_FOR_CLASS = Functions.forMap(
ImmutableMap.<Class<?>, RuleParamType>builder()
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/server/ws/internal/ValidatingRequest.java b/sonar-plugin-api/src/main/java/org/sonar/api/server/ws/internal/ValidatingRequest.java
index b0cce8cdbc2..054ba773196 100644
--- a/sonar-plugin-api/src/main/java/org/sonar/api/server/ws/internal/ValidatingRequest.java
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/server/ws/internal/ValidatingRequest.java
@@ -22,9 +22,9 @@ package org.sonar.api.server.ws.internal;
import com.google.common.base.Splitter;
import com.google.common.collect.Lists;
import org.apache.commons.lang.StringUtils;
-import org.slf4j.LoggerFactory;
import org.sonar.api.server.ws.Request;
import org.sonar.api.server.ws.WebService;
+import org.sonar.api.utils.log.Loggers;
import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
@@ -106,7 +106,7 @@ public abstract class ValidatingRequest extends Request {
private String readParamOrDefaultValue(String key, @Nullable WebService.Param definition) {
if (definition == null) {
String message = String.format("BUG - parameter '%s' is undefined for action '%s'", key, action.key());
- LoggerFactory.getLogger(getClass()).error(message);
+ Loggers.get(getClass()).error(message);
throw new IllegalArgumentException(message);
}
String deprecatedKey = definition.deprecatedKey();
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/utils/HttpDownloader.java b/sonar-plugin-api/src/main/java/org/sonar/api/utils/HttpDownloader.java
index 2df7765ff2b..ee0ba26214c 100644
--- a/sonar-plugin-api/src/main/java/org/sonar/api/utils/HttpDownloader.java
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/utils/HttpDownloader.java
@@ -32,11 +32,11 @@ import org.apache.commons.codec.binary.Base64;
import org.apache.commons.io.Charsets;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
-import org.slf4j.LoggerFactory;
import org.sonar.api.BatchComponent;
import org.sonar.api.ServerComponent;
import org.sonar.api.config.Settings;
import org.sonar.api.platform.Server;
+import org.sonar.api.utils.log.Loggers;
import javax.annotation.Nullable;
@@ -271,7 +271,7 @@ public class HttpDownloader extends UriReader.SchemeProcessor implements BatchCo
@Override
public InputStream getInput() throws IOException {
- LoggerFactory.getLogger(getClass()).debug("Download: " + uri + " (" + getProxySynthesis(uri, ProxySelector.getDefault()) + ")");
+ Loggers.get(getClass()).debug("Download: " + uri + " (" + getProxySynthesis(uri, ProxySelector.getDefault()) + ")");
HttpURLConnection connection = (HttpURLConnection) uri.toURL().openConnection();
connection.setRequestMethod(requestMethod);
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/utils/LocalizedMessages.java b/sonar-plugin-api/src/main/java/org/sonar/api/utils/LocalizedMessages.java
index 55df7e312ee..00ba41a1d4b 100644
--- a/sonar-plugin-api/src/main/java/org/sonar/api/utils/LocalizedMessages.java
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/utils/LocalizedMessages.java
@@ -21,14 +21,22 @@ package org.sonar.api.utils;
import com.google.common.collect.Iterators;
import com.google.common.collect.Lists;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.*;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
+
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+import java.util.Set;
public class LocalizedMessages extends ResourceBundle {
- private static final Logger LOG = LoggerFactory.getLogger(LocalizedMessages.class);
+ private static final Logger LOG = Loggers.get(LocalizedMessages.class);
private Locale locale;
private List<ResourceBundle> bundles;
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/utils/TimeProfiler.java b/sonar-plugin-api/src/main/java/org/sonar/api/utils/TimeProfiler.java
index 10b264d5124..ce86e880cdb 100644
--- a/sonar-plugin-api/src/main/java/org/sonar/api/utils/TimeProfiler.java
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/utils/TimeProfiler.java
@@ -19,8 +19,8 @@
*/
package org.sonar.api.utils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
/**
* A very simple profiler to log the time elapsed performing some tasks.
@@ -39,15 +39,24 @@ public class TimeProfiler {
this.logger = logger;
}
+ /**
+ * @deprecated do not use SLF4J but org.sonar.api.utils.log.Logger
+ * @since 5.1
+ */
+ @Deprecated
+ public TimeProfiler(org.slf4j.Logger logger) {
+ this.logger = Loggers.get(logger.getName());
+ }
+
public TimeProfiler(Class clazz) {
- this.logger = LoggerFactory.getLogger(clazz);
+ this.logger = Loggers.get(clazz);
}
/**
* Use the default Sonar logger
*/
public TimeProfiler() {
- this.logger = LoggerFactory.getLogger(getClass());
+ this.logger = Loggers.get(getClass());
}
public TimeProfiler start(String name) {
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/utils/ValidationMessages.java b/sonar-plugin-api/src/main/java/org/sonar/api/utils/ValidationMessages.java
index 4dffb8e57a7..e2455ef29e2 100644
--- a/sonar-plugin-api/src/main/java/org/sonar/api/utils/ValidationMessages.java
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/utils/ValidationMessages.java
@@ -21,7 +21,7 @@ package org.sonar.api.utils;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
-import org.slf4j.Logger;
+import org.sonar.api.utils.log.Logger;
import java.util.ArrayList;
import java.util.List;
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/utils/XpathParser.java b/sonar-plugin-api/src/main/java/org/sonar/api/utils/XpathParser.java
index 4b40db12e86..e206847699b 100644
--- a/sonar-plugin-api/src/main/java/org/sonar/api/utils/XpathParser.java
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/utils/XpathParser.java
@@ -21,8 +21,8 @@ package org.sonar.api.utils;
import org.apache.commons.io.Charsets;
import org.apache.commons.io.IOUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
@@ -78,7 +78,7 @@ public class XpathParser {
bf.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
bf.setFeature("http://apache.org/xml/features/allow-java-encodings", true);
} catch (ParserConfigurationException e) {
- Logger log = LoggerFactory.getLogger(this.getClass().getName());
+ Logger log = Loggers.get(this.getClass().getName());
log.error("Error occured during features set up.", e);
}
try {
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/utils/command/CommandExecutor.java b/sonar-plugin-api/src/main/java/org/sonar/api/utils/command/CommandExecutor.java
index 799d8896a21..e395c8ab820 100644
--- a/sonar-plugin-api/src/main/java/org/sonar/api/utils/command/CommandExecutor.java
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/utils/command/CommandExecutor.java
@@ -21,8 +21,8 @@ package org.sonar.api.utils.command;
import com.google.common.base.Charsets;
import com.google.common.io.Closeables;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
import javax.annotation.Nullable;
@@ -44,7 +44,7 @@ import java.util.concurrent.TimeUnit;
*/
public class CommandExecutor {
- private static final Logger LOG = LoggerFactory.getLogger(CommandExecutor.class);
+ private static final Logger LOG = Loggers.get(CommandExecutor.class);
private static final CommandExecutor INSTANCE = new CommandExecutor();
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/utils/log/BaseLogger.java b/sonar-plugin-api/src/main/java/org/sonar/api/utils/log/BaseLogger.java
new file mode 100644
index 00000000000..7dbec222096
--- /dev/null
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/utils/log/BaseLogger.java
@@ -0,0 +1,169 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.sonar.api.utils.log;
+
+import javax.annotation.Nullable;
+
+abstract class BaseLogger implements Logger {
+ @Override
+ public void debug(String msg) {
+ LogInterceptor.instance.log(msg);
+ doDebug(msg);
+ }
+
+ @Override
+ public void debug(String pattern, @Nullable Object arg) {
+ LogInterceptor.instance.log(pattern, arg);
+ doDebug(pattern, arg);
+ }
+
+ @Override
+ public void debug(String msg, @Nullable Object arg1, @Nullable Object arg2) {
+ LogInterceptor.instance.log(msg, arg1, arg2);
+ doDebug(msg, arg1, arg2);
+ }
+
+ @Override
+ public void debug(String msg, Object... args) {
+ LogInterceptor.instance.log(msg, args);
+ doDebug(msg, args);
+ }
+
+ @Override
+ public void info(String msg) {
+ LogInterceptor.instance.log(msg);
+ doInfo(msg);
+ }
+
+ @Override
+ public void info(String msg, @Nullable Object arg) {
+ LogInterceptor.instance.log(msg, arg);
+ doInfo(msg, arg);
+ }
+
+ @Override
+ public void info(String msg, @Nullable Object arg1, @Nullable Object arg2) {
+ LogInterceptor.instance.log(msg, arg1, arg2);
+ doInfo(msg, arg1, arg2);
+ }
+
+ @Override
+ public void info(String msg, Object... args) {
+ LogInterceptor.instance.log(msg, args);
+ doInfo(msg, args);
+ }
+
+ @Override
+ public void warn(String msg) {
+ LogInterceptor.instance.log(msg);
+ doWarn(msg);
+ }
+
+ @Override
+ public void warn(String msg, @Nullable Object arg) {
+ LogInterceptor.instance.log(msg, arg);
+ doWarn(msg, arg);
+ }
+
+ @Override
+ public void warn(String msg, @Nullable Object arg1, @Nullable Object arg2) {
+ LogInterceptor.instance.log(msg, arg1, arg2);
+ doWarn(msg, arg1, arg2);
+ }
+
+ @Override
+ public void warn(String msg, Object... args) {
+ LogInterceptor.instance.log(msg, args);
+ doWarn(msg, args);
+ }
+
+ @Override
+ public void error(String msg) {
+ LogInterceptor.instance.log(msg);
+ doError(msg);
+ }
+
+ @Override
+ public void error(String msg, @Nullable Object arg) {
+ LogInterceptor.instance.log(msg, arg);
+ doError(msg, arg);
+ }
+
+ @Override
+ public void error(String msg, @Nullable Object arg1, @Nullable Object arg2) {
+ LogInterceptor.instance.log(msg, arg1, arg2);
+ doError(msg, arg1, arg2);
+ }
+
+ @Override
+ public void error(String msg, Object... args) {
+ LogInterceptor.instance.log(msg, args);
+ doError(msg, args);
+ }
+
+ @Override
+ public void error(String msg, Throwable thrown) {
+ LogInterceptor.instance.log(msg, thrown);
+ doError(msg, thrown);
+ }
+
+ abstract void doDebug(String msg);
+
+ abstract void doDebug(String msg, @Nullable Object arg);
+
+ abstract void doDebug(String msg, @Nullable Object arg1, @Nullable Object arg2);
+
+ abstract void doDebug(String msg, Object... args);
+
+ /**
+ * Logs an INFO level message.
+ */
+ abstract void doInfo(String msg);
+
+ abstract void doInfo(String msg, @Nullable Object arg);
+
+ abstract void doInfo(String msg, @Nullable Object arg1, @Nullable Object arg2);
+
+ abstract void doInfo(String msg, Object... args);
+
+ /**
+ * Logs a WARN level message.
+ */
+ abstract void doWarn(String msg);
+
+ abstract void doWarn(String msg, @Nullable Object arg);
+
+ abstract void doWarn(String msg, @Nullable Object arg1, @Nullable Object arg2);
+
+ abstract void doWarn(String msg, Object... args);
+
+ /**
+ * Logs an ERROR level message.
+ */
+ abstract void doError(String msg);
+
+ abstract void doError(String msg, @Nullable Object arg);
+
+ abstract void doError(String msg, @Nullable Object arg1, @Nullable Object arg2);
+
+ abstract void doError(String msg, Object... args);
+
+ abstract void doError(String msg, Throwable thrown);
+}
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/utils/log/ConsoleFormatter.java b/sonar-plugin-api/src/main/java/org/sonar/api/utils/log/ConsoleFormatter.java
new file mode 100644
index 00000000000..21247843ed2
--- /dev/null
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/utils/log/ConsoleFormatter.java
@@ -0,0 +1,39 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.sonar.api.utils.log;
+
+import org.apache.commons.lang.StringUtils;
+
+import java.util.Objects;
+
+class ConsoleFormatter {
+
+ private ConsoleFormatter() {
+ // only static methods
+ }
+
+ static String format(String pattern, Object... args) {
+ String result = pattern;
+ for (Object arg : args) {
+ result = StringUtils.replaceOnce(result, "{}", Objects.toString(arg));
+ }
+ return result;
+ }
+}
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/utils/log/ConsoleLogger.java b/sonar-plugin-api/src/main/java/org/sonar/api/utils/log/ConsoleLogger.java
new file mode 100644
index 00000000000..93af4ef8785
--- /dev/null
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/utils/log/ConsoleLogger.java
@@ -0,0 +1,148 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.sonar.api.utils.log;
+
+import javax.annotation.Nullable;
+
+import java.io.PrintStream;
+
+import static org.sonar.api.utils.log.ConsoleFormatter.format;
+
+/**
+ * Slow implementation based on {@link java.lang.System#out}. It is not production-ready and it must be used
+ * only for the tests that do not have logback dependency.
+ * <p/>Implementation of message patterns is naive. It does not support escaped '{' and '}'
+ * arguments.
+ */
+class ConsoleLogger extends BaseLogger {
+
+ private final PrintStream stream;
+
+ ConsoleLogger(String unusedName) {
+ this.stream = System.out;
+ }
+
+ ConsoleLogger(PrintStream stream) {
+ this.stream = stream;
+ }
+
+ @Override
+ public boolean isDebugEnabled() {
+ return Loggers.getFactory().isDebugEnabled();
+ }
+
+ @Override
+ protected void doDebug(String msg) {
+ if (isDebugEnabled()) {
+ log("DEBUG", msg);
+ }
+ }
+
+ @Override
+ protected void doDebug(String pattern, @Nullable Object arg) {
+ if (isDebugEnabled()) {
+ debug(format(pattern, arg));
+ }
+ }
+
+ @Override
+ protected void doDebug(String pattern, @Nullable Object arg1, @Nullable Object arg2) {
+ if (isDebugEnabled()) {
+ debug(format(pattern, arg1, arg2));
+ }
+ }
+
+ @Override
+ protected void doDebug(String pattern, Object... args) {
+ if (isDebugEnabled()) {
+ debug(format(pattern, args));
+ }
+ }
+
+ @Override
+ protected void doInfo(String msg) {
+ log("INFO ", msg);
+ }
+
+ @Override
+ protected void doInfo(String pattern, @Nullable Object arg) {
+ info(format(pattern, arg));
+ }
+
+ @Override
+ protected void doInfo(String pattern, @Nullable Object arg1, @Nullable Object arg2) {
+ info(format(pattern, arg1, arg2));
+ }
+
+ @Override
+ protected void doInfo(String pattern, Object... args) {
+ info(format(pattern, args));
+ }
+
+ @Override
+ protected void doWarn(String msg) {
+ log("WARN ", msg);
+ }
+
+ @Override
+ protected void doWarn(String pattern, @Nullable Object arg) {
+ warn(format(pattern, arg));
+ }
+
+ @Override
+ protected void doWarn(String pattern, @Nullable Object arg1, @Nullable Object arg2) {
+ warn(format(pattern, arg1, arg2));
+ }
+
+ @Override
+ protected void doWarn(String pattern, Object... args) {
+ warn(format(pattern, args));
+ }
+
+ @Override
+ protected void doError(String msg) {
+ log("ERROR", msg);
+ }
+
+ @Override
+ protected void doError(String pattern, @Nullable Object arg) {
+ error(format(pattern, arg));
+ }
+
+ @Override
+ protected void doError(String pattern, @Nullable Object arg1, @Nullable Object arg2) {
+ error(format(pattern, arg1, arg2));
+ }
+
+ @Override
+ protected void doError(String pattern, Object... args) {
+ error(format(pattern, args));
+ }
+
+ @Override
+ public void doError(String msg, Throwable thrown) {
+ doError(msg);
+ thrown.printStackTrace();
+ }
+
+ private void log(String level, String msg) {
+ this.stream.println(String.format("%s %s", level, msg));
+ }
+}
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/utils/log/ConsoleLoggers.java b/sonar-plugin-api/src/main/java/org/sonar/api/utils/log/ConsoleLoggers.java
new file mode 100644
index 00000000000..a6a2f2524a0
--- /dev/null
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/utils/log/ConsoleLoggers.java
@@ -0,0 +1,40 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.sonar.api.utils.log;
+
+class ConsoleLoggers extends Loggers {
+
+ private boolean debugEnabled = false;
+
+ @Override
+ protected Logger newInstance(String name) {
+ return new ConsoleLogger(name);
+ }
+
+ @Override
+ protected boolean isDebugEnabled() {
+ return debugEnabled;
+ }
+
+ @Override
+ protected void enableDebug(boolean b) {
+ this.debugEnabled = b;
+ }
+}
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/utils/log/ListInterceptor.java b/sonar-plugin-api/src/main/java/org/sonar/api/utils/log/ListInterceptor.java
new file mode 100644
index 00000000000..94aa6dad39a
--- /dev/null
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/utils/log/ListInterceptor.java
@@ -0,0 +1,57 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.sonar.api.utils.log;
+
+import java.util.ArrayList;
+import java.util.List;
+
+class ListInterceptor extends LogInterceptor {
+
+ private final List<String> logs = new ArrayList<>();
+
+ @Override
+ public void log(String msg) {
+ logs.add(msg);
+ }
+
+ @Override
+ public void log(String msg, Object arg) {
+ logs.add(ConsoleFormatter.format(msg, arg));
+ }
+
+ @Override
+ public void log(String msg, Object arg1, Object arg2) {
+ logs.add(ConsoleFormatter.format(msg, arg1, arg2));
+ }
+
+ @Override
+ public void log(String msg, Object... args) {
+ logs.add(ConsoleFormatter.format(msg, args));
+ }
+
+ @Override
+ public void log(String msg, Throwable thrown) {
+ logs.add(msg);
+ }
+
+ public List<String> logs() {
+ return logs;
+ }
+}
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/utils/log/LogInterceptor.java b/sonar-plugin-api/src/main/java/org/sonar/api/utils/log/LogInterceptor.java
new file mode 100644
index 00000000000..aab01e6a359
--- /dev/null
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/utils/log/LogInterceptor.java
@@ -0,0 +1,35 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.sonar.api.utils.log;
+
+abstract class LogInterceptor {
+
+ static LogInterceptor instance = NullInterceptor.NULL_INSTANCE;
+
+ abstract void log(String msg);
+
+ abstract void log(String msg, Object arg);
+
+ abstract void log(String msg, Object arg1, Object arg2);
+
+ abstract void log(String msg, Object... args);
+
+ abstract void log(String msg, Throwable thrown);
+}
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/utils/log/LogTester.java b/sonar-plugin-api/src/main/java/org/sonar/api/utils/log/LogTester.java
new file mode 100644
index 00000000000..9ee625e0c62
--- /dev/null
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/utils/log/LogTester.java
@@ -0,0 +1,100 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.sonar.api.utils.log;
+
+import org.junit.rules.ExternalResource;
+
+import java.util.List;
+
+/**
+ * <b>For tests only</b>
+ * <p/>
+ * This JUnit rule allows to configure and access logs in tests. By default
+ * debug logs are enabled.
+ * <p/>
+ * Warning - not compatible with parallel execution of tests.
+ * <p/>
+ * Example:
+ * <pre>
+ * public class MyClass {
+ * private final Logger logger = Loggers.get("logger_name");
+ *
+ * public void doSomething() {
+ * logger.info("foo");
+ * }
+ * }
+ *
+ * public class MyTest {
+ * &#064;Rule
+ * public LogTester logTester = new LogTester();
+ *
+ * &#064;Test
+ * public void test_log() {
+ * new MyClass().doSomething();
+ *
+ * assertThat(logTester.logs()).containsOnly("foo");
+ * }
+ * }
+ * </pre>
+ *
+ * @since 5.1
+ */
+public class LogTester extends ExternalResource {
+
+ private boolean initialDebugMode;
+
+ @Override
+ protected void before() throws Throwable {
+ initialDebugMode = Loggers.getFactory().isDebugEnabled();
+
+ // this shared instance breaks compatibility with parallel execution of tests
+ LogInterceptor.instance = new ListInterceptor();
+ enableDebug(true);
+ }
+
+ @Override
+ protected void after() {
+ enableDebug(initialDebugMode);
+ LogInterceptor.instance = NullInterceptor.NULL_INSTANCE;
+ }
+
+ /**
+ * @see #enableDebug(boolean)
+ */
+ public boolean isDebugEnabled() {
+ return Loggers.getFactory().isDebugEnabled();
+ }
+
+ /**
+ * Enable/disable debug logs. Info, warn and error logs are always enabled.
+ * By default debug logs are enabled when LogTester is started.
+ */
+ public LogTester enableDebug(boolean b) {
+ Loggers.getFactory().enableDebug(b);
+ return this;
+ }
+
+ /**
+ * Logs in chronological order (item at index 0 is the oldest one)
+ */
+ public List<String> logs() {
+ return ((ListInterceptor) LogInterceptor.instance).logs();
+ }
+}
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/utils/log/LogbackLogger.java b/sonar-plugin-api/src/main/java/org/sonar/api/utils/log/LogbackLogger.java
new file mode 100644
index 00000000000..7313a2fc2a5
--- /dev/null
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/utils/log/LogbackLogger.java
@@ -0,0 +1,124 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.sonar.api.utils.log;
+
+import javax.annotation.Nullable;
+
+/**
+ * Note that logback is accessed through SLF4J
+ */
+class LogbackLogger extends BaseLogger {
+
+ private final transient org.slf4j.Logger slf4j;
+
+ LogbackLogger(org.slf4j.Logger slf4j) {
+ this.slf4j = slf4j;
+ }
+
+ @Override
+ public boolean isDebugEnabled() {
+ return slf4j.isDebugEnabled();
+ }
+
+ @Override
+ protected void doDebug(String msg) {
+ slf4j.debug(msg);
+ }
+
+ @Override
+ protected void doDebug(String msg, @Nullable Object arg) {
+ slf4j.debug(msg, arg);
+ }
+
+ @Override
+ protected void doDebug(String msg, @Nullable Object arg1, @Nullable Object arg2) {
+ slf4j.debug(msg, arg1, arg2);
+ }
+
+ @Override
+ protected void doDebug(String msg, Object... args) {
+ slf4j.debug(msg, args);
+ }
+
+ @Override
+ protected void doInfo(String msg) {
+ slf4j.info(msg);
+ }
+
+ @Override
+ protected void doInfo(String msg, @Nullable Object arg) {
+ slf4j.info(msg, arg);
+ }
+
+ @Override
+ protected void doInfo(String msg, @Nullable Object arg1, @Nullable Object arg2) {
+ slf4j.info(msg, arg1, arg2);
+ }
+
+ @Override
+ protected void doInfo(String msg, Object... args) {
+ slf4j.info(msg, args);
+ }
+
+ @Override
+ protected void doWarn(String msg) {
+ slf4j.warn(msg);
+ }
+
+ @Override
+ protected void doWarn(String msg, @Nullable Object arg) {
+ slf4j.warn(msg, arg);
+ }
+
+ @Override
+ protected void doWarn(String msg, @Nullable Object arg1, @Nullable Object arg2) {
+ slf4j.warn(msg, arg1, arg2);
+ }
+
+ @Override
+ protected void doWarn(String msg, Object... args) {
+ slf4j.warn(msg, args);
+ }
+
+ @Override
+ protected void doError(String msg) {
+ slf4j.error(msg);
+ }
+
+ @Override
+ protected void doError(String msg, @Nullable Object arg) {
+ slf4j.error(msg, arg);
+ }
+
+ @Override
+ protected void doError(String msg, @Nullable Object arg1, @Nullable Object arg2) {
+ slf4j.error(msg, arg1, arg2);
+ }
+
+ @Override
+ protected void doError(String msg, Object... args) {
+ slf4j.error(msg, args);
+ }
+
+ @Override
+ protected void doError(String msg, Throwable thrown) {
+ slf4j.error(msg, thrown);
+ }
+}
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/utils/log/LogbackLoggers.java b/sonar-plugin-api/src/main/java/org/sonar/api/utils/log/LogbackLoggers.java
new file mode 100644
index 00000000000..e4490a79e3a
--- /dev/null
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/utils/log/LogbackLoggers.java
@@ -0,0 +1,46 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.sonar.api.utils.log;
+
+import ch.qos.logback.classic.Level;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Note that this is not "Slf4jLoggers" as there's a coupling on Logback
+ * in order to change level of root logger.
+ */
+class LogbackLoggers extends Loggers {
+
+ @Override
+ protected Logger newInstance(String name) {
+ return new LogbackLogger(LoggerFactory.getLogger(name));
+ }
+
+ @Override
+ protected boolean isDebugEnabled() {
+ return LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME).isDebugEnabled();
+ }
+
+ @Override
+ protected void enableDebug(boolean b) {
+ ch.qos.logback.classic.Logger logback = (ch.qos.logback.classic.Logger) LoggerFactory.getLogger(ch.qos.logback.classic.Logger.ROOT_LOGGER_NAME);
+ logback.setLevel(b ? Level.DEBUG : Level.INFO);
+ }
+}
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/utils/log/Logger.java b/sonar-plugin-api/src/main/java/org/sonar/api/utils/log/Logger.java
index dab1503bce8..834dc235661 100644
--- a/sonar-plugin-api/src/main/java/org/sonar/api/utils/log/Logger.java
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/utils/log/Logger.java
@@ -1,16 +1,95 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
package org.sonar.api.utils.log;
+import javax.annotation.Nullable;
+
+/**
+ * SonarQube plugins are not coupled with external logging libraries like SLF4J or Logback.
+ *
+ * Example:
+ * <pre>
+ * public class MyClass {
+ * private final Logger logger = Loggers.get("logger_name");
+ *
+ * public void doSomething() {
+ * logger.info("something valuable for production environment");
+ * logger.warn("message with arguments {} and {}", "foo", 42);
+ * }
+ * }
+ * </pre>
+ *
+ * See {@link org.sonar.api.utils.log.LogTester} for testing facilities.
+ * @since 5.1
+ */
public interface Logger {
boolean isDebugEnabled();
- void debug(String message);
+ /**
+ * Logs a DEBUG level message. Debug messages must
+ * be valuable for production environments and are not for development debugging.
+ */
+ void debug(String msg);
+
+ void debug(String pattern, @Nullable Object arg);
+
+ void debug(String msg, @Nullable Object arg1, @Nullable Object arg2);
+
+ void debug(String msg, Object... args);
+
+ /**
+ * Logs an INFO level message.
+ */
+ void info(String msg);
+
+ void info(String msg, @Nullable Object arg);
+
+ void info(String msg, @Nullable Object arg1, @Nullable Object arg2);
+
+ void info(String msg, Object... args);
+
+ /**
+ * Logs a WARN level message.
+ */
+ void warn(String msg);
+
+ void warn(String msg, @Nullable Object arg);
+
+ void warn(String msg, @Nullable Object arg1, @Nullable Object arg2);
+
+ void warn(String msg, Object... args);
+
+ /**
+ * Logs an ERROR level message.
+ */
+ void error(String msg);
- void info(String message);
+ void error(String msg, @Nullable Object arg);
- void warn(String message);
+ void error(String msg, @Nullable Object arg1, @Nullable Object arg2);
- void error(String message);
+ void error(String msg, Object... args);
- void error(String message, Throwable throwable);
+ /**
+ * Logs an ERROR level message.
+ */
+ void error(String msg, Throwable thrown);
}
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/utils/log/Loggers.java b/sonar-plugin-api/src/main/java/org/sonar/api/utils/log/Loggers.java
index 6a9f278e112..4f2627fc5e9 100644
--- a/sonar-plugin-api/src/main/java/org/sonar/api/utils/log/Loggers.java
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/utils/log/Loggers.java
@@ -1,6 +1,57 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
package org.sonar.api.utils.log;
-public class Loggers {
+/**
+ * @since 5.1
+ */
+public abstract class Loggers {
+ private static volatile Loggers factory;
+
+ static {
+ try {
+ Class.forName("org.slf4j.Logger");
+ factory = new LogbackLoggers();
+ } catch (Throwable e) {
+ // no slf4j -> testing environment
+ factory = new ConsoleLoggers();
+ }
+ }
+
+ public static Logger get(Class name) {
+ return factory.newInstance(name.getName());
+ }
+
+ public static Logger get(String name) {
+ return factory.newInstance(name);
+ }
+
+ static Loggers getFactory() {
+ return factory;
+ }
+
+ protected abstract Logger newInstance(String name);
+
+ protected abstract boolean isDebugEnabled();
+
+ protected abstract void enableDebug(boolean b);
}
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/utils/log/NullInterceptor.java b/sonar-plugin-api/src/main/java/org/sonar/api/utils/log/NullInterceptor.java
new file mode 100644
index 00000000000..63e0d9ab847
--- /dev/null
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/utils/log/NullInterceptor.java
@@ -0,0 +1,56 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.sonar.api.utils.log;
+
+/**
+ * Log interceptor that does nothing, so production-ready!
+ */
+class NullInterceptor extends LogInterceptor {
+
+ static final NullInterceptor NULL_INSTANCE = new NullInterceptor();
+
+ private NullInterceptor() {
+ }
+
+ @Override
+ void log(String msg) {
+ // nothing
+ }
+
+ @Override
+ void log(String msg, Object arg) {
+ // nothing
+ }
+
+ @Override
+ void log(String msg, Object arg1, Object arg2) {
+ // nothing
+ }
+
+ @Override
+ void log(String msg, Object... args) {
+ // nothing
+ }
+
+ @Override
+ void log(String msg, Throwable thrown) {
+ // nothing
+ }
+}
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/utils/log/internal/InMemoryLogger.java b/sonar-plugin-api/src/main/java/org/sonar/api/utils/log/internal/InMemoryLogger.java
deleted file mode 100644
index b7f2fa061de..00000000000
--- a/sonar-plugin-api/src/main/java/org/sonar/api/utils/log/internal/InMemoryLogger.java
+++ /dev/null
@@ -1,88 +0,0 @@
-package org.sonar.api.utils.log.internal;
-
-import com.google.common.collect.ArrayListMultimap;
-import com.google.common.collect.Lists;
-import org.sonar.api.utils.log.Logger;
-
-import java.util.List;
-
-/**
- * Implementation of {@link org.sonar.api.utils.log.Logger} which keeps logs
- * in memory, so that they can be loaded after writing. It is helpful
- * for testing.
- */
-public class InMemoryLogger implements Logger {
-
- private static enum Level {
- DEBUG, INFO, WARN, ERROR
- }
-
- private boolean debugEnabled = false;
- private final ArrayListMultimap<Level, String> logs = ArrayListMultimap.create();
-
- @Override
- public boolean isDebugEnabled() {
- return debugEnabled;
- }
-
- public InMemoryLogger setDebugEnabled(boolean b) {
- this.debugEnabled = b;
- return this;
- }
-
- @Override
- public void debug(String message) {
- if (isDebugEnabled()) {
- log(Level.DEBUG, message);
- }
- }
-
- @Override
- public void info(String message) {
- log(Level.INFO, message);
- }
-
- @Override
- public void warn(String message) {
- log(Level.WARN, message);
- }
-
- @Override
- public void error(String message) {
- log(Level.ERROR, message);
- }
-
- @Override
- public void error(String message, Throwable throwable) {
- log(Level.ERROR, String.format("%s | %s", message, throwable.getMessage()));
- }
-
- public List<String> logs() {
- return Lists.newArrayList(logs.values());
- }
-
- public List<String> debugLogs() {
- return logs.get(Level.DEBUG);
- }
-
- public List<String> infoLogs() {
- return logs.get(Level.INFO);
- }
-
- public List<String> warnLogs() {
- return logs.get(Level.WARN);
- }
-
- public List<String> errorLogs() {
- return logs.get(Level.ERROR);
- }
-
- public InMemoryLogger clear() {
- logs.clear();
- return this;
- }
-
- private void log(Level level, String message) {
- logs.put(level, message);
- }
-}
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/utils/log/internal/Slf4jLoggers.java b/sonar-plugin-api/src/main/java/org/sonar/api/utils/log/internal/Slf4jLoggers.java
deleted file mode 100644
index d1cfadd2bf5..00000000000
--- a/sonar-plugin-api/src/main/java/org/sonar/api/utils/log/internal/Slf4jLoggers.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package org.sonar.api.utils.log.internal;
-
-
-import org.slf4j.LoggerFactory;
-import org.sonar.api.utils.log.Logger;
-
-public class Slf4jLoggers {
-
- public static class Slf4jLogger implements Logger {
- private final org.slf4j.Logger slf4j;
-
- public Slf4jLogger(org.slf4j.Logger slf4j) {
- this.slf4j = slf4j;
- }
-
- @Override
- public boolean isDebugEnabled() {
- return slf4j.isDebugEnabled();
- }
-
- @Override
- public void debug(String message) {
- slf4j.debug(message);
- }
-
- @Override
- public void info(String message) {
- slf4j.info(message);
- }
-
- @Override
- public void warn(String message) {
- slf4j.warn(message);
- }
-
- @Override
- public void error(String message) {
- slf4j.error(message);
- }
-
- @Override
- public void error(String message, Throwable throwable) {
- slf4j.error(message, throwable);
- }
- }
-
- public Slf4jLogger getLogger(String name) {
- return new Slf4jLogger(LoggerFactory.getLogger(name));
- }
-
- public Slf4jLogger getLogger(Class name) {
- return new Slf4jLogger(LoggerFactory.getLogger(name));
- }
-}
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/utils/log/package-info.java b/sonar-plugin-api/src/main/java/org/sonar/api/utils/log/package-info.java
new file mode 100644
index 00000000000..a2aedc1a627
--- /dev/null
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/utils/log/package-info.java
@@ -0,0 +1,25 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+@ParametersAreNonnullByDefault
+package org.sonar.api.utils.log;
+
+import javax.annotation.ParametersAreNonnullByDefault;
+
diff --git a/sonar-plugin-api/src/test/java/org/sonar/api/platform/ComponentKeysTest.java b/sonar-plugin-api/src/test/java/org/sonar/api/platform/ComponentKeysTest.java
index cb38cde6f6f..2a882663993 100644
--- a/sonar-plugin-api/src/test/java/org/sonar/api/platform/ComponentKeysTest.java
+++ b/sonar-plugin-api/src/test/java/org/sonar/api/platform/ComponentKeysTest.java
@@ -20,13 +20,11 @@
package org.sonar.api.platform;
import org.junit.Test;
-import org.slf4j.Logger;
+import org.sonar.api.utils.log.Logger;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Matchers.startsWith;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyZeroInteractions;
+import static org.mockito.Mockito.*;
public class ComponentKeysTest {
diff --git a/sonar-plugin-api/src/test/java/org/sonar/api/utils/TimeProfilerTest.java b/sonar-plugin-api/src/test/java/org/sonar/api/utils/TimeProfilerTest.java
index 713b4677abf..3d7e3ac6177 100644
--- a/sonar-plugin-api/src/test/java/org/sonar/api/utils/TimeProfilerTest.java
+++ b/sonar-plugin-api/src/test/java/org/sonar/api/utils/TimeProfilerTest.java
@@ -21,7 +21,7 @@ package org.sonar.api.utils;
import org.junit.Before;
import org.junit.Test;
-import org.slf4j.Logger;
+import org.sonar.api.utils.log.Logger;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.anyString;
diff --git a/sonar-plugin-api/src/test/java/org/sonar/api/utils/ValidationMessagesTest.java b/sonar-plugin-api/src/test/java/org/sonar/api/utils/ValidationMessagesTest.java
index a00847874c8..7a4e3468362 100644
--- a/sonar-plugin-api/src/test/java/org/sonar/api/utils/ValidationMessagesTest.java
+++ b/sonar-plugin-api/src/test/java/org/sonar/api/utils/ValidationMessagesTest.java
@@ -20,14 +20,11 @@
package org.sonar.api.utils;
import org.junit.Test;
-import org.slf4j.Logger;
+import org.sonar.api.utils.log.Logger;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Matchers.anyString;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.*;
public class ValidationMessagesTest {
diff --git a/sonar-plugin-api/src/test/java/org/sonar/api/utils/log/ConsoleFormatterTest.java b/sonar-plugin-api/src/test/java/org/sonar/api/utils/log/ConsoleFormatterTest.java
new file mode 100644
index 00000000000..4e2280fe775
--- /dev/null
+++ b/sonar-plugin-api/src/test/java/org/sonar/api/utils/log/ConsoleFormatterTest.java
@@ -0,0 +1,41 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.sonar.api.utils.log;
+
+import org.junit.Test;
+import org.sonar.test.TestUtils;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class ConsoleFormatterTest {
+
+ @Test
+ public void format() throws Exception {
+ assertThat(ConsoleFormatter.format("foo")).isEqualTo("foo");
+ assertThat(ConsoleFormatter.format("arg: {}", "foo")).isEqualTo("arg: foo");
+ assertThat(ConsoleFormatter.format("two args: {} and {}", "foo", 42)).isEqualTo("two args: foo and 42");
+ assertThat(ConsoleFormatter.format("args: {}, {} and {}", true, 42, 2L)).isEqualTo("args: true, 42 and 2");
+ }
+
+ @Test
+ public void only_static_methods() throws Exception {
+ assertThat(TestUtils.hasOnlyPrivateConstructors(ConsoleFormatter.class)).isTrue();
+ }
+}
diff --git a/sonar-plugin-api/src/test/java/org/sonar/api/utils/log/ConsoleLoggerTest.java b/sonar-plugin-api/src/test/java/org/sonar/api/utils/log/ConsoleLoggerTest.java
new file mode 100644
index 00000000000..68d4d02bac3
--- /dev/null
+++ b/sonar-plugin-api/src/test/java/org/sonar/api/utils/log/ConsoleLoggerTest.java
@@ -0,0 +1,82 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.sonar.api.utils.log;
+
+import org.junit.Rule;
+import org.junit.Test;
+
+import java.io.PrintStream;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Matchers.anyString;
+import static org.mockito.Mockito.*;
+
+public class ConsoleLoggerTest {
+
+ PrintStream stream = mock(PrintStream.class);
+ ConsoleLogger sut = new ConsoleLogger(stream);
+
+ @Rule
+ public LogTester tester = new LogTester();
+
+ @Test
+ public void debug_enabled() throws Exception {
+ tester.enableDebug(true);
+ assertThat(sut.isDebugEnabled()).isTrue();
+ sut.debug("message");
+ sut.debug("message {}", "foo");
+ sut.debug("message {} {}", "foo", "bar");
+ sut.debug("message {} {} {}", "foo", "bar", "baz");
+ verify(stream, times(4)).println(anyString());
+ }
+
+ @Test
+ public void debug_disabled() throws Exception {
+ tester.enableDebug(false);
+ assertThat(sut.isDebugEnabled()).isFalse();
+ sut.debug("message");
+ sut.debug("message {}", "foo");
+ sut.debug("message {} {}", "foo", "bar");
+ sut.debug("message {} {} {}", "foo", "bar", "baz");
+ verifyZeroInteractions(stream);
+ }
+
+ @Test
+ public void log() throws Exception {
+ sut.info("message");
+ sut.info("message {}", "foo");
+ sut.info("message {} {}", "foo", "bar");
+ sut.info("message {} {} {}", "foo", "bar", "baz");
+ verify(stream, times(4)).println(startsWith("INFO "));
+
+ sut.warn("message");
+ sut.warn("message {}", "foo");
+ sut.warn("message {} {}", "foo", "bar");
+ sut.warn("message {} {} {}", "foo", "bar", "baz");
+ verify(stream, times(4)).println(startsWith("WARN "));
+
+ sut.error("message");
+ sut.error("message {}", "foo");
+ sut.error("message {} {}", "foo", "bar");
+ sut.error("message {} {} {}", "foo", "bar", "baz");
+ sut.error("message", new IllegalArgumentException());
+ verify(stream, times(5)).println(startsWith("ERROR "));
+ }
+}
diff --git a/sonar-plugin-api/src/test/java/org/sonar/api/utils/log/ConsoleLoggersTest.java b/sonar-plugin-api/src/test/java/org/sonar/api/utils/log/ConsoleLoggersTest.java
new file mode 100644
index 00000000000..64fa4cc7b96
--- /dev/null
+++ b/sonar-plugin-api/src/test/java/org/sonar/api/utils/log/ConsoleLoggersTest.java
@@ -0,0 +1,47 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.sonar.api.utils.log;
+
+import org.junit.Test;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class ConsoleLoggersTest {
+
+ ConsoleLoggers sut = new ConsoleLoggers();
+
+ @Test
+ public void newInstance() throws Exception {
+ Logger logger = sut.newInstance("foo");
+ assertThat(logger).isInstanceOf(ConsoleLogger.class);
+ }
+
+ @Test
+ public void debugMode() throws Exception {
+ // disabled by default
+ assertThat(sut.isDebugEnabled()).isFalse();
+
+ sut.enableDebug(true);
+ assertThat(sut.isDebugEnabled()).isTrue();
+
+ sut.enableDebug(false);
+ assertThat(sut.isDebugEnabled()).isFalse();
+ }
+}
diff --git a/sonar-plugin-api/src/test/java/org/sonar/api/utils/log/LogTesterTest.java b/sonar-plugin-api/src/test/java/org/sonar/api/utils/log/LogTesterTest.java
new file mode 100644
index 00000000000..32bb1000bd6
--- /dev/null
+++ b/sonar-plugin-api/src/test/java/org/sonar/api/utils/log/LogTesterTest.java
@@ -0,0 +1,61 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.sonar.api.utils.log;
+
+import org.junit.Test;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class LogTesterTest {
+
+ LogTester sut = new LogTester();
+
+ @Test
+ public void debugLevel() throws Throwable {
+ boolean initial = sut.isDebugEnabled();
+
+ // when LogTester is used, then debug logs are enabled by default
+ sut.before();
+ assertThat(sut.isDebugEnabled()).isTrue();
+ assertThat(Loggers.getFactory().isDebugEnabled()).isTrue();
+
+ // change
+ sut.enableDebug(false);
+ assertThat(sut.isDebugEnabled()).isFalse();
+ assertThat(Loggers.getFactory().isDebugEnabled()).isFalse();
+
+ // reset to initial level
+ sut.after();
+ assertThat(sut.isDebugEnabled()).isEqualTo(initial);
+ assertThat(Loggers.getFactory().isDebugEnabled()).isEqualTo(initial);
+ }
+
+ @Test
+ public void intercept_logs() throws Throwable {
+ sut.before();
+ Loggers.get("logger1").info("an information");
+ Loggers.get("logger2").warn("warning: {}", 42);
+
+ assertThat(sut.logs()).containsExactly("an information", "warning: 42");
+
+ sut.after();
+ assertThat(LogInterceptor.instance).isSameAs(NullInterceptor.NULL_INSTANCE);
+ }
+}
diff --git a/sonar-plugin-api/src/test/java/org/sonar/api/utils/log/LogbackLoggerTest.java b/sonar-plugin-api/src/test/java/org/sonar/api/utils/log/LogbackLoggerTest.java
new file mode 100644
index 00000000000..2c8c3680eb7
--- /dev/null
+++ b/sonar-plugin-api/src/test/java/org/sonar/api/utils/log/LogbackLoggerTest.java
@@ -0,0 +1,69 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.sonar.api.utils.log;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.slf4j.LoggerFactory;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class LogbackLoggerTest {
+
+ LogbackLogger sut = new LogbackLogger(LoggerFactory.getLogger(getClass()));
+
+ @Rule
+ public LogTester tester = new LogTester();
+
+ @Test
+ public void debug_enabling() throws Exception {
+ tester.enableDebug(true);
+ assertThat(sut.isDebugEnabled()).isTrue();
+
+ tester.enableDebug(false);
+ assertThat(sut.isDebugEnabled()).isFalse();
+ }
+
+ @Test
+ public void log() throws Exception {
+ // no assertions. Simply verify that calls do not fail.
+ sut.debug("message");
+ sut.debug("message {}", "foo");
+ sut.debug("message {} {}", "foo", "bar");
+ sut.debug("message {} {} {}", "foo", "bar", "baz");
+
+ sut.info("message");
+ sut.info("message {}", "foo");
+ sut.info("message {} {}", "foo", "bar");
+ sut.info("message {} {} {}", "foo", "bar", "baz");
+
+ sut.warn("message");
+ sut.warn("message {}", "foo");
+ sut.warn("message {} {}", "foo", "bar");
+ sut.warn("message {} {} {}", "foo", "bar", "baz");
+
+ sut.error("message");
+ sut.error("message {}", "foo");
+ sut.error("message {} {}", "foo", "bar");
+ sut.error("message {} {} {}", "foo", "bar", "baz");
+ sut.error("message", new IllegalArgumentException(""));
+
+ }
+}
diff --git a/sonar-plugin-api/src/test/java/org/sonar/api/utils/log/LoggersTest.java b/sonar-plugin-api/src/test/java/org/sonar/api/utils/log/LoggersTest.java
new file mode 100644
index 00000000000..b26094ce16a
--- /dev/null
+++ b/sonar-plugin-api/src/test/java/org/sonar/api/utils/log/LoggersTest.java
@@ -0,0 +1,37 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.sonar.api.utils.log;
+
+import org.junit.Test;
+import org.sonar.api.SonarPlugin;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class LoggersTest {
+
+ @Test
+ public void factory() throws Exception {
+ // logback is used by sonar-plugin-api
+ assertThat(Loggers.getFactory()).isInstanceOf(LogbackLoggers.class);
+
+ assertThat(Loggers.get("foo")).isInstanceOf(LogbackLogger.class);
+ assertThat(Loggers.get(SonarPlugin.class)).isInstanceOf(LogbackLogger.class);
+ }
+}
diff --git a/sonar-plugin-api/src/test/java/org/sonar/api/utils/log/NullInterceptorTest.java b/sonar-plugin-api/src/test/java/org/sonar/api/utils/log/NullInterceptorTest.java
new file mode 100644
index 00000000000..d25d04d1dcd
--- /dev/null
+++ b/sonar-plugin-api/src/test/java/org/sonar/api/utils/log/NullInterceptorTest.java
@@ -0,0 +1,37 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.sonar.api.utils.log;
+
+import org.junit.Test;
+
+import static org.mockito.Mockito.mock;
+
+public class NullInterceptorTest {
+
+ @Test
+ public void do_nothing() throws Exception {
+ // verify that... it does nothing
+ NullInterceptor.NULL_INSTANCE.log("foo");
+ NullInterceptor.NULL_INSTANCE.log("foo {}", 42);
+ NullInterceptor.NULL_INSTANCE.log("foo {} {}", 42, 66);
+ NullInterceptor.NULL_INSTANCE.log("foo {} {} {}", 42, 66, 84);
+ NullInterceptor.NULL_INSTANCE.log("foo", mock(Exception.class));
+ }
+}