Make PmdLogger use slf4j
This commit is contained in:
14 files changed
+95
-135
No files matched your search
@@ -13,7 +13,9 @@ import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.slf4j.event.Level;
|
||||
|
||||
import net.sourceforge.pmd.Report.GlobalReportBuilderListener;
|
||||
import net.sourceforge.pmd.benchmark.TimeTracker;
|
||||
@@ -33,7 +35,6 @@ import net.sourceforge.pmd.util.ClasspathClassLoader;
|
||||
import net.sourceforge.pmd.util.IOUtil;
|
||||
import net.sourceforge.pmd.util.datasource.DataSource;
|
||||
import net.sourceforge.pmd.util.log.PmdLogger;
|
||||
import net.sourceforge.pmd.util.log.PmdLogger.Level;
|
||||
import net.sourceforge.pmd.util.log.SimplePmdLogger;
|
||||
|
||||
/**
|
||||
@@ -72,7 +73,7 @@ public final class PmdAnalysis implements AutoCloseable {
|
||||
private final List<GlobalAnalysisListener> listeners = new ArrayList<>();
|
||||
private final List<RuleSet> ruleSets = new ArrayList<>();
|
||||
private final PMDConfiguration configuration;
|
||||
private final SimplePmdLogger logger = new SimplePmdLogger(Logger.getLogger("net.sourceforge.pmd"));
|
||||
private final SimplePmdLogger logger = new SimplePmdLogger(LoggerFactory.getLogger(getClass()));
|
||||
|
||||
/**
|
||||
* Constructs a new instance. The files paths (input files, filelist,
|
||||
@@ -199,6 +200,7 @@ public final class PmdAnalysis implements AutoCloseable {
|
||||
|
||||
GlobalAnalysisListener listener;
|
||||
try {
|
||||
@SuppressWarnings("PMD.CloseResource")
|
||||
AnalysisCacheListener cacheListener = new AnalysisCacheListener(
|
||||
configuration.getAnalysisCache(),
|
||||
rulesets,
|
||||
@@ -216,22 +218,14 @@ public final class PmdAnalysis implements AutoCloseable {
|
||||
}
|
||||
|
||||
try (TimedOperation ignored = TimeTracker.startOperation(TimedOperationCategory.FILE_PROCESSING)) {
|
||||
// todo Just like we throw for invalid properties, "broken rules"
|
||||
// shouldn't be a "config error". This is the only instance of
|
||||
// config errors...
|
||||
|
||||
if (isEmpty(this.ruleSets)) {
|
||||
if (!configuration.getRuleSetPaths().isEmpty()) {
|
||||
logger.error("No rules found. Maybe you misspelled a rule name? ({0})",
|
||||
String.join(",", configuration.getRuleSetPaths()));
|
||||
|
||||
} else {
|
||||
logger.error("No rules found.");
|
||||
}
|
||||
if (checkNoRulesRegistered()) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (final Rule rule : removeBrokenRules(rulesets)) {
|
||||
// todo Just like we throw for invalid properties, "broken rules"
|
||||
// shouldn't be a "config error". This is the only instance of
|
||||
// config errors...
|
||||
listener.onConfigError(new Report.ConfigurationError(rule, rule.dysfunctionReason()));
|
||||
}
|
||||
|
||||
@@ -250,6 +244,20 @@ public final class PmdAnalysis implements AutoCloseable {
|
||||
}
|
||||
}
|
||||
|
||||
private boolean checkNoRulesRegistered() {
|
||||
if (isEmpty(this.ruleSets)) {
|
||||
if (!configuration.getRuleSetPaths().isEmpty()) {
|
||||
logger.error("No rules found. Maybe you misspelled a rule name? ({})",
|
||||
String.join(",", configuration.getRuleSetPaths()));
|
||||
|
||||
} else {
|
||||
logger.error("No rules found.");
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
private static GlobalAnalysisListener createComposedRendererListener(List<Renderer> renderers) throws Exception {
|
||||
if (renderers.isEmpty()) {
|
||||
|
||||
@@ -102,7 +102,7 @@ public class FileAnalysisCache extends AbstractAnalysisCache {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void persist() throws IOException {
|
||||
public void persist() {
|
||||
try (TimedOperation ignored = TimeTracker.startOperation(TimedOperationCategory.ANALYSIS_CACHE, "persist")) {
|
||||
if (cacheFile.isDirectory()) {
|
||||
LOG.error("Cannot persist the cache, the given path points to a directory.");
|
||||
@@ -145,6 +145,8 @@ public class FileAnalysisCache extends AbstractAnalysisCache {
|
||||
} else {
|
||||
LOG.info("Analysis cache updated");
|
||||
}
|
||||
} catch (final IOException e) {
|
||||
LOG.error("Could not persist analysis cache to file: {}", e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
package net.sourceforge.pmd.cache;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
@@ -16,6 +16,7 @@ import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.slf4j.event.Level;
|
||||
|
||||
import net.sourceforge.pmd.PMDConfiguration;
|
||||
import net.sourceforge.pmd.lang.Language;
|
||||
@@ -27,7 +28,6 @@ import net.sourceforge.pmd.util.database.DBURI;
|
||||
import net.sourceforge.pmd.util.database.SourceObject;
|
||||
import net.sourceforge.pmd.util.datasource.DataSource;
|
||||
import net.sourceforge.pmd.util.log.PmdLogger;
|
||||
import net.sourceforge.pmd.util.log.PmdLogger.Level;
|
||||
import net.sourceforge.pmd.util.log.PmdLoggerScope;
|
||||
|
||||
/**
|
||||
@@ -105,7 +105,7 @@ public final class FileCollectionUtil {
|
||||
public static void collectFileList(FileCollector collector, String fileListLocation) {
|
||||
Path path = Paths.get(fileListLocation);
|
||||
if (!Files.exists(path)) {
|
||||
collector.getLog().error("No such file {0}", fileListLocation);
|
||||
collector.getLog().error("No such file {}", fileListLocation);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -113,7 +113,7 @@ public final class FileCollectionUtil {
|
||||
try {
|
||||
filePaths = FileUtil.readFilelist(path.toFile());
|
||||
} catch (IOException e) {
|
||||
collector.getLog().errorEx("Error reading {0}", new Object[] { fileListLocation }, e);
|
||||
collector.getLog().errorEx("Error reading {}", new Object[] { fileListLocation }, e);
|
||||
return;
|
||||
}
|
||||
collectFiles(collector, filePaths);
|
||||
@@ -122,7 +122,7 @@ public final class FileCollectionUtil {
|
||||
private static void addRoot(FileCollector collector, String rootLocation) throws IOException {
|
||||
Path path = Paths.get(rootLocation);
|
||||
if (!Files.exists(path)) {
|
||||
collector.getLog().error("No such file {0}", path);
|
||||
collector.getLog().error("No such file {}", path);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -140,27 +140,27 @@ public final class FileCollectionUtil {
|
||||
} else if (Files.isRegularFile(path)) {
|
||||
collector.addFile(path);
|
||||
} else {
|
||||
collector.getLog().trace("Ignoring {0}: not a regular file or directory", path);
|
||||
collector.getLog().trace("Ignoring {}: not a regular file or directory", path);
|
||||
}
|
||||
}
|
||||
|
||||
public static void collectDB(FileCollector collector, String uriString) {
|
||||
try {
|
||||
collector.getLog().trace("Connecting to {0}", uriString);
|
||||
collector.getLog().trace("Connecting to {}", uriString);
|
||||
DBURI dbUri = new DBURI(uriString);
|
||||
DBMSMetadata dbmsMetadata = new DBMSMetadata(dbUri);
|
||||
collector.getLog().trace("DBMSMetadata retrieved");
|
||||
List<SourceObject> sourceObjectList = dbmsMetadata.getSourceObjectList();
|
||||
collector.getLog().trace("Located {0} database source objects", sourceObjectList.size());
|
||||
collector.getLog().trace("Located {} database source objects", sourceObjectList.size());
|
||||
for (SourceObject sourceObject : sourceObjectList) {
|
||||
String falseFilePath = sourceObject.getPseudoFileName();
|
||||
collector.getLog().trace("Adding database source object {0}", falseFilePath);
|
||||
collector.getLog().trace("Adding database source object {}", falseFilePath);
|
||||
|
||||
try (Reader sourceCode = dbmsMetadata.getSourceCode(sourceObject)) {
|
||||
String source = IOUtils.toString(sourceCode);
|
||||
collector.addSourceFile(source, falseFilePath);
|
||||
} catch (SQLException ex) {
|
||||
collector.getLog().warningEx("Cannot get SourceCode for {0} - skipping ...",
|
||||
collector.getLog().warningEx("Cannot get SourceCode for {} - skipping ...",
|
||||
new Object[] { falseFilePath},
|
||||
ex);
|
||||
}
|
||||
@@ -168,7 +168,7 @@ public final class FileCollectionUtil {
|
||||
} catch (ClassNotFoundException e) {
|
||||
collector.getLog().errorEx("Cannot get files from DB - probably missing database JDBC driver", e);
|
||||
} catch (Exception e) {
|
||||
collector.getLog().errorEx("Cannot get files from DB - ''{0}''", new Object[] { uriString }, e);
|
||||
collector.getLog().errorEx("Cannot get files from DB - ''{}''", new Object[] { uriString }, e);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -127,7 +127,7 @@ public final class FileCollector implements AutoCloseable {
|
||||
*/
|
||||
public boolean addFile(Path file) {
|
||||
if (!Files.isRegularFile(file)) {
|
||||
log.error("Not a regular file {0}", file);
|
||||
log.error("Not a regular file {}", file);
|
||||
return false;
|
||||
}
|
||||
LanguageVersion languageVersion = discoverLanguage(file.toString());
|
||||
@@ -151,7 +151,7 @@ public final class FileCollector implements AutoCloseable {
|
||||
public boolean addFile(Path file, Language language) {
|
||||
AssertionUtil.requireParamNotNull("language", language);
|
||||
if (!Files.isRegularFile(file)) {
|
||||
log.error("Not a regular file {0}", file);
|
||||
log.error("Not a regular file {}", file);
|
||||
return false;
|
||||
}
|
||||
NioTextFile nioTextFile = new NioTextFile(file, charset, discoverer.getDefaultLanguageVersion(language), getDisplayName(file));
|
||||
@@ -195,7 +195,7 @@ public final class FileCollector implements AutoCloseable {
|
||||
}
|
||||
|
||||
private void addFileImpl(TextFile textFile) {
|
||||
log.trace("Adding file {0} (lang: {1}) ", textFile.getPathId(), textFile.getLanguageVersion().getTerseName());
|
||||
log.trace("Adding file {} (lang: {}) ", textFile.getPathId(), textFile.getLanguageVersion().getTerseName());
|
||||
allFilesToProcess.add(textFile);
|
||||
}
|
||||
|
||||
@@ -206,12 +206,12 @@ public final class FileCollector implements AutoCloseable {
|
||||
List<Language> languages = discoverer.getLanguagesForFile(file);
|
||||
|
||||
if (languages.isEmpty()) {
|
||||
log.trace("File {0} matches no known language, ignoring", file);
|
||||
log.trace("File {} matches no known language, ignoring", file);
|
||||
return null;
|
||||
}
|
||||
Language lang = languages.get(0);
|
||||
if (languages.size() > 1) {
|
||||
log.trace("File {0} matches multiple languages ({1}), selecting {2}", file, languages, lang);
|
||||
log.trace("File {} matches multiple languages ({}), selecting {}", file, languages, lang);
|
||||
}
|
||||
return discoverer.getDefaultLanguageVersion(lang);
|
||||
}
|
||||
@@ -227,10 +227,10 @@ public final class FileCollector implements AutoCloseable {
|
||||
LanguageVersion contextVersion = discoverer.getDefaultLanguageVersion(language);
|
||||
if (!fileVersion.equals(contextVersion)) {
|
||||
log.error(
|
||||
"Cannot add file {0}: version ''{2}'' does not match ''{1}''",
|
||||
"Cannot add file {}: version ''{}'' does not match ''{}''",
|
||||
textFile.getPathId(),
|
||||
contextVersion,
|
||||
fileVersion
|
||||
fileVersion,
|
||||
contextVersion
|
||||
);
|
||||
return false;
|
||||
}
|
||||
@@ -270,7 +270,7 @@ public final class FileCollector implements AutoCloseable {
|
||||
*/
|
||||
public boolean addDirectory(Path dir) throws IOException {
|
||||
if (!Files.isDirectory(dir)) {
|
||||
log.error("Not a directory {0}", dir);
|
||||
log.error("Not a directory {}", dir);
|
||||
return false;
|
||||
}
|
||||
Files.walkFileTree(dir, new SimpleFileVisitor<Path>() {
|
||||
@@ -298,7 +298,7 @@ public final class FileCollector implements AutoCloseable {
|
||||
} else if (Files.isRegularFile(file)) {
|
||||
return addFile(file);
|
||||
} else {
|
||||
log.error("Not a file or directory {0}", file);
|
||||
log.error("Not a file or directory {}", file);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -361,7 +361,7 @@ public final class FileCollector implements AutoCloseable {
|
||||
for (Iterator<TextFile> iterator = allFilesToProcess.iterator(); iterator.hasNext();) {
|
||||
TextFile file = iterator.next();
|
||||
if (toExclude.contains(file)) {
|
||||
log.trace("Excluding file {0}", file.getPathId());
|
||||
log.trace("Excluding file {}", file.getPathId());
|
||||
iterator.remove();
|
||||
}
|
||||
}
|
||||
@@ -376,7 +376,7 @@ public final class FileCollector implements AutoCloseable {
|
||||
TextFile file = iterator.next();
|
||||
Language lang = file.getLanguageVersion().getLanguage();
|
||||
if (!languages.contains(lang)) {
|
||||
log.trace("Filtering out {0}, no rules for language {1}", file.getPathId(), lang);
|
||||
log.trace("Filtering out {}, no rules for language {}", file.getPathId(), lang);
|
||||
iterator.remove();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@ import net.sourceforge.pmd.util.datasource.DataSource;
|
||||
/**
|
||||
* @author Clément Fournier
|
||||
*/
|
||||
class NoopAnalysisListener implements GlobalAnalysisListener {
|
||||
final class NoopAnalysisListener implements GlobalAnalysisListener {
|
||||
|
||||
static final NoopAnalysisListener INSTANCE = new NoopAnalysisListener();
|
||||
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
|
||||
package net.sourceforge.pmd.util.log;
|
||||
|
||||
import org.slf4j.event.Level;
|
||||
|
||||
import net.sourceforge.pmd.annotation.InternalApi;
|
||||
|
||||
/**
|
||||
@@ -14,11 +16,7 @@ import net.sourceforge.pmd.annotation.InternalApi;
|
||||
@InternalApi
|
||||
public final class NoopPmdLogger extends PmdLoggerBase implements PmdLogger {
|
||||
|
||||
public static final NoopPmdLogger INSTANCE = new NoopPmdLogger();
|
||||
|
||||
private NoopPmdLogger() {
|
||||
|
||||
}
|
||||
// note: not singleton because PmdLogger accumulates error count.
|
||||
|
||||
@Override
|
||||
protected boolean isLoggableImpl(Level level) {
|
||||
|
||||
@@ -4,8 +4,9 @@
|
||||
|
||||
package net.sourceforge.pmd.util.log;
|
||||
|
||||
import org.slf4j.event.Level;
|
||||
|
||||
import net.sourceforge.pmd.annotation.InternalApi;
|
||||
import net.sourceforge.pmd.internal.util.AssertionUtil;
|
||||
|
||||
/**
|
||||
* Logger façade. Can probably be converted to just SLF4J logger in PMD 7.
|
||||
@@ -21,50 +22,43 @@ public interface PmdLogger {
|
||||
|
||||
void logEx(Level level, String message, Object[] formatArgs, Throwable error);
|
||||
|
||||
void info(String message, Object... formatArgs);
|
||||
default void info(String message, Object... formatArgs) {
|
||||
log(Level.INFO, message, formatArgs);
|
||||
}
|
||||
|
||||
void trace(String message, Object... formatArgs);
|
||||
// todo trace and debug should be on SLF4J logger directly
|
||||
default void trace(String message, Object... formatArgs) {
|
||||
log(Level.TRACE, message, formatArgs);
|
||||
}
|
||||
|
||||
void debug(String message, Object... formatArgs);
|
||||
default void debug(String message, Object... formatArgs) {
|
||||
log(Level.DEBUG, message, formatArgs);
|
||||
}
|
||||
|
||||
void warning(String message, Object... formatArgs);
|
||||
default void warning(String message, Object... formatArgs) {
|
||||
log(Level.WARN, message, formatArgs);
|
||||
}
|
||||
|
||||
void warningEx(String message, Throwable error);
|
||||
default void warningEx(String message, Throwable error) {
|
||||
logEx(Level.WARN, message, new Object[0], error);
|
||||
}
|
||||
|
||||
void warningEx(String message, Object[] formatArgs, Throwable error);
|
||||
default void warningEx(String message, Object[] formatArgs, Throwable error) {
|
||||
logEx(Level.WARN, message, formatArgs, error);
|
||||
}
|
||||
|
||||
void error(String message, Object... formatArgs);
|
||||
default void error(String message, Object... formatArgs) {
|
||||
log(Level.ERROR, message, formatArgs);
|
||||
}
|
||||
|
||||
void errorEx(String message, Throwable error);
|
||||
default void errorEx(String message, Throwable error) {
|
||||
logEx(Level.ERROR, message, new Object[0], error);
|
||||
}
|
||||
|
||||
void errorEx(String message, Object[] formatArgs, Throwable error);
|
||||
default void errorEx(String message, Object[] formatArgs, Throwable error) {
|
||||
logEx(Level.ERROR, message, formatArgs, error);
|
||||
}
|
||||
|
||||
int numErrors();
|
||||
|
||||
// levels, in sync with SLF4J levels
|
||||
enum Level {
|
||||
TRACE,
|
||||
DEBUG,
|
||||
INFO,
|
||||
WARN,
|
||||
ERROR;
|
||||
|
||||
java.util.logging.Level toJutilLevel() {
|
||||
switch (this) {
|
||||
case DEBUG:
|
||||
return java.util.logging.Level.FINE;
|
||||
case ERROR:
|
||||
return java.util.logging.Level.SEVERE;
|
||||
case INFO:
|
||||
return java.util.logging.Level.INFO;
|
||||
case TRACE:
|
||||
return java.util.logging.Level.FINER;
|
||||
case WARN:
|
||||
return java.util.logging.Level.WARNING;
|
||||
default:
|
||||
throw AssertionUtil.shouldNotReachHere("exhaustive");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -5,12 +5,12 @@
|
||||
package net.sourceforge.pmd.util.log;
|
||||
|
||||
import java.text.MessageFormat;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import org.apache.commons.lang3.exception.ExceptionUtils;
|
||||
import org.slf4j.event.Level;
|
||||
|
||||
/**
|
||||
* A logger based on a {@link Logger}.
|
||||
* Base implementation.
|
||||
*
|
||||
* @author Clément Fournier
|
||||
*/
|
||||
@@ -63,50 +63,6 @@ abstract class PmdLoggerBase implements PmdLogger {
|
||||
*/
|
||||
protected abstract void logImpl(Level level, String message, Object[] formatArgs);
|
||||
|
||||
@Override
|
||||
public void trace(String message, Object... formatArgs) {
|
||||
log(Level.TRACE, message, formatArgs);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void debug(String message, Object... formatArgs) {
|
||||
log(Level.DEBUG, message, formatArgs);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void info(String message, Object... formatArgs) {
|
||||
log(Level.INFO, message, formatArgs);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void warning(String message, Object... formatArgs) {
|
||||
log(Level.WARN, message, formatArgs);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void warningEx(String message, Throwable error) {
|
||||
warningEx(message, new Object[0], error);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void warningEx(String message, Object[] formatArgs, Throwable error) {
|
||||
logEx(Level.WARN, message, formatArgs, error);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void error(String message, Object... formatArgs) {
|
||||
log(Level.ERROR, message, formatArgs);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void errorEx(String message, Throwable error) {
|
||||
errorEx(message, new Object[0], error);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void errorEx(String message, Object[] formatArgs, Throwable error) {
|
||||
logEx(Level.ERROR, message, formatArgs, error);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int numErrors() {
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
|
||||
package net.sourceforge.pmd.util.log;
|
||||
|
||||
import org.slf4j.event.Level;
|
||||
|
||||
import net.sourceforge.pmd.annotation.InternalApi;
|
||||
|
||||
/**
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
|
||||
package net.sourceforge.pmd.util.log;
|
||||
|
||||
import java.text.MessageFormat;
|
||||
import java.util.logging.Logger;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.event.Level;
|
||||
|
||||
import net.sourceforge.pmd.annotation.InternalApi;
|
||||
|
||||
@@ -25,11 +25,11 @@ public class SimplePmdLogger extends PmdLoggerBase implements PmdLogger {
|
||||
|
||||
@Override
|
||||
protected boolean isLoggableImpl(Level level) {
|
||||
return backend.isLoggable(level.toJutilLevel());
|
||||
return backend.isEnabledForLevel(level);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void logImpl(Level level, String message, Object[] formatArgs) {
|
||||
backend.log(level.toJutilLevel(), MessageFormat.format(message, formatArgs));
|
||||
backend.atLevel(level).log(message, formatArgs);
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -89,7 +89,7 @@ public class FileAnalysisCacheTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testStoreOnUnwritableFileShouldntThrow() throws Exception {
|
||||
public void testStoreOnUnwritableFileShouldntThrow() throws IOException {
|
||||
emptyCacheFile.setWritable(false);
|
||||
final FileAnalysisCache cache = new FileAnalysisCache(emptyCacheFile);
|
||||
cache.persist();
|
||||
|
||||
@@ -24,7 +24,7 @@ import net.sourceforge.pmd.util.log.NoopPmdLogger;
|
||||
public class PMDFilelistTest {
|
||||
|
||||
private static @NonNull FileCollector newCollector() {
|
||||
return FileCollector.newCollector(new LanguageVersionDiscoverer(), NoopPmdLogger.INSTANCE);
|
||||
return FileCollector.newCollector(new LanguageVersionDiscoverer(), new NoopPmdLogger());
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -4,7 +4,8 @@
|
||||
|
||||
package net.sourceforge.pmd.lang.document;
|
||||
|
||||
import java.util.logging.Logger;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import net.sourceforge.pmd.util.log.SimplePmdLogger;
|
||||
|
||||
@@ -13,7 +14,7 @@ import net.sourceforge.pmd.util.log.SimplePmdLogger;
|
||||
*/
|
||||
public class PmdTestLogger extends SimplePmdLogger {
|
||||
|
||||
private static final Logger LOG = Logger.getLogger("testlogger");
|
||||
private static final Logger LOG = LoggerFactory.getLogger(PmdTestLogger.class.getName());
|
||||
|
||||
public PmdTestLogger() {
|
||||
super(LOG);
|
||||
|
||||
Reference in new issue
Block a user