You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by er...@apache.org on 2020/04/18 00:43:46 UTC
[lucene-solr] branch master updated: LUCENE-7788: fail precommit on
unparameterised log messages and examine for wasted work/objects
This is an automated email from the ASF dual-hosted git repository.
erick pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git
The following commit(s) were added to refs/heads/master by this push:
new 3af165b LUCENE-7788: fail precommit on unparameterised log messages and examine for wasted work/objects
3af165b is described below
commit 3af165b32ac8028a6c01ac9c9a6d2c808efa0e85
Author: Erick Erickson <Er...@gmail.com>
AuthorDate: Fri Apr 17 20:40:32 2020 -0400
LUCENE-7788: fail precommit on unparameterised log messages and examine for wasted work/objects
---
build.gradle | 1 +
gradle/help.gradle | 3 +-
gradle/validation/validate-log-calls.gradle | 196 +++++++++++++++++++++
help/validateLogCalls.txt | 50 ++++++
lucene/CHANGES.txt | 2 +
solr/CHANGES.txt | 2 +
.../src/java/org/apache/solr/api/AnnotatedApi.java | 2 +-
solr/core/src/java/org/apache/solr/api/ApiBag.java | 2 +-
.../src/java/org/apache/solr/api/V2HttpCall.java | 2 +-
.../java/org/apache/solr/core/BlobRepository.java | 4 +-
.../apache/solr/core/CachingDirectoryFactory.java | 32 ++--
.../org/apache/solr/core/ConfigSetProperties.java | 4 +-
.../org/apache/solr/core/ConfigSetService.java | 2 +-
.../java/org/apache/solr/core/CoreContainer.java | 71 +++++---
.../apache/solr/core/CorePropertiesLocator.java | 16 +-
.../org/apache/solr/core/HdfsDirectoryFactory.java | 21 ++-
.../src/java/org/apache/solr/core/PluginBag.java | 34 +++-
.../org/apache/solr/core/QuerySenderListener.java | 2 +-
.../java/org/apache/solr/core/RequestHandlers.java | 6 +-
.../java/org/apache/solr/core/RequestParams.java | 8 +-
.../org/apache/solr/core/SchemaCodecFactory.java | 4 +-
.../src/java/org/apache/solr/core/SolrConfig.java | 44 +++--
.../src/java/org/apache/solr/core/SolrCore.java | 55 ++++--
.../src/java/org/apache/solr/core/SolrCores.java | 6 +-
.../org/apache/solr/core/SolrDeletionPolicy.java | 12 +-
.../src/java/org/apache/solr/core/SolrPaths.java | 7 +-
.../org/apache/solr/core/SolrResourceLoader.java | 37 ++--
.../java/org/apache/solr/core/SolrXmlConfig.java | 6 +-
.../apache/solr/core/StandardDirectoryFactory.java | 2 +-
.../solr/core/TransientSolrCoreCacheDefault.java | 4 +-
.../java/org/apache/solr/core/XmlConfigFile.java | 12 +-
.../src/java/org/apache/solr/core/ZkContainer.java | 8 +-
.../solr/core/snapshots/SolrSnapshotManager.java | 8 +-
.../snapshots/SolrSnapshotMetaDataManager.java | 14 +-
.../solr/core/snapshots/SolrSnapshotsTool.java | 15 +-
.../apache/solr/filestore/DistribPackageStore.java | 13 +-
.../org/apache/solr/filestore/PackageStoreAPI.java | 2 +-
.../java/org/apache/solr/rest/ManagedResource.java | 12 +-
.../apache/solr/rest/ManagedResourceStorage.java | 33 ++--
.../src/java/org/apache/solr/rest/RestManager.java | 21 ++-
.../analysis/ManagedSynonymFilterFactory.java | 4 +-
.../analysis/ManagedSynonymGraphFilterFactory.java | 4 +-
.../schema/analysis/ManagedWordSetResource.java | 7 +-
43 files changed, 599 insertions(+), 191 deletions(-)
diff --git a/build.gradle b/build.gradle
index b77e820..8ff971a 100644
--- a/build.gradle
+++ b/build.gradle
@@ -103,6 +103,7 @@ apply from: file('gradle/validation/owasp-dependency-check.gradle')
apply from: file('gradle/validation/ecj-lint.gradle')
apply from: file('gradle/validation/gradlew-scripts-tweaked.gradle')
apply from: file('gradle/validation/missing-docs-check.gradle')
+apply from: file('gradle/validation/validate-log-calls.gradle')
// Source or data regeneration tasks
apply from: file('gradle/generation/jflex.gradle')
diff --git a/gradle/help.gradle b/gradle/help.gradle
index 8727629..d76ce90 100644
--- a/gradle/help.gradle
+++ b/gradle/help.gradle
@@ -26,6 +26,7 @@ configure(rootProject) {
["ForbiddenApis", "help/forbiddenApis.txt", "How to add/apply rules for forbidden APIs."],
["LocalSettings", "help/localSettings.txt", "Local settings, overrides and build performance tweaks."],
["Git", "help/git.txt", "Git assistance and guides."],
+ ["ValidateLogCalls", "help/validateLogCalls.txt", "How to use logging calls efficiently."],
]
helpFiles.each { section, path, sectionInfo ->
@@ -45,7 +46,7 @@ configure(rootProject) {
println "guidelines, ant-equivalent commands etc. under help/*; or type:"
helpFiles.each { section, path, sectionInfo ->
println String.format(Locale.ROOT,
- " gradlew :help%-14s # %s", section, sectionInfo)
+ " gradlew :help%-16s # %s", section, sectionInfo)
}
}
}
diff --git a/gradle/validation/validate-log-calls.gradle b/gradle/validation/validate-log-calls.gradle
new file mode 100644
index 0000000..8af6ef7
--- /dev/null
+++ b/gradle/validation/validate-log-calls.gradle
@@ -0,0 +1,196 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import org.apache.tools.ant.BuildException
+
+import static java.util.concurrent.TimeUnit.SECONDS
+
+// Checks logging calls to keep from using patterns that might be expensive
+// either in CPU or unnecessary object creation
+
+configure(rootProject) {
+
+ allprojects {
+
+ task validateLogCalls(type: ValidateLogCallsTask) {
+ description "Checks that log calls are either validated or conform to efficient patterns."
+ group "verification"
+
+ doFirst {
+ if (project.hasProperty('srcDir')) {
+ srcDir = project.getProperty('srcDir')
+ } else { // Remove this later, make it optional
+ throw new BuildException(String.format(Locale.ENGLISH,
+ '''Until we get all the calls cleaned up, you MUST specify -PsrcDir=relative_path, e.g.
+ "-PsrcDir=solr/core/src/java/org/apache/solr/core". This task will recursively check all
+ "*.java" files under that directory'''))
+ }
+
+ checkPlus = Boolean.valueOf(propertyOrDefault('checkPlus', 'false'))
+ }
+ }
+ }
+}
+
+class ValidateLogCallsTask extends DefaultTask {
+ @Input
+ String srcDir = ""
+
+ @Input
+ boolean checkPlus
+
+ def logLevels = ["log.trace", "log.debug", "log.info", "log.warn", "log.error", "log.fatal"]
+
+ def found = 0;
+ def violations = new TreeSet();
+
+ def reportViolation(String msg) {
+ violations.add(System.lineSeparator + msg);
+ found++;
+ }
+
+ // We have a log.someting line, check for patterns we're not fond of.
+ def checkLogLine(File file, String line, int lineNumber, String prevLine) {
+ // Strip all of the comments, things in quotes and the like.
+ def level = ""
+ def lev = (line =~ "log\\.(.*?)\\(")
+ if (lev.find()) {
+ level = lev.group(1)
+ }
+ def stripped =
+ line.replaceFirst("//.*", " ") // remove comment to EOL. Again, fragile due to the possibility of embedded double slashes
+ .replaceFirst(/.*?\(/, " ") // Get rid of "log.info("
+ .replaceFirst(/\);/, " ") // get rid of the closing ");"
+ .replaceFirst("/\\*.*?\\*/", " ") // replace embedded comments "/*....*/"
+ .replaceAll(/".*?"/, " ") // remove anything between quotes. This is a bit fragile if there are embedded double quotes.
+ .replaceAll(/timeLeft\(.*?\)/, " ") // used all over tests, it's benign
+ .replaceAll(/TimeUnit\..*?\.convert\(.*?\)/, " ") // again, a pattern that's efficient
+
+
+ def m = stripped =~ "\\(.*?\\)"
+ def hasParens = m.find()
+ def hasPlus = stripped.contains("+")
+ if (hasParens == false && hasPlus == false) {
+ return
+ }
+ // Check that previous line isn't an if statement for this log level
+ if (prevLine.toLowerCase().contains("is" + level + "enabled")) {
+ return
+ }
+ if (level.equals("error") || level.equals("fatal")) {
+ if (checkPlus == false || hasPlus == false) {
+ return
+ }
+ }
+ reportViolation(String.format("Suspicious logging call File: '%s' line: '%d' log message: '%s' parent path: '%s'. Parameterize or surround with 'if (log.is*Enabled) {... stripped: '%s', level: '%s' checkPlus '%s' hasParens '%s' errorfatal '%s' hasPlus '%s'"
+ , file.name
+ , lineNumber, line
+ , file.getParentFile().getAbsolutePath()
+ , stripped //nocommit, debugging.
+ , level
+ , checkPlus
+ , hasParens
+ ,level.equals("error") || level.equals("fatal"),
+ hasPlus))
+ }
+
+
+// Require all our logger definitions lower case "log", except a couple of special ones.
+ def checkLogName(File file, String line) {
+ // It's many times faster to do check this way than use a regex
+ if (line.contains("static ") && line.contains("getLogger") && line.contains(" log ") == false) {
+ switch (file.name) {
+ case "LoggerFactory.java": break
+ case "SolrCore.java": // Except for two know log files with a different name.
+ if (line.contains("requestLog") || line.contains("slowLog")) {
+ break
+ }
+ default:
+ reportViolation("Change the logger name to lower-case 'log' in " + file.name + " " + line)
+ break;
+ }
+ }
+ }
+
+ def checkFile(File file) {
+ int state = 0 // 0 == not collecting a log line, 1 == collecting a log line, 2 == just collected the last.
+ int lineNumber = 0
+ StringBuilder sb = new StringBuilder();
+
+ // We have to assemble line-by-line to get the full log statement. We require that all loggers (except requestLog
+ // and slowLog) be exactly "log". That will be checked as well.
+ String prevLine = ""
+ file.eachLine { String line ->
+ lineNumber++
+ checkLogName(file, line)
+ switch (state) {
+ case 0:
+ logLevels.each {
+ if (line.contains(it)) {
+ if (line.contains(");")) {
+ state = 2
+ } else {
+ state = 1
+ }
+ sb.setLength(0)
+ sb.append(line)
+ }
+ }
+ break
+
+ case 1: // collecting
+ if (line.contains(");")) {
+ state = 2
+ }
+ sb.append(line)
+ break
+
+ default:
+ reportViolation("Bad state, should be 0-1 in the switch statement") // make people aware the code sucks
+ break
+ }
+ switch (state) { // It's just easier to do this here rather than read another line in the switch above.
+ case 0:
+ prevLine = line;
+ break;
+ case 1:
+ break;
+ case 2:
+ checkLogLine(file, sb.toString(), lineNumber, prevLine)
+ state = 0
+ break;
+ default:
+ break;
+ }
+ }
+ }
+
+ @TaskAction
+ def checkLogLines() {
+ project.sourceSets.each { srcSet ->
+ srcSet.java.each { f ->
+ if (srcDir != null && f.getCanonicalPath().contains(srcDir)) {
+ checkFile(f)
+ }
+ }
+ }
+ if (found) {
+ throw new BuildException(String.format(Locale.ENGLISH, 'Found %d violations in source files (%s).',
+ found, violations.join(', ')));
+ }
+ }
+}
diff --git a/help/validateLogCalls.txt b/help/validateLogCalls.txt
new file mode 100644
index 0000000..cc8c0fc8c
--- /dev/null
+++ b/help/validateLogCalls.txt
@@ -0,0 +1,50 @@
+Using log calls
+===============
+
+There are several hidden gotchas when using logging. The main
+problem is that certain patterns are evaluated and objects
+constructed even if the logging level is more restrictive
+than this call. If the logging level is WARN, then the following
+log.info patterns are evaluated and never-used objects are
+created even though the message is never logged.
+
+This can be very expensive as per measurements with Java Flight
+Recorder. It's particularly egregious when complex operations
+are performed for, say, log.debug or trace calls, which
+are rarely actually used.
+
+- log.info("some stuff " + "some other stuff") will concatenate the
+ strings and create an object
+
+- log.info("some stuff {}", object.method()) will execute the
+ method.
+
+- log.info("some stuff {}", object.toString()) will execute
+ the toString and then throw the results away.
+
+-----------
+NOTES:
+
+- If you're creating a logging call that has no choice but to
+ do something expensive, surround it with "if (log.is*Enabled)".
+
+- Logging calls can take a bare exception, but do not
+ use the braces if you want the stack trace! So
+ log.info("stuff {}", exception) will not print the full stack,
+ log.info("stuff ", exception) _will_ print the full stack.
+ log.inf0("stuff {} ", some_object, exception) will print the full stack.
+
+- When slf4j supports lambdas in logging calls (log4j2 does now),
+ we can use lambdas rather than "if log.is*Enabled". slf4j 2.0
+ will when released.
+
+- error and fatal level messages are NOT checked. However, if you want to
+ check these levels for including '+', specify '-PcheckPlus=true'. This is more
+ a style than functional check.
+
+For a fuller discussion, see LUCENE-7788 and the other JIRAs linked
+from there.
+
+Until we get all the calls cleaned up, you MUST specify -PsrcDir=relative_path,
+ e.g. '-PsrcDir=solr/core/src/java/org/apache/solr/core'. This task will
+ recursively check all '*.java. files under that directory.
diff --git a/lucene/CHANGES.txt b/lucene/CHANGES.txt
index 834e8e1..6cf4eb4 100644
--- a/lucene/CHANGES.txt
+++ b/lucene/CHANGES.txt
@@ -156,6 +156,8 @@ Optimizations
* LUCENE-9286: FST.Arc.BitTable reads directly FST bytes. Arc is lightweight again and FSTEnum traversal faster.
(Bruno Roustant)
+* LUCENE-7788: fail precommit on unparameterised log messages and examine for wasted work/objects (Erick Erickson)
+
Bug Fixes
---------------------
* LUCENE-9259: Fix wrong NGramFilterFactory argument name for preserveOriginal option (Paul Pazderski)
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 3191c22..00c17df 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -101,6 +101,8 @@ Optimizations
* SOLR-14376: Optimize filter queries that match all docs. (David Smiley)
+* LUCENE-7788: fail precommit on unparameterised log messages and examine for wasted work/objects (Erick Erickson)
+
Bug Fixes
---------------------
* SOLR-13264: IndexSizeTrigger aboveOp / belowOp properties not in valid properties.
diff --git a/solr/core/src/java/org/apache/solr/api/AnnotatedApi.java b/solr/core/src/java/org/apache/solr/api/AnnotatedApi.java
index 6cd65cd..ae04d03 100644
--- a/solr/core/src/java/org/apache/solr/api/AnnotatedApi.java
+++ b/solr/core/src/java/org/apache/solr/api/AnnotatedApi.java
@@ -161,7 +161,7 @@ public class AnnotatedApi extends Api implements PermissionNameProvider {
List<Map> errs = CommandOperation.captureErrors(cmds);
if (!errs.isEmpty()) {
- log.error(ERR + Utils.toJSONString(errs));
+ log.error("{}{}", ERR, Utils.toJSONString(errs));
throw new ApiBag.ExceptionWithErrObject(SolrException.ErrorCode.BAD_REQUEST, ERR, errs);
}
diff --git a/solr/core/src/java/org/apache/solr/api/ApiBag.java b/solr/core/src/java/org/apache/solr/api/ApiBag.java
index 8a3f972..36f012c 100644
--- a/solr/core/src/java/org/apache/solr/api/ApiBag.java
+++ b/solr/core/src/java/org/apache/solr/api/ApiBag.java
@@ -70,7 +70,7 @@ public class ApiBag {
try {
validateAndRegister(api, nameSubstitutes);
} catch (Exception e) {
- log.error("Unable to register plugin:" + api.getClass().getName() + "with spec :" + Utils.toJSONString(api.getSpec()), e);
+ log.error("Unable to register plugin: {} with spec {} :", api.getClass().getName(), Utils.toJSONString(api.getSpec()), e);
if (e instanceof RuntimeException) {
throw (RuntimeException) e;
} else {
diff --git a/solr/core/src/java/org/apache/solr/api/V2HttpCall.java b/solr/core/src/java/org/apache/solr/api/V2HttpCall.java
index 5dd89a3..d9dca56 100644
--- a/solr/core/src/java/org/apache/solr/api/V2HttpCall.java
+++ b/solr/core/src/java/org/apache/solr/api/V2HttpCall.java
@@ -132,7 +132,7 @@ public class V2HttpCall extends HttpSolrCall {
core = cores.getCore(origCorename);
}
if (core == null) {
- log.error(">> path: '" + path + "'");
+ log.error(">> path: '{}'", path);
if (path.endsWith(CommonParams.INTROSPECT)) {
initAdminRequest(path);
return;
diff --git a/solr/core/src/java/org/apache/solr/core/BlobRepository.java b/solr/core/src/java/org/apache/solr/core/BlobRepository.java
index d2f57a9..a7d524f 100644
--- a/solr/core/src/java/org/apache/solr/core/BlobRepository.java
+++ b/solr/core/src/java/org/apache/solr/core/BlobRepository.java
@@ -255,7 +255,9 @@ public class BlobRepository {
replica = r;
break;
} else {
- log.info("replica {} says it is active but not a member of live nodes", r.get(ZkStateReader.NODE_NAME_PROP));
+ if (log.isInfoEnabled()) {
+ log.info("replica {} says it is active but not a member of live nodes", r.get(ZkStateReader.NODE_NAME_PROP));
+ }
}
}
}
diff --git a/solr/core/src/java/org/apache/solr/core/CachingDirectoryFactory.java b/solr/core/src/java/org/apache/solr/core/CachingDirectoryFactory.java
index 24f5a23..3411325 100644
--- a/solr/core/src/java/org/apache/solr/core/CachingDirectoryFactory.java
+++ b/solr/core/src/java/org/apache/solr/core/CachingDirectoryFactory.java
@@ -157,12 +157,16 @@ public abstract class CachingDirectoryFactory extends DirectoryFactory {
@Override
public void close() throws IOException {
synchronized (this) {
- log.debug("Closing {} - {} directories currently being tracked", this.getClass().getSimpleName(), byDirectoryCache.size());
+ if (log.isDebugEnabled()) {
+ log.debug("Closing {} - {} directories currently being tracked", this.getClass().getSimpleName(), byDirectoryCache.size());
+ }
this.closed = true;
Collection<CacheValue> values = byDirectoryCache.values();
for (CacheValue val : values) {
- log.debug("Closing {} - currently tracking: {}",
- this.getClass().getSimpleName(), val);
+
+ if (log.isDebugEnabled()) {
+ log.debug("Closing {} - currently tracking: {}", this.getClass().getSimpleName(), val);
+ }
try {
// if there are still refs out, we have to wait for them
assert val.refCnt > -1 : val.refCnt;
@@ -190,7 +194,7 @@ public abstract class CachingDirectoryFactory extends DirectoryFactory {
try {
for (CacheValue v : val.closeEntries) {
assert v.refCnt == 0 : val.refCnt;
- log.debug("Closing directory when closing factory: " + v.path);
+ log.debug("Closing directory when closing factory: {}", v.path);
boolean cl = closeCacheValue(v);
if (cl) {
closedDirs.add(v);
@@ -202,7 +206,7 @@ public abstract class CachingDirectoryFactory extends DirectoryFactory {
}
for (CacheValue val : removeEntries) {
- log.debug("Removing directory after core close: " + val.path);
+ log.debug("Removing directory after core close: {}", val.path);
try {
removeDirectory(val);
} catch (Exception e) {
@@ -225,7 +229,7 @@ public abstract class CachingDirectoryFactory extends DirectoryFactory {
// be sure this is called with the this sync lock
// returns true if we closed the cacheValue, false if it will be closed later
private boolean closeCacheValue(CacheValue cacheValue) {
- log.debug("looking to close {} {}", cacheValue.path, cacheValue.closeEntries.toString());
+ log.debug("looking to close {} {}", cacheValue.path, cacheValue.closeEntries);
List<CloseListener> listeners = closeListeners.remove(cacheValue.directory);
if (listeners != null) {
for (CloseListener listener : listeners) {
@@ -269,7 +273,7 @@ public abstract class CachingDirectoryFactory extends DirectoryFactory {
for (CacheValue val : cacheValue.removeEntries) {
if (!val.deleteAfterCoreClose) {
- log.debug("Removing directory before core close: " + val.path);
+ log.debug("Removing directory before core close: {}", val.path);
try {
removeDirectory(val);
} catch (Exception e) {
@@ -293,13 +297,15 @@ public abstract class CachingDirectoryFactory extends DirectoryFactory {
}
private void close(CacheValue val) {
- log.debug("Closing directory, CoreContainer#isShutdown={}", coreContainer != null ? coreContainer.isShutDown() : "null");
+ if (log.isDebugEnabled()) {
+ log.debug("Closing directory, CoreContainer#isShutdown={}", coreContainer != null ? coreContainer.isShutDown() : "null");
+ }
try {
if (coreContainer != null && coreContainer.isShutDown() && val.directory instanceof ShutdownAwareDirectory) {
- log.debug("Closing directory on shutdown: " + val.path);
+ log.debug("Closing directory on shutdown: {}", val.path);
((ShutdownAwareDirectory) val.directory).closeOnShutdown();
} else {
- log.debug("Closing directory: " + val.path);
+ log.debug("Closing directory: {}", val.path);
val.directory.close();
}
assert ObjectReleaseTracker.release(val.directory);
@@ -402,7 +408,7 @@ public abstract class CachingDirectoryFactory extends DirectoryFactory {
dataHomePath = Paths.get((String) args.get(SolrXmlConfig.SOLR_DATA_HOME));
}
if (dataHomePath != null) {
- log.info(SolrXmlConfig.SOLR_DATA_HOME + "=" + dataHomePath);
+ log.info("{} = {}", SolrXmlConfig.SOLR_DATA_HOME, dataHomePath);
}
}
@@ -427,7 +433,9 @@ public abstract class CachingDirectoryFactory extends DirectoryFactory {
throw new IllegalArgumentException("Unknown directory: " + directory
+ " " + byDirectoryCache);
}
- log.debug("Releasing directory: " + cacheValue.path + " " + (cacheValue.refCnt - 1) + " " + cacheValue.doneWithDir);
+ if (log.isDebugEnabled()) {
+ log.debug("Releasing directory: {} {} {}", cacheValue.path, (cacheValue.refCnt - 1), cacheValue.doneWithDir);
+ }
cacheValue.refCnt--;
diff --git a/solr/core/src/java/org/apache/solr/core/ConfigSetProperties.java b/solr/core/src/java/org/apache/solr/core/ConfigSetProperties.java
index dd62442..feaef8f 100644
--- a/solr/core/src/java/org/apache/solr/core/ConfigSetProperties.java
+++ b/solr/core/src/java/org/apache/solr/core/ConfigSetProperties.java
@@ -57,7 +57,9 @@ public class ConfigSetProperties {
try {
reader = new InputStreamReader(loader.openResource(name), StandardCharsets.UTF_8);
} catch (SolrResourceNotFoundException ex) {
- log.debug("Did not find ConfigSet properties, assuming default properties: {}", ex.getMessage());
+ if (log.isDebugEnabled()) {
+ log.debug("Did not find ConfigSet properties, assuming default properties: {}", ex.getMessage());
+ }
return null;
} catch (Exception ex) {
throw new SolrException(ErrorCode.SERVER_ERROR, "Unable to load reader for ConfigSet properties: " + name, ex);
diff --git a/solr/core/src/java/org/apache/solr/core/ConfigSetService.java b/solr/core/src/java/org/apache/solr/core/ConfigSetService.java
index 3f54fe2..7b5ca79 100644
--- a/solr/core/src/java/org/apache/solr/core/ConfigSetService.java
+++ b/solr/core/src/java/org/apache/solr/core/ConfigSetService.java
@@ -231,7 +231,7 @@ public abstract class ConfigSetService {
} catch (FileNotFoundException e) {
return null; // acceptable
} catch (IOException e) {
- log.warn("Unexpected exception when getting modification time of " + schemaFile, e);
+ log.warn("Unexpected exception when getting modification time of {}", schemaFile, e);
return null; // debatable; we'll see an error soon if there's a real problem
}
}
diff --git a/solr/core/src/java/org/apache/solr/core/CoreContainer.java b/solr/core/src/java/org/apache/solr/core/CoreContainer.java
index 6f895aa..4b7c3f8 100644
--- a/solr/core/src/java/org/apache/solr/core/CoreContainer.java
+++ b/solr/core/src/java/org/apache/solr/core/CoreContainer.java
@@ -274,7 +274,9 @@ public class CoreContainer {
}
{
- log.debug("New CoreContainer " + System.identityHashCode(this));
+ if (log.isDebugEnabled()) {
+ log.debug("New CoreContainer {}", System.identityHashCode(this));
+ }
}
/**
@@ -346,7 +348,7 @@ public class CoreContainer {
log.debug("Authorization config not modified");
return;
}
- log.info("Initializing authorization plugin: " + klas);
+ log.info("Initializing authorization plugin: {}", klas);
authorizationPlugin = new SecurityPluginHolder<>(newVersion,
getResourceLoader().newInstance(klas, AuthorizationPlugin.class));
@@ -380,7 +382,7 @@ public class CoreContainer {
log.debug("Auditlogger config not modified");
return;
}
- log.info("Initializing auditlogger plugin: " + klas);
+ log.info("Initializing auditlogger plugin: {}", klas);
newAuditloggerPlugin = new SecurityPluginHolder<>(newVersion,
getResourceLoader().newInstance(klas, AuditLoggerPlugin.class));
@@ -413,11 +415,11 @@ public class CoreContainer {
}
if (pluginClassName != null) {
- log.debug("Authentication plugin class obtained from security.json: " + pluginClassName);
+ log.debug("Authentication plugin class obtained from security.json: {}", pluginClassName);
} else if (System.getProperty(AUTHENTICATION_PLUGIN_PROP) != null) {
pluginClassName = System.getProperty(AUTHENTICATION_PLUGIN_PROP);
- log.debug("Authentication plugin class obtained from system property '" +
- AUTHENTICATION_PLUGIN_PROP + "': " + pluginClassName);
+ log.debug("Authentication plugin class obtained from system property '{}': {}"
+ , AUTHENTICATION_PLUGIN_PROP, pluginClassName);
} else {
log.debug("No authentication plugin used.");
}
@@ -431,7 +433,7 @@ public class CoreContainer {
// Initialize the plugin
if (pluginClassName != null) {
- log.info("Initializing authentication plugin: " + pluginClassName);
+ log.info("Initializing authentication plugin: {}", pluginClassName);
authenticationPlugin = new SecurityPluginHolder<>(newVersion,
getResourceLoader().newInstance(pluginClassName,
AuthenticationPlugin.class,
@@ -582,7 +584,9 @@ public class CoreContainer {
* Load the cores defined for this CoreContainer
*/
public void load() {
- log.debug("Loading cores into CoreContainer [instanceDir={}]", getSolrHome());
+ if (log.isDebugEnabled()) {
+ log.debug("Loading cores into CoreContainer [instanceDir={}]", getSolrHome());
+ }
// Always add $SOLR_HOME/lib to the shared resource loader
Set<String> libDirs = new LinkedHashSet<>();
@@ -890,16 +894,17 @@ public class CoreContainer {
private void warnUsersOfInsecureSettings() {
if (authenticationPlugin == null || authorizationPlugin == null) {
- log.warn("Not all security plugins configured! authentication={} authorization={}. Solr is only as secure as " +
- "you make it. Consider configuring authentication/authorization before exposing Solr to users internal or " +
- "external. See https://s.apache.org/solrsecurity for more info",
- (authenticationPlugin != null) ? "enabled" : "disabled",
- (authorizationPlugin != null) ? "enabled" : "disabled");
+ if (log.isWarnEnabled()) {
+ log.warn("Not all security plugins configured! authentication={} authorization={}. Solr is only as secure as " +
+ "you make it. Consider configuring authentication/authorization before exposing Solr to users internal or " +
+ "external. See https://s.apache.org/solrsecurity for more info",
+ (authenticationPlugin != null) ? "enabled" : "disabled",
+ (authorizationPlugin != null) ? "enabled" : "disabled");
+ }
}
if (authenticationPlugin !=null && StringUtils.isNotEmpty(System.getProperty("solr.jetty.https.port"))) {
- log.warn("Solr authentication is enabled, but SSL is off. Consider enabling SSL to protect user credentials and " +
- "data with encryption.");
+ log.warn("Solr authentication is enabled, but SSL is off. Consider enabling SSL to protect user credentials and data with encryption.");
}
}
@@ -928,7 +933,9 @@ public class CoreContainer {
OverseerTaskQueue overseerCollectionQueue = zkController.getOverseerCollectionQueue();
overseerCollectionQueue.allowOverseerPendingTasksToComplete();
}
- log.info("Shutting down CoreContainer instance=" + System.identityHashCode(this));
+ if (log.isInfoEnabled()) {
+ log.info("Shutting down CoreContainer instance={}", System.identityHashCode(this));
+ }
ExecutorUtil.shutdownAndAwaitTermination(coreContainerAsyncTaskExecutor);
ExecutorService customThreadPool = ExecutorUtil.newMDCAwareCachedThreadPool(new SolrNamedThreadFactory("closeThreadPool"));
@@ -1111,13 +1118,17 @@ public class CoreContainer {
coreInitFailures.remove(cd.getName());
if (old == null || old == core) {
- log.debug("registering core: " + cd.getName());
+ if (log.isDebugEnabled()) {
+ log.debug("registering core: {}", cd.getName());
+ }
if (registerInZk) {
zkSys.registerInZk(core, false, skipRecovery);
}
return null;
} else {
- log.debug("replacing core: " + cd.getName());
+ if (log.isDebugEnabled()) {
+ log.debug("replacing core: {}", cd.getName());
+ }
old.close();
if (registerInZk) {
zkSys.registerInZk(core, false, skipRecovery);
@@ -1263,7 +1274,9 @@ public class CoreContainer {
ConfigSet coreConfig = coreConfigService.loadConfigSet(dcore);
dcore.setConfigSetTrusted(coreConfig.isTrusted());
- log.info("Creating SolrCore '{}' using configuration from {}, trusted={}", dcore.getName(), coreConfig.getName(), dcore.isConfigSetTrusted());
+ if (log.isInfoEnabled()) {
+ log.info("Creating SolrCore '{}' using configuration from {}, trusted={}", dcore.getName(), coreConfig.getName(), dcore.isConfigSetTrusted());
+ }
try {
core = new SolrCore(this, dcore, coreConfig);
} catch (SolrException e) {
@@ -1365,8 +1378,10 @@ public class CoreContainer {
case none:
throw original;
default:
- log.warn("Failed to create core, and did not recognize specified 'CoreInitFailedAction': [{}]. Valid options are {}.",
- action, Arrays.asList(CoreInitFailedAction.values()));
+ if (log.isWarnEnabled()) {
+ log.warn("Failed to create core, and did not recognize specified 'CoreInitFailedAction': [{}]. Valid options are {}.",
+ action, Arrays.asList(CoreInitFailedAction.values()));
+ }
throw original;
}
}
@@ -1516,7 +1531,9 @@ public class CoreContainer {
try {
solrCores.waitAddPendingCoreOps(cd.getName());
ConfigSet coreConfig = coreConfigService.loadConfigSet(cd);
- log.info("Reloading SolrCore '{}' using configuration from {}", cd.getName(), coreConfig.getName());
+ if (log.isInfoEnabled()) {
+ log.info("Reloading SolrCore '{}' using configuration from {}", cd.getName(), coreConfig.getName());
+ }
newCore = core.reload(coreConfig);
DocCollection docCollection = null;
@@ -1600,7 +1617,7 @@ public class CoreContainer {
coresLocator.swap(this, solrCores.getCoreDescriptor(n0), solrCores.getCoreDescriptor(n1));
- log.info("swapped: " + n0 + " with " + n1);
+ log.info("swapped: {} with {}", n0, n1);
}
/**
@@ -1963,9 +1980,11 @@ public class CoreContainer {
DocCollection coll = getZkController().getZkStateReader().getClusterState().getCollection(cd.getCollectionName());
for (Replica rep : coll.getReplicas()) {
if (coreName.equals(rep.getCoreName())) {
- log.warn("Core properties file for node {} found with no coreNodeName, attempting to repair with value {}. See SOLR-11503. " +
- "This message should only appear if upgrading from collections created Solr 6.6.1 through 7.1.",
- rep.getCoreName(), rep.getName());
+ if (log.isWarnEnabled()) {
+ log.warn("Core properties file for node {} found with no coreNodeName, attempting to repair with value {}. See SOLR-11503. " +
+ "This message should only appear if upgrading from collections created Solr 6.6.1 through 7.1.",
+ rep.getCoreName(), rep.getName());
+ }
cd.getCloudDescriptor().setCoreNodeName(rep.getName());
coresLocator.persist(this, cd);
return true;
diff --git a/solr/core/src/java/org/apache/solr/core/CorePropertiesLocator.java b/solr/core/src/java/org/apache/solr/core/CorePropertiesLocator.java
index 25447bf..32cea92 100644
--- a/solr/core/src/java/org/apache/solr/core/CorePropertiesLocator.java
+++ b/solr/core/src/java/org/apache/solr/core/CorePropertiesLocator.java
@@ -109,7 +109,9 @@ public class CorePropertiesLocator implements CoresLocator {
try {
Files.deleteIfExists(propfile);
} catch (IOException e) {
- log.warn("Couldn't delete core properties file {}: {}", propfile, e.getMessage());
+ if (log.isWarnEnabled()) {
+ log.warn("Couldn't delete core properties file {}: {}", propfile, e.getMessage());
+ }
}
}
}
@@ -144,7 +146,9 @@ public class CorePropertiesLocator implements CoresLocator {
if (file.getFileName().toString().equals(PROPERTIES_FILENAME)) {
CoreDescriptor cd = buildCoreDescriptor(file, cc);
if (cd != null) {
- log.debug("Found core {} in {}", cd.getName(), cd.getInstanceDir());
+ if (log.isDebugEnabled()) {
+ log.debug("Found core {} in {}", cd.getName(), cd.getInstanceDir());
+ }
cds.add(cd);
}
return FileVisitResult.SKIP_SIBLINGS;
@@ -167,9 +171,13 @@ public class CorePropertiesLocator implements CoresLocator {
} catch (IOException e) {
throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "Couldn't walk file tree under " + this.rootDirectory, e);
}
- log.info("Found {} core definitions underneath {}", cds.size(), rootDirectory);
+ if (log.isInfoEnabled()) {
+ log.info("Found {} core definitions underneath {}", cds.size(), rootDirectory);
+ }
if (cds.size() > 0) {
- log.info("Cores are: {}", cds.stream().map(CoreDescriptor::getName).collect(Collectors.toList()));
+ if (log.isInfoEnabled()) {
+ log.info("Cores are: {}", cds.stream().map(CoreDescriptor::getName).collect(Collectors.toList()));
+ }
}
return cds;
}
diff --git a/solr/core/src/java/org/apache/solr/core/HdfsDirectoryFactory.java b/solr/core/src/java/org/apache/solr/core/HdfsDirectoryFactory.java
index 114f74f..e73acd6 100644
--- a/solr/core/src/java/org/apache/solr/core/HdfsDirectoryFactory.java
+++ b/solr/core/src/java/org/apache/solr/core/HdfsDirectoryFactory.java
@@ -162,13 +162,14 @@ public class HdfsDirectoryFactory extends CachingDirectoryFactory implements Sol
if (this.hdfsDataDir != null && this.hdfsDataDir.length() == 0) {
this.hdfsDataDir = null;
} else {
- log.info(HDFS_HOME + "=" + this.hdfsDataDir);
+ log.info("{}={}", HDFS_HOME, this.hdfsDataDir);
}
cacheMerges = getConfig(CACHE_MERGES, false);
cacheReadOnce = getConfig(CACHE_READONCE, false);
boolean kerberosEnabled = getConfig(KERBEROS_ENABLED, false);
- log.info("Solr Kerberos Authentication "
- + (kerberosEnabled ? "enabled" : "disabled"));
+ if (log.isInfoEnabled()) {
+ log.info("Solr Kerberos Authentication {}", (kerberosEnabled ? "enabled" : "disabled"));
+ }
if (kerberosEnabled) {
initKerberos();
}
@@ -178,7 +179,7 @@ public class HdfsDirectoryFactory extends CachingDirectoryFactory implements Sol
protected LockFactory createLockFactory(String rawLockType) throws IOException {
if (null == rawLockType) {
rawLockType = DirectoryFactory.LOCK_TYPE_HDFS;
- log.warn("No lockType configured, assuming '"+rawLockType+"'.");
+ log.warn("No lockType configured, assuming '{}'.", rawLockType);
}
final String lockType = rawLockType.toLowerCase(Locale.ROOT).trim();
switch (lockType) {
@@ -225,10 +226,12 @@ public class HdfsDirectoryFactory extends CachingDirectoryFactory implements Sol
log.info(
"Number of slabs of block cache [{}] with direct memory allocation set to [{}]",
bankCount, directAllocation);
- log.info(
- "Block cache target memory usage, slab size of [{}] will allocate [{}] slabs and use ~[{}] bytes",
- new Object[] {slabSize, bankCount,
- ((long) bankCount * (long) slabSize)});
+ if (log.isInfoEnabled()) {
+ log.info(
+ "Block cache target memory usage, slab size of [{}] will allocate [{}] slabs and use ~[{}] bytes",
+ new Object[]{slabSize, bankCount,
+ ((long) bankCount * (long) slabSize)});
+ }
int bsBufferSize = params.getInt("solr.hdfs.blockcache.bufferstore.buffersize", blockSize);
int bsBufferCount = params.getInt("solr.hdfs.blockcache.bufferstore.buffercount", 0); // this is actually total size
@@ -535,7 +538,7 @@ public class HdfsDirectoryFactory extends CachingDirectoryFactory implements Sol
try {
pathExists = fileSystem.exists(dataDirPath);
} catch (IOException e) {
- log.error("Error checking if hdfs path "+dataDir+" exists", e);
+ log.error("Error checking if hdfs path exists {}", dataDir, e);
}
if (!pathExists) {
log.warn("{} does not point to a valid data directory; skipping clean-up of old index directories.", dataDir);
diff --git a/solr/core/src/java/org/apache/solr/core/PluginBag.java b/solr/core/src/java/org/apache/solr/core/PluginBag.java
index b26b987..50ce5fb 100644
--- a/solr/core/src/java/org/apache/solr/core/PluginBag.java
+++ b/solr/core/src/java/org/apache/solr/core/PluginBag.java
@@ -128,7 +128,9 @@ public class PluginBag<T> implements AutoCloseable {
public PluginHolder<T> createPlugin(PluginInfo info) {
if ("true".equals(String.valueOf(info.attributes.get("runtimeLib")))) {
- log.debug(" {} : '{}' created with runtimeLib=true ", meta.getCleanTag(), info.name);
+ if (log.isDebugEnabled()) {
+ log.debug(" {} : '{}' created with runtimeLib=true ", meta.getCleanTag(), info.name);
+ }
LazyPluginHolder<T> holder = new LazyPluginHolder<>(meta, info, core, RuntimeLib.isEnabled() ?
core.getMemClassLoader() :
core.getResourceLoader(), true);
@@ -137,7 +139,9 @@ public class PluginBag<T> implements AutoCloseable {
(PluginHolder<T>) new UpdateRequestProcessorChain.LazyUpdateProcessorFactoryHolder(holder) :
holder;
} else if ("lazy".equals(info.attributes.get("startup")) && meta.options.contains(SolrConfig.PluginOpts.LAZY)) {
- log.debug("{} : '{}' created with startup=lazy ", meta.getCleanTag(), info.name);
+ if (log.isDebugEnabled()) {
+ log.debug("{} : '{}' created with startup=lazy ", meta.getCleanTag(), info.name);
+ }
return new LazyPluginHolder<T>(meta, info, core, core.getResourceLoader(), false);
} else {
if (info.pkgName != null) {
@@ -254,7 +258,11 @@ public class PluginBag<T> implements AutoCloseable {
void setDefault(String def) {
if (!registry.containsKey(def)) return;
- if (this.def != null) log.warn("Multiple defaults for : " + meta.getCleanTag());
+ if (this.def != null) {
+ if (log.isWarnEnabled()) {
+ log.warn("Multiple defaults for : {}", meta.getCleanTag());
+ }
+ }
this.def = def;
}
@@ -291,11 +299,17 @@ public class PluginBag<T> implements AutoCloseable {
String name = info.name;
if (meta.clazz.equals(SolrRequestHandler.class)) name = RequestHandlers.normalize(info.name);
PluginHolder<T> old = put(name, o);
- if (old != null) log.warn("Multiple entries of {} with name {}", meta.getCleanTag(), name);
+ if (old != null) {
+ if (log.isWarnEnabled()) {
+ log.warn("Multiple entries of {} with name {}", meta.getCleanTag(), name);
+ }
+ }
}
if (infos.size() > 0) { // Aggregate logging
- log.debug("[{}] Initialized {} plugins of type {}: {}", solrCore.getName(), infos.size(), meta.getCleanTag(),
- infos.stream().map(i -> i.name).collect(Collectors.toList()));
+ if (log.isDebugEnabled()) {
+ log.debug("[{}] Initialized {} plugins of type {}: {}", solrCore.getName(), infos.size(), meta.getCleanTag(),
+ infos.stream().map(i -> i.name).collect(Collectors.toList()));
+ }
}
for (Map.Entry<String, T> e : defaults.entrySet()) {
if (!contains(e.getKey())) {
@@ -332,7 +346,7 @@ public class PluginBag<T> implements AutoCloseable {
try {
e.getValue().close();
} catch (Exception exp) {
- log.error("Error closing plugin " + e.getKey() + " of type : " + meta.getCleanTag(), exp);
+ log.error("Error closing plugin {} of type : {}", e.getKey(), meta.getCleanTag(), exp);
}
}
}
@@ -341,7 +355,7 @@ public class PluginBag<T> implements AutoCloseable {
try {
if (inst != null && inst instanceof AutoCloseable) ((AutoCloseable) inst).close();
} catch (Exception e) {
- log.error("Error closing "+ inst , e);
+ log.error("Error closing {}", inst , e);
}
}
@@ -442,7 +456,9 @@ public class PluginBag<T> implements AutoCloseable {
private synchronized boolean createInst() {
if (lazyInst != null) return false;
- log.info("Going to create a new {} with {} ", pluginMeta.getCleanTag(), pluginInfo.toString());
+ if (log.isInfoEnabled()) {
+ log.info("Going to create a new {} with {} ", pluginMeta.getCleanTag(), pluginInfo.toString());
+ }
if (resourceLoader instanceof MemClassLoader) {
MemClassLoader loader = (MemClassLoader) resourceLoader;
loader.loadJars();
diff --git a/solr/core/src/java/org/apache/solr/core/QuerySenderListener.java b/solr/core/src/java/org/apache/solr/core/QuerySenderListener.java
index 9037ef3..a0dbbb1 100644
--- a/solr/core/src/java/org/apache/solr/core/QuerySenderListener.java
+++ b/solr/core/src/java/org/apache/solr/core/QuerySenderListener.java
@@ -47,7 +47,7 @@ public class QuerySenderListener extends AbstractSolrEventListener {
@Override
public void newSearcher(SolrIndexSearcher newSearcher, SolrIndexSearcher currentSearcher) {
final SolrIndexSearcher searcher = newSearcher;
- log.info("QuerySenderListener sending requests to " + newSearcher);
+ log.info("QuerySenderListener sending requests to {}", newSearcher);
List<NamedList> allLists = (List<NamedList>)getArgs().get("queries");
if (allLists == null) return;
boolean createNewReqInfo = SolrRequestInfo.getRequestInfo() == null;
diff --git a/solr/core/src/java/org/apache/solr/core/RequestHandlers.java b/solr/core/src/java/org/apache/solr/core/RequestHandlers.java
index dd06fa5..24b207c 100644
--- a/solr/core/src/java/org/apache/solr/core/RequestHandlers.java
+++ b/solr/core/src/java/org/apache/solr/core/RequestHandlers.java
@@ -129,7 +129,9 @@ public final class RequestHandlers {
}
handlers.init(Collections.emptyMap(),core, modifiedInfos);
handlers.alias(handlers.getDefault(), "");
- log.debug("Registered paths: {}" , StrUtils.join(new ArrayList<>(handlers.keySet()) , ',' ));
+ if (log.isDebugEnabled()) {
+ log.debug("Registered paths: {}", StrUtils.join(new ArrayList<>(handlers.keySet()), ','));
+ }
if (handlers.get("") == null && !handlers.alias("/select", "")) {
if (handlers.get("") == null && !handlers.alias("standard", "")) {
log.warn("no default request handler is registered (either '/select' or 'standard')");
@@ -143,7 +145,7 @@ public final class RequestHandlers {
if(p!=null) {
for (String arg : StrUtils.splitSmart(p, ',')) {
if(config.getInitParams().containsKey(arg)) ags.add(config.getInitParams().get(arg));
- else log.warn("INVALID paramSet {} in requestHandler {}", arg, info.toString());
+ else log.warn("INVALID paramSet {} in requestHandler {}", arg, info);
}
}
for (InitParams args : config.getInitParams().values())
diff --git a/solr/core/src/java/org/apache/solr/core/RequestParams.java b/solr/core/src/java/org/apache/solr/core/RequestParams.java
index d1f7f3d..9a5249b 100644
--- a/solr/core/src/java/org/apache/solr/core/RequestParams.java
+++ b/solr/core/src/java/org/apache/solr/core/RequestParams.java
@@ -147,13 +147,17 @@ public class RequestParams implements MapSerializable {
ZkSolrResourceLoader resourceLoader = (ZkSolrResourceLoader) loader;
try {
Stat stat = resourceLoader.getZkController().getZkClient().exists(resourceLoader.getConfigSetZkPath() + "/" + RequestParams.RESOURCE, null, true);
- log.debug("latest version of {} in ZK is : {}", resourceLoader.getConfigSetZkPath() + "/" + RequestParams.RESOURCE, stat == null ? "" : stat.getVersion());
+ if (log.isDebugEnabled()) {
+ log.debug("latest version of {}/{} in ZK is : {}", resourceLoader.getConfigSetZkPath(), RequestParams.RESOURCE, stat == null ? "" : stat.getVersion());
+ }
if (stat == null) {
requestParams = new RequestParams(Collections.EMPTY_MAP, -1);
} else if (requestParams == null || stat.getVersion() > requestParams.getZnodeVersion()) {
Object[] o = getMapAndVersion(loader, RequestParams.RESOURCE);
requestParams = new RequestParams((Map) o[0], (Integer) o[1]);
- log.info("request params refreshed to version {}", requestParams.getZnodeVersion());
+ if (log.isInfoEnabled()) {
+ log.info("request params refreshed to version {}", requestParams.getZnodeVersion());
+ }
}
} catch (KeeperException | InterruptedException e) {
SolrZkClient.checkInterrupted(e);
diff --git a/solr/core/src/java/org/apache/solr/core/SchemaCodecFactory.java b/solr/core/src/java/org/apache/solr/core/SchemaCodecFactory.java
index 761c750..fa34edd 100644
--- a/solr/core/src/java/org/apache/solr/core/SchemaCodecFactory.java
+++ b/solr/core/src/java/org/apache/solr/core/SchemaCodecFactory.java
@@ -86,10 +86,10 @@ public class SchemaCodecFactory extends CodecFactory implements SolrCoreAware {
"Invalid compressionMode: '" + compressionModeStr +
"'. Value must be one of " + Arrays.toString(Mode.values()));
}
- log.debug("Using compressionMode: " + compressionMode);
+ log.debug("Using compressionMode: {}", compressionMode);
} else {
compressionMode = SOLR_DEFAULT_COMPRESSION_MODE;
- log.debug("Using default compressionMode: " + compressionMode);
+ log.debug("Using default compressionMode: {}", compressionMode);
}
codec = new Lucene84Codec(compressionMode) {
@Override
diff --git a/solr/core/src/java/org/apache/solr/core/SolrConfig.java b/solr/core/src/java/org/apache/solr/core/SolrConfig.java
index aa78164..d8a8655 100644
--- a/solr/core/src/java/org/apache/solr/core/SolrConfig.java
+++ b/solr/core/src/java/org/apache/solr/core/SolrConfig.java
@@ -203,9 +203,11 @@ public class SolrConfig extends XmlConfigFile implements MapSerializable {
booleanQueryMaxClauseCount = getInt("query/maxBooleanClauses", IndexSearcher.getMaxClauseCount());
if (IndexSearcher.getMaxClauseCount() < booleanQueryMaxClauseCount) {
- log.warn("solrconfig.xml: <maxBooleanClauses> of {} is greater than global limit of {} "+
- "and will have no effect", booleanQueryMaxClauseCount, IndexSearcher.getMaxClauseCount());
- log.warn("set 'maxBooleanClauses' in solr.xml to increase global limit");
+ if (log.isWarnEnabled()) {
+ log.warn("solrconfig.xml: <maxBooleanClauses> of {} is greater than global limit of {} " +
+ "and will have no effect set 'maxBooleanClauses' in solr.xml to increase global limit"
+ , booleanQueryMaxClauseCount, IndexSearcher.getMaxClauseCount());
+ }
}
// Warn about deprecated / discontinued parameters
@@ -315,12 +317,13 @@ public class SolrConfig extends XmlConfigFile implements MapSerializable {
}
if (version == Version.LATEST && !versionWarningAlreadyLogged.getAndSet(true)) {
- log.warn(
- "You should not use LATEST as luceneMatchVersion property: "+
- "if you use this setting, and then Solr upgrades to a newer release of Lucene, "+
- "sizable changes may happen. If precise back compatibility is important "+
- "then you should instead explicitly specify an actual Lucene version."
- );
+ if (log.isWarnEnabled()) {
+ log.warn(
+ "You should not use LATEST as luceneMatchVersion property: " +
+ "if you use this setting, and then Solr upgrades to a newer release of Lucene, " +
+ "sizable changes may happen. If precise back compatibility is important " +
+ "then you should instead explicitly specify an actual Lucene version.");
+ }
}
return version;
@@ -575,7 +578,7 @@ public class SolrConfig extends XmlConfigFile implements MapSerializable {
try {
return valueOf(s.toUpperCase(Locale.ROOT));
} catch (Exception e) {
- log.warn("Unrecognized value for lastModFrom: " + s, e);
+ log.warn("Unrecognized value for lastModFrom: {}", s, e);
return BOGUS;
}
}
@@ -608,9 +611,8 @@ public class SolrConfig extends XmlConfigFile implements MapSerializable {
? Long.valueOf(ttlStr)
: null;
} catch (Exception e) {
- log.warn("Ignoring exception while attempting to " +
- "extract max-age from cacheControl config: " +
- cacheControlHeader, e);
+ log.warn("Ignoring exception while attempting to extract max-age from cacheControl config: {}"
+ , cacheControlHeader, e);
}
}
maxAge = tmp;
@@ -758,7 +760,9 @@ public class SolrConfig extends XmlConfigFile implements MapSerializable {
try {
urls.addAll(SolrResourceLoader.getURLs(libPath));
} catch (IOException e) {
- log.warn("Couldn't add files from {} to classpath: {}", libPath, e.getMessage());
+ if (log.isWarnEnabled()) {
+ log.warn("Couldn't add files from {} to classpath: {}", libPath, e.getMessage());
+ }
}
}
@@ -784,14 +788,18 @@ public class SolrConfig extends XmlConfigFile implements MapSerializable {
else
urls.addAll(SolrResourceLoader.getFilteredURLs(dir, regex));
} catch (IOException e) {
- log.warn("Couldn't add files from {} filtered by {} to classpath: {}", dir, regex, e.getMessage());
+ if (log.isWarnEnabled()) {
+ log.warn("Couldn't add files from {} filtered by {} to classpath: {}", dir, regex, e.getMessage());
+ }
}
} else if (null != path) {
final Path dir = instancePath.resolve(path);
try {
urls.add(dir.toUri().toURL());
} catch (MalformedURLException e) {
- log.warn("Couldn't add file {} to classpath: {}", dir, e.getMessage());
+ if (log.isWarnEnabled()) {
+ log.warn("Couldn't add file {} to classpath: {}", dir, e.getMessage());
+ }
}
} else {
throw new RuntimeException("lib: missing mandatory attributes: 'dir' or 'path'");
@@ -951,7 +959,9 @@ public class SolrConfig extends XmlConfigFile implements MapSerializable {
public RequestParams refreshRequestParams() {
requestParams = RequestParams.getFreshRequestParams(getResourceLoader(), requestParams);
- log.debug("current version of requestparams : {}", requestParams.getZnodeVersion());
+ if (log.isDebugEnabled()) {
+ log.debug("current version of requestparams : {}", requestParams.getZnodeVersion());
+ }
return requestParams;
}
diff --git a/solr/core/src/java/org/apache/solr/core/SolrCore.java b/solr/core/src/java/org/apache/solr/core/SolrCore.java
index 3ee32bf..ca7df79 100644
--- a/solr/core/src/java/org/apache/solr/core/SolrCore.java
+++ b/solr/core/src/java/org/apache/solr/core/SolrCore.java
@@ -953,7 +953,9 @@ public final class SolrCore implements SolrInfoBean, Closeable {
this.dataDir = initDataDir(dataDir, solrConfig, coreDescriptor);
this.ulogDir = initUpdateLogDir(coreDescriptor);
- log.info("[{}] Opening new SolrCore at [{}], dataDir=[{}]", logid, getInstancePath(), this.dataDir);
+ if (log.isInfoEnabled()) {
+ log.info("[{}] Opening new SolrCore at [{}], dataDir=[{}]", logid, getInstancePath(), this.dataDir);
+ }
checkVersionFieldExistsInSchema(schema, coreDescriptor);
setLatestSchema(schema);
@@ -1093,8 +1095,7 @@ public final class SolrCore implements SolrInfoBean, Closeable {
if (coreContainer != null && coreContainer.isZooKeeperAware()) {
if (reqHandlers.get("/get") == null) {
- log.warn("WARNING: RealTimeGetHandler is not registered at /get. " +
- "SolrCloud will always use full index replication instead of the more efficient PeerSync method.");
+ log.warn("WARNING: RealTimeGetHandler is not registered at /get. SolrCloud will always use full index replication instead of the more efficient PeerSync method.");
}
// ZK pre-register would have already happened so we read slice properties now
@@ -1370,7 +1371,9 @@ public final class SolrCore implements SolrInfoBean, Closeable {
close();
while (!isClosed()) {
final long milliSleep = 100;
- log.info("Core {} is not yet closed, waiting {} ms before checking again.", getName(), milliSleep);
+ if (log.isInfoEnabled()) {
+ log.info("Core {} is not yet closed, waiting {} ms before checking again.", getName(), milliSleep);
+ }
try {
Thread.sleep(milliSleep);
} catch (InterruptedException e) {
@@ -1426,9 +1429,13 @@ public final class SolrCore implements SolrInfoBean, Closeable {
if (pluginInfo != null && pluginInfo.className != null && pluginInfo.className.length() > 0) {
cache = createInitInstance(pluginInfo, StatsCache.class, null,
LocalStatsCache.class.getName());
- log.debug("Using statsCache impl: {}", cache.getClass().getName());
+ if (log.isDebugEnabled()) {
+ log.debug("Using statsCache impl: {}", cache.getClass().getName());
+ }
} else {
- log.debug("Using default statsCache cache: {}", LocalStatsCache.class.getName());
+ if (log.isDebugEnabled()) {
+ log.debug("Using default statsCache cache: {}", LocalStatsCache.class.getName());
+ }
cache = new LocalStatsCache();
}
return cache;
@@ -1728,7 +1735,7 @@ public final class SolrCore implements SolrInfoBean, Closeable {
sb.append(o == null ? "(null)" : o.toString());
}
// System.out.println(sb.toString());
- log.info(sb.toString());
+ log.info("{}", sb);
}
@@ -1915,7 +1922,9 @@ public final class SolrCore implements SolrInfoBean, Closeable {
throws IOException {
IndexReader.CacheHelper cacheHelper = ctx.reader().getReaderCacheHelper();
if (cacheHelper == null) {
- log.debug("Cannot cache IndexFingerprint as reader does not support caching. searcher:{} reader:{} readerHash:{} maxVersion:{}", searcher, ctx.reader(), ctx.reader().hashCode(), maxVersion);
+ if (log.isDebugEnabled()) {
+ log.debug("Cannot cache IndexFingerprint as reader does not support caching. searcher:{} reader:{} readerHash:{} maxVersion:{}", searcher, ctx.reader(), ctx.reader().hashCode(), maxVersion);
+ }
return IndexFingerprint.getFingerprint(searcher, ctx, maxVersion);
}
@@ -1926,7 +1935,9 @@ public final class SolrCore implements SolrInfoBean, Closeable {
// documents were deleted from segment for which fingerprint was cached
//
if (f == null || (f.getMaxInHash() > maxVersion) || (f.getNumDocs() != ctx.reader().numDocs())) {
- log.debug("IndexFingerprint cache miss for searcher:{} reader:{} readerHash:{} maxVersion:{}", searcher, ctx.reader(), ctx.reader().hashCode(), maxVersion);
+ if (log.isDebugEnabled()) {
+ log.debug("IndexFingerprint cache miss for searcher:{} reader:{} readerHash:{} maxVersion:{}", searcher, ctx.reader(), ctx.reader().hashCode(), maxVersion);
+ }
f = IndexFingerprint.getFingerprint(searcher, ctx, maxVersion);
// cache fingerprint for the segment only if all the versions in the segment are included in the fingerprint
if (f.getMaxVersionEncountered() == f.getMaxInHash()) {
@@ -1935,9 +1946,13 @@ public final class SolrCore implements SolrInfoBean, Closeable {
}
} else {
- log.debug("IndexFingerprint cache hit for searcher:{} reader:{} readerHash:{} maxVersion:{}", searcher, ctx.reader(), ctx.reader().hashCode(), maxVersion);
+ if (log.isDebugEnabled()) {
+ log.debug("IndexFingerprint cache hit for searcher:{} reader:{} readerHash:{} maxVersion:{}", searcher, ctx.reader(), ctx.reader().hashCode(), maxVersion);
+ }
+ }
+ if (log.isDebugEnabled()) {
+ log.debug("Cache Size: {}, Segments Size:{}", perSegmentFingerprintCache.size(), searcher.getTopReaderContext().leaves().size());
}
- log.debug("Cache Size: {}, Segments Size:{}", perSegmentFingerprintCache.size(), searcher.getTopReaderContext().leaves().size());
return f;
}
@@ -2083,7 +2098,9 @@ public final class SolrCore implements SolrInfoBean, Closeable {
// but log a message about it to minimize confusion
newestSearcher.incref();
- log.debug("SolrIndexSearcher has not changed - not re-opening: {}", newestSearcher.get().getName());
+ if (log.isDebugEnabled()) {
+ log.debug("SolrIndexSearcher has not changed - not re-opening: {}", newestSearcher.get().getName());
+ }
return newestSearcher;
} // ELSE: open a new searcher against the old reader...
@@ -2219,7 +2236,9 @@ public final class SolrCore implements SolrInfoBean, Closeable {
try {
searcherLock.wait();
} catch (InterruptedException e) {
- log.info(SolrException.toStr(e));
+ if (log.isInfoEnabled()) {
+ log.info(SolrException.toStr(e));
+ }
}
}
@@ -2248,7 +2267,9 @@ public final class SolrCore implements SolrInfoBean, Closeable {
try {
searcherLock.wait();
} catch (InterruptedException e) {
- log.info(SolrException.toStr(e));
+ if (log.isInfoEnabled()) {
+ log.info(SolrException.toStr(e));
+ }
}
continue; // go back to the top of the loop and retry
} else if (onDeckSearchers > 1) {
@@ -2499,7 +2520,7 @@ public final class SolrCore implements SolrInfoBean, Closeable {
// NOTE: this should not happen now - see close() for details.
// *BUT* if we left it enabled, this could still happen before
// close() stopped the executor - so disable this test for now.
- log.error("Ignoring searcher register on closed core:" + newSearcher);
+ log.error("Ignoring searcher register on closed core:{}", newSearcher);
_searcher.decref();
}
***/
@@ -3105,7 +3126,9 @@ public final class SolrCore implements SolrInfoBean, Closeable {
return false;
}
if (stat.getVersion() > currentVersion) {
- log.debug("{} is stale will need an update from {} to {}", zkPath, currentVersion, stat.getVersion());
+ if (log.isDebugEnabled()) {
+ log.debug("{} is stale will need an update from {} to {}", zkPath, currentVersion, stat.getVersion());
+ }
return true;
}
return false;
diff --git a/solr/core/src/java/org/apache/solr/core/SolrCores.java b/solr/core/src/java/org/apache/solr/core/SolrCores.java
index 6c6fcf4..bcb8448 100644
--- a/solr/core/src/java/org/apache/solr/core/SolrCores.java
+++ b/solr/core/src/java/org/apache/solr/core/SolrCores.java
@@ -541,8 +541,10 @@ class SolrCores {
public TransientSolrCoreCache getTransientCacheHandler() {
if (transientCoreCache == null) {
- log.error("No transient handler has been defined. Check solr.xml to see if an attempt to provide a custom " +
- "TransientSolrCoreCacheFactory was done incorrectly since the default should have been used otherwise.");
+ if (log.isErrorEnabled()) {
+ log.error("No transient handler has been defined. Check solr.xml to see if an attempt to provide a custom " +
+ "TransientSolrCoreCacheFactory was done incorrectly since the default should have been used otherwise.");
+ }
return null;
}
return transientCoreCache.getTransientSolrCoreCache();
diff --git a/solr/core/src/java/org/apache/solr/core/SolrDeletionPolicy.java b/solr/core/src/java/org/apache/solr/core/SolrDeletionPolicy.java
index 34482cd..71c69a3 100644
--- a/solr/core/src/java/org/apache/solr/core/SolrDeletionPolicy.java
+++ b/solr/core/src/java/org/apache/solr/core/SolrDeletionPolicy.java
@@ -80,7 +80,9 @@ public class SolrDeletionPolicy extends IndexDeletionPolicy implements NamedList
if (commits.isEmpty()) {
return;
}
- log.debug("SolrDeletionPolicy.onInit: commits: {}", new CommitsLoggingDebug(commits));
+ if (log.isDebugEnabled()) {
+ log.debug("SolrDeletionPolicy.onInit: commits: {}", new CommitsLoggingDebug(commits));
+ }
updateCommits(commits);
}
@@ -89,7 +91,9 @@ public class SolrDeletionPolicy extends IndexDeletionPolicy implements NamedList
*/
@Override
public void onCommit(List<? extends IndexCommit> commits) throws IOException {
- log.debug("SolrDeletionPolicy.onCommit: commits: {}", new CommitsLoggingDebug(commits));
+ if (log.isDebugEnabled()) {
+ log.debug("SolrDeletionPolicy.onCommit: commits: {}", new CommitsLoggingDebug(commits));
+ }
updateCommits(commits);
}
@@ -150,7 +154,9 @@ public class SolrDeletionPolicy extends IndexDeletionPolicy implements NamedList
synchronized (this) {
long maxCommitAgeTimeStamp = -1L;
IndexCommit newest = commits.get(commits.size() - 1);
- log.debug("newest commit generation = " + newest.getGeneration());
+ if (log.isDebugEnabled()) {
+ log.debug("newest commit generation = {}", newest.getGeneration());
+ }
int singleSegKept = (newest.getSegmentCount() == 1) ? 1 : 0;
int totalKept = 1;
diff --git a/solr/core/src/java/org/apache/solr/core/SolrPaths.java b/solr/core/src/java/org/apache/solr/core/SolrPaths.java
index 38c6144..9d8c71b 100644
--- a/solr/core/src/java/org/apache/solr/core/SolrPaths.java
+++ b/solr/core/src/java/org/apache/solr/core/SolrPaths.java
@@ -74,7 +74,9 @@ public final class SolrPaths {
} catch (NamingException e) {
log.debug("No /solr/home in JNDI");
} catch (RuntimeException ex) {
- log.warn("Odd RuntimeException while testing for JNDI: " + ex.getMessage());
+ if (log.isWarnEnabled()) {
+ log.warn("Odd RuntimeException while testing for JNDI: {}", ex.getMessage());
+ }
}
// Now try system property
@@ -104,7 +106,8 @@ public final class SolrPaths {
log.warn("Unable to create [{}] directory in SOLR_HOME [{}]. Features requiring this directory may fail.", USER_FILES_DIRECTORY, solrHome);
}
} catch (Exception e) {
- log.warn("Unable to create [" + USER_FILES_DIRECTORY + "] directory in SOLR_HOME [" + solrHome + "]. Features requiring this directory may fail.", e);
+ log.warn("Unable to create [{}] directory in SOLR_HOME [{}]. Features requiring this directory may fail.",
+ USER_FILES_DIRECTORY, solrHome, e);
}
}
}
diff --git a/solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java b/solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java
index 8924320..984c46a 100644
--- a/solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java
+++ b/solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java
@@ -180,12 +180,14 @@ public class SolrResourceLoader implements ResourceLoader, Closeable {
this.classLoader = newLoader;
this.needToReloadLuceneSPI = true;
- log.info("Added {} libs to classloader, from paths: {}",
- urls.size(), urls.stream()
- .map(u -> u.getPath().substring(0,u.getPath().lastIndexOf("/")))
- .sorted()
- .distinct()
- .collect(Collectors.toList()));
+ if (log.isInfoEnabled()) {
+ log.info("Added {} libs to classloader, from paths: {}",
+ urls.size(), urls.stream()
+ .map(u -> u.getPath().substring(0, u.getPath().lastIndexOf("/")))
+ .sorted()
+ .distinct()
+ .collect(Collectors.toList()));
+ }
}
/**
@@ -220,7 +222,9 @@ public class SolrResourceLoader implements ResourceLoader, Closeable {
allURLs.addAll(Arrays.asList(oldLoader.getURLs()));
allURLs.addAll(urls);
for (URL url : urls) {
- log.debug("Adding '{}' to classloader", url.toString());
+ if (log.isDebugEnabled()) {
+ log.debug("Adding '{}' to classloader", url.toString());
+ }
}
ClassLoader oldParent = oldLoader.getParent();
@@ -447,7 +451,7 @@ public class SolrResourceLoader implements ResourceLoader, Closeable {
return Class.forName(c, true, classLoader).asSubclass(expectedType);
} catch (ClassNotFoundException | ClassCastException e) {
// this can happen if the legacyAnalysisPattern below caches the wrong thing
- log.warn( name + " Unable to load cached class, attempting lookup. name={} shortname={} reason={}", c, cname, e);
+ log.warn("{} Unable to load cached class, attempting lookup. name={} shortname={} reason={}", name , c, cname, e);
classNameCache.remove(cname);
}
}
@@ -468,7 +472,9 @@ public class SolrResourceLoader implements ResourceLoader, Closeable {
} else if (TokenFilterFactory.class.isAssignableFrom(expectedType)) {
return clazz = TokenFilterFactory.lookupClass(name).asSubclass(expectedType);
} else {
- log.warn("'{}' looks like an analysis factory, but caller requested different class type: {}", cname, expectedType.getName());
+ if (log.isWarnEnabled()) {
+ log.warn("'{}' looks like an analysis factory, but caller requested different class type: {}", cname, expectedType.getName());
+ }
}
} catch (IllegalArgumentException ex) {
// ok, we fall back to legacy loading
@@ -486,7 +492,7 @@ public class SolrResourceLoader implements ResourceLoader, Closeable {
for (String subpackage : subpackages) {
try {
String name = base + '.' + subpackage + newName;
- log.trace("Trying class name " + name);
+ log.trace("Trying class name {}", name);
return clazz = Class.forName(name, true, classLoader).asSubclass(expectedType);
} catch (ClassNotFoundException e1) {
// ignore... assume first exception is best.
@@ -555,8 +561,9 @@ public class SolrResourceLoader implements ResourceLoader, Closeable {
}
} catch (Error err) {
- log.error("Loading Class " + cName + " (" + clazz.getName() + ") triggered serious java error: "
- + err.getClass().getName(), err);
+ log.error("Loading Class {} ({}) triggered serious java error: {}", cName, clazz.getName(),
+ err.getClass().getName(), err);
+
throw err;
} catch (Exception e) {
@@ -649,7 +656,9 @@ public class SolrResourceLoader implements ResourceLoader, Closeable {
try {
infoRegistry.put(bean.getName(), bean);
} catch (Exception e) {
- log.warn("could not register MBean '" + bean.getName() + "'.", e);
+ if (log.isWarnEnabled()) {
+ log.warn("could not register MBean '{}'.", bean.getName(), e);
+ }
}
}
}
@@ -754,7 +763,7 @@ public class SolrResourceLoader implements ResourceLoader, Closeable {
try (OutputStream out = new FileOutputStream(confFile);) {
out.write(content);
}
- log.info("Written confile " + resourceName);
+ log.info("Written confile {}", resourceName);
} catch (IOException e) {
final String msg = "Error persisting conf file " + resourceName;
log.error(msg, e);
diff --git a/solr/core/src/java/org/apache/solr/core/SolrXmlConfig.java b/solr/core/src/java/org/apache/solr/core/SolrXmlConfig.java
index 0ca2a58..0401ae6 100644
--- a/solr/core/src/java/org/apache/solr/core/SolrXmlConfig.java
+++ b/solr/core/src/java/org/apache/solr/core/SolrXmlConfig.java
@@ -206,7 +206,9 @@ public class SolrXmlConfig {
return properties;
}
catch (XPathExpressionException e) {
- log.warn("Error parsing solr.xml: " + e.getMessage());
+ if (log.isWarnEnabled()) {
+ log.warn("Error parsing solr.xml: {}", e.getMessage());
+ }
return null;
}
}
@@ -530,7 +532,7 @@ public class SolrXmlConfig {
// if there's an MBean server running but there was no JMX reporter then add a default one
MBeanServer mBeanServer = JmxUtil.findFirstMBeanServer();
if (mBeanServer != null && !hasJmxReporter) {
- log.info("MBean server found: " + mBeanServer + ", but no JMX reporters were configured - adding default JMX reporter.");
+ log.info("MBean server found: {}, but no JMX reporters were configured - adding default JMX reporter.", mBeanServer);
Map<String,Object> attributes = new HashMap<>();
attributes.put("name", "default");
attributes.put("class", SolrJmxReporter.class.getName());
diff --git a/solr/core/src/java/org/apache/solr/core/StandardDirectoryFactory.java b/solr/core/src/java/org/apache/solr/core/StandardDirectoryFactory.java
index 1bc4914..3f90146 100644
--- a/solr/core/src/java/org/apache/solr/core/StandardDirectoryFactory.java
+++ b/solr/core/src/java/org/apache/solr/core/StandardDirectoryFactory.java
@@ -60,7 +60,7 @@ public class StandardDirectoryFactory extends CachingDirectoryFactory {
protected LockFactory createLockFactory(String rawLockType) throws IOException {
if (null == rawLockType) {
rawLockType = DirectoryFactory.LOCK_TYPE_NATIVE;
- log.warn("No lockType configured, assuming '"+rawLockType+"'.");
+ log.warn("No lockType configured, assuming '{}'.", rawLockType);
}
final String lockType = rawLockType.toLowerCase(Locale.ROOT).trim();
switch (lockType) {
diff --git a/solr/core/src/java/org/apache/solr/core/TransientSolrCoreCacheDefault.java b/solr/core/src/java/org/apache/solr/core/TransientSolrCoreCacheDefault.java
index 192a29a..5de4643 100644
--- a/solr/core/src/java/org/apache/solr/core/TransientSolrCoreCacheDefault.java
+++ b/solr/core/src/java/org/apache/solr/core/TransientSolrCoreCacheDefault.java
@@ -90,7 +90,9 @@ public class TransientSolrCoreCacheDefault extends TransientSolrCoreCache {
protected boolean removeEldestEntry(Map.Entry<String, SolrCore> eldest) {
if (size() > cacheSize) {
SolrCore coreToClose = eldest.getValue();
- log.info("Closing transient core [{}]", coreToClose.getName());
+ if (log.isInfoEnabled()) {
+ log.info("Closing transient core [{}]", coreToClose.getName());
+ }
coreContainer.queueCoreToClose(coreToClose);
return true;
}
diff --git a/solr/core/src/java/org/apache/solr/core/XmlConfigFile.java b/solr/core/src/java/org/apache/solr/core/XmlConfigFile.java
index ab9f5aa..08fe569 100644
--- a/solr/core/src/java/org/apache/solr/core/XmlConfigFile.java
+++ b/solr/core/src/java/org/apache/solr/core/XmlConfigFile.java
@@ -136,7 +136,7 @@ public class XmlConfigFile { // formerly simply "Config"
dbf.setXIncludeAware(true);
dbf.setNamespaceAware(true);
} catch(UnsupportedOperationException e) {
- log.warn(name + " XML parser doesn't support XInclude option");
+ log.warn("{} XML parser doesn't support XInclude option", name);
}
}
@@ -252,7 +252,7 @@ public class XmlConfigFile { // formerly simply "Config"
if (errIfMissing) {
throw new RuntimeException(name + " missing "+path);
} else {
- log.trace(name + " missing optional " + path);
+ log.trace("{} missing optional {}", name, path);
return null;
}
}
@@ -261,7 +261,7 @@ public class XmlConfigFile { // formerly simply "Config"
name + " contains more than one value for config path: " + path);
}
Node nd = nodes.item(0);
- log.trace(name + ":" + path + "=" + nd);
+ log.trace("{}:{}={}", name, path, nd);
return nd;
} catch (XPathExpressionException e) {
@@ -286,12 +286,12 @@ public class XmlConfigFile { // formerly simply "Config"
if (errIfMissing) {
throw new RuntimeException(name + " missing "+path);
} else {
- log.trace(name + " missing optional " + path);
+ log.trace("{} missing optional {}", name, path);
return null;
}
}
- log.trace(name + ":" + path + "=" + nodeList);
+ log.trace("{}:{}={}", name, path, nodeList);
return nodeList;
} catch (XPathExpressionException e) {
@@ -373,7 +373,7 @@ public class XmlConfigFile { // formerly simply "Config"
String txt = DOMUtil.getText(nd);
- log.debug(name + ' '+path+'='+txt);
+ log.debug("{} {}={}", name, path, txt);
return txt;
}
diff --git a/solr/core/src/java/org/apache/solr/core/ZkContainer.java b/solr/core/src/java/org/apache/solr/core/ZkContainer.java
index 1b8dcdd..5a50fd7 100644
--- a/solr/core/src/java/org/apache/solr/core/ZkContainer.java
+++ b/solr/core/src/java/org/apache/solr/core/ZkContainer.java
@@ -99,9 +99,9 @@ public class ZkContainer {
// If this is an ensemble, allow for a long connect time for other servers to come up
if (zkRun != null && zkServer.getServers().size() > 1) {
zkClientConnectTimeout = 24 * 60 * 60 * 1000; // 1 day for embedded ensemble
- log.info("Zookeeper client=" + zookeeperHost + " Waiting for a quorum.");
+ log.info("Zookeeper client={} Waiting for a quorum.", zookeeperHost);
} else {
- log.info("Zookeeper client=" + zookeeperHost);
+ log.info("Zookeeper client={}", zookeeperHost);
}
String confDir = System.getProperty("bootstrap_confdir");
boolean boostrapConf = Boolean.getBoolean("bootstrap_conf");
@@ -178,7 +178,9 @@ public class ZkContainer {
try {
if (testing_beforeRegisterInZk != null) {
boolean didTrigger = testing_beforeRegisterInZk.test(cd);
- log.debug((didTrigger ? "Ran" : "Skipped") + " pre-zk hook");
+ if (log.isDebugEnabled()) {
+ log.debug((didTrigger ? "Ran" : "Skipped") + " pre-zk hook");
+ }
}
if (!core.getCoreContainer().isShutDown()) {
zkController.register(core.getName(), cd, skipRecovery);
diff --git a/solr/core/src/java/org/apache/solr/core/snapshots/SolrSnapshotManager.java b/solr/core/src/java/org/apache/solr/core/snapshots/SolrSnapshotManager.java
index 354307d..f40bea80 100644
--- a/solr/core/src/java/org/apache/solr/core/snapshots/SolrSnapshotManager.java
+++ b/solr/core/src/java/org/apache/solr/core/snapshots/SolrSnapshotManager.java
@@ -227,7 +227,9 @@ public class SolrSnapshotManager {
public void onInit(List<? extends IndexCommit> commits) throws IOException {
for (IndexCommit ic : commits) {
if (gen == ic.getGeneration()) {
- log.info("Deleting non-snapshotted index commit with generation {}", ic.getGeneration());
+ if (log.isInfoEnabled()) {
+ log.info("Deleting non-snapshotted index commit with generation {}", ic.getGeneration());
+ }
ic.delete();
}
}
@@ -258,7 +260,9 @@ public class SolrSnapshotManager {
public void onInit(List<? extends IndexCommit> commits) throws IOException {
for (IndexCommit ic : commits) {
if (!genNumbers.contains(ic.getGeneration())) {
- log.info("Deleting non-snapshotted index commit with generation {}", ic.getGeneration());
+ if (log.isInfoEnabled()) {
+ log.info("Deleting non-snapshotted index commit with generation {}", ic.getGeneration());
+ }
ic.delete();
}
}
diff --git a/solr/core/src/java/org/apache/solr/core/snapshots/SolrSnapshotMetaDataManager.java b/solr/core/src/java/org/apache/solr/core/snapshots/SolrSnapshotMetaDataManager.java
index 8e4d185..de36ca5 100644
--- a/solr/core/src/java/org/apache/solr/core/snapshots/SolrSnapshotMetaDataManager.java
+++ b/solr/core/src/java/org/apache/solr/core/snapshots/SolrSnapshotMetaDataManager.java
@@ -171,8 +171,10 @@ public class SolrSnapshotMetaDataManager {
public synchronized void snapshot(String name, String indexDirPath, long gen) throws IOException {
Objects.requireNonNull(name);
- log.info("Creating the snapshot named {} for core {} associated with index commit with generation {} in directory {}"
- , name, solrCore.getName(), gen, indexDirPath);
+ if (log.isInfoEnabled()) {
+ log.info("Creating the snapshot named {} for core {} associated with index commit with generation {} in directory {}"
+ , name, solrCore.getName(), gen, indexDirPath);
+ }
if(nameToDetailsMapping.containsKey(name)) {
throw new SolrException(ErrorCode.BAD_REQUEST, "A snapshot with name " + name + " already exists");
@@ -204,7 +206,9 @@ public class SolrSnapshotMetaDataManager {
* @throws IOException in case of I/O error
*/
public synchronized Optional<SnapshotMetaData> release(String name) throws IOException {
- log.info("Deleting the snapshot named {} for core {}", name, solrCore.getName());
+ if (log.isInfoEnabled()) {
+ log.info("Deleting the snapshot named {} for core {}", name, solrCore.getName());
+ }
SnapshotMetaData result = nameToDetailsMapping.remove(Objects.requireNonNull(name));
if(result != null) {
boolean success = false;
@@ -307,7 +311,9 @@ public class SolrSnapshotMetaDataManager {
solrCore.getDirectoryFactory().release(d);
}
} else {
- log.warn("Commit with name {} is not persisted for core {}", commitName, solrCore.getName());
+ if (log.isWarnEnabled()) {
+ log.warn("Commit with name {} is not persisted for core {}", commitName, solrCore.getName());
+ }
}
return result;
diff --git a/solr/core/src/java/org/apache/solr/core/snapshots/SolrSnapshotsTool.java b/solr/core/src/java/org/apache/solr/core/snapshots/SolrSnapshotsTool.java
index 88557f6..31323aa 100644
--- a/solr/core/src/java/org/apache/solr/core/snapshots/SolrSnapshotsTool.java
+++ b/solr/core/src/java/org/apache/solr/core/snapshots/SolrSnapshotsTool.java
@@ -111,7 +111,7 @@ public class SolrSnapshotsTool implements Closeable, CLIO {
CLIO.out("Successfully created snapshot with name " + snapshotName + " for collection " + collectionName);
} catch (Exception e) {
- log.error("Failed to create a snapshot with name " + snapshotName + " for collection " + collectionName, e);
+ log.error("Failed to create a snapshot with name {} for collection {}", snapshotName, collectionName, e);
CLIO.out("Failed to create a snapshot with name " + snapshotName + " for collection " + collectionName
+" due to following error : "+e.getLocalizedMessage());
}
@@ -126,7 +126,7 @@ public class SolrSnapshotsTool implements Closeable, CLIO {
CLIO.out("Successfully deleted snapshot with name " + snapshotName + " for collection " + collectionName);
} catch (Exception e) {
- log.error("Failed to delete a snapshot with name " + snapshotName + " for collection " + collectionName, e);
+ log.error("Failed to delete a snapshot with name {} for collection {}", snapshotName, collectionName, e);
CLIO.out("Failed to delete a snapshot with name " + snapshotName + " for collection " + collectionName
+" due to following error : "+e.getLocalizedMessage());
}
@@ -146,7 +146,7 @@ public class SolrSnapshotsTool implements Closeable, CLIO {
}
} catch (Exception e) {
- log.error("Failed to list snapshots for collection " + collectionName, e);
+ log.error("Failed to list snapshots for collection {}", collectionName, e);
CLIO.out("Failed to list snapshots for collection " + collectionName
+" due to following error : "+e.getLocalizedMessage());
}
@@ -275,8 +275,9 @@ public class SolrSnapshotsTool implements Closeable, CLIO {
buildCopyListings(collectionName, snapshotName, localFsPath, pathPrefix);
CLIO.out("Successfully prepared copylisting for the snapshot export.");
} catch (Exception e) {
- log.error("Failed to prepare a copylisting for snapshot with name " + snapshotName + " for collection "
- + collectionName, e);
+
+ log.error("Failed to prepare a copylisting for snapshot with name {} for collection {}", snapshotName, collectionName, e);
+
CLIO.out("Failed to prepare a copylisting for snapshot with name " + snapshotName + " for collection "
+ collectionName + " due to following error : " + e.getLocalizedMessage());
System.exit(1);
@@ -286,7 +287,7 @@ public class SolrSnapshotsTool implements Closeable, CLIO {
backupCollectionMetaData(collectionName, snapshotName, destPath);
CLIO.out("Successfully backed up collection meta-data");
} catch (Exception e) {
- log.error("Failed to backup collection meta-data for collection " + collectionName, e);
+ log.error("Failed to backup collection meta-data for collection {}", collectionName, e);
CLIO.out("Failed to backup collection meta-data for collection " + collectionName
+ " due to following error : " + e.getLocalizedMessage());
System.exit(1);
@@ -306,7 +307,7 @@ public class SolrSnapshotsTool implements Closeable, CLIO {
// if asyncId is null, processAsync will block and throw an Exception with any error
backup.processAsync(asyncReqId.orElse(null), solrClient);
} catch (Exception e) {
- log.error("Failed to backup collection meta-data for collection " + collectionName, e);
+ log.error("Failed to backup collection meta-data for collection {}", collectionName, e);
CLIO.out("Failed to backup collection meta-data for collection " + collectionName
+ " due to following error : " + e.getLocalizedMessage());
System.exit(1);
diff --git a/solr/core/src/java/org/apache/solr/filestore/DistribPackageStore.java b/solr/core/src/java/org/apache/solr/filestore/DistribPackageStore.java
index 951564a..88cb0e2 100644
--- a/solr/core/src/java/org/apache/solr/filestore/DistribPackageStore.java
+++ b/solr/core/src/java/org/apache/solr/filestore/DistribPackageStore.java
@@ -125,7 +125,9 @@ public class DistribPackageStore implements PackageStore {
this.metaData = meta;
this.fileData = data;
_persistToFile(solrhome, path, data, meta);
- log.info("persisted a file {} and metadata. sizes {} {}", path, data.limit(), meta.limit());
+ if (log.isInfoEnabled()) {
+ log.info("persisted a file {} and metadata. sizes {} {}", path, data.limit(), meta.limit());
+ }
}
}
@@ -164,7 +166,7 @@ public class DistribPackageStore implements PackageStore {
try {
IOUtils.deleteFilesIfExist(getRealpath(path), getRealpath(getMetaPath()));
} catch (IOException e) {
- log.error("Unable to delete files: " + path);
+ log.error("Unable to delete files: {}", path);
}
}
@@ -366,8 +368,7 @@ public class DistribPackageStore implements PackageStore {
//fire and forget
Utils.executeGET(coreContainer.getUpdateShardHandler().getDefaultHttpClient(), url, null);
} catch (Exception e) {
- log.info("Node: " + node +
- " failed to respond for file fetch notification", e);
+ log.info("Node: {} failed to respond for file fetch notification", node, e);
//ignore the exception
// some nodes may be down or not responding
}
@@ -487,7 +488,7 @@ public class DistribPackageStore implements PackageStore {
}
}
} catch (Exception e) {
- log.error("Could not refresh files in " +path, e);
+ log.error("Could not refresh files in {}", path, e);
}
}
@@ -521,7 +522,7 @@ public class DistribPackageStore implements PackageStore {
log.warn("Unable to create [{}] directory in SOLR_HOME [{}]. Features requiring this directory may fail.", packageStoreDir, solrHome);
}
} catch (Exception e) {
- log.warn("Unable to create [" + packageStoreDir + "] directory in SOLR_HOME [" + solrHome + "]. Features requiring this directory may fail.", e);
+ log.warn("Unable to create [{}] directory in SOLR_HOME [{}]. Features requiring this directory may fail.", packageStoreDir, solrHome, e);
}
}
}
diff --git a/solr/core/src/java/org/apache/solr/filestore/PackageStoreAPI.java b/solr/core/src/java/org/apache/solr/filestore/PackageStoreAPI.java
index 00b5d7d..5156d50 100644
--- a/solr/core/src/java/org/apache/solr/filestore/PackageStoreAPI.java
+++ b/solr/core/src/java/org/apache/solr/filestore/PackageStoreAPI.java
@@ -254,7 +254,7 @@ public class PackageStoreAPI {
try {
packageStore.fetch(pathCopy, getFrom);
} catch (Exception e) {
- log.error("Failed to download file: " + pathCopy, e);
+ log.error("Failed to download file: {}", pathCopy, e);
}
log.info("downloaded file: {}", pathCopy);
});
diff --git a/solr/core/src/java/org/apache/solr/rest/ManagedResource.java b/solr/core/src/java/org/apache/solr/rest/ManagedResource.java
index 2dc4028..5a933d3 100644
--- a/solr/core/src/java/org/apache/solr/rest/ManagedResource.java
+++ b/solr/core/src/java/org/apache/solr/rest/ManagedResource.java
@@ -114,7 +114,9 @@ public abstract class ManagedResource {
NamedList<?> clonedArgs = args.clone();
observer.onManagedResourceInitialized(clonedArgs,this);
}
- log.info("Notified {} observers of {}", observers.size(), getResourceId());
+ if (log.isInfoEnabled()) {
+ log.info("Notified {} observers of {}", observers.size(), getResourceId());
+ }
}
/**
@@ -265,7 +267,7 @@ public abstract class ManagedResource {
// note: the data we're managing now remains in a dubious state
// however the text analysis component remains unaffected
// (at least until core reload)
- log.error("Failed to load data from storage due to: "+reloadExc);
+ log.error("Failed to load data from storage due to: {}", reloadExc);
}
}
@@ -360,8 +362,10 @@ public abstract class ManagedResource {
*/
@SuppressWarnings("unchecked")
public synchronized void doPut(BaseSolrResource endpoint, Representation entity, Object json) {
-
- log.info("Processing update to {}: {} is a "+json.getClass().getName(), getResourceId(), json);
+
+ if (log.isInfoEnabled()) {
+ log.info("Processing update to {}: {} is a {}", getResourceId(), json, json.getClass().getName());
+ }
boolean updatedInitArgs = false;
Object managedData = null;
diff --git a/solr/core/src/java/org/apache/solr/rest/ManagedResourceStorage.java b/solr/core/src/java/org/apache/solr/rest/ManagedResourceStorage.java
index e782e37..d9af49f 100644
--- a/solr/core/src/java/org/apache/solr/rest/ManagedResourceStorage.java
+++ b/solr/core/src/java/org/apache/solr/rest/ManagedResourceStorage.java
@@ -110,7 +110,7 @@ public abstract class ManagedResourceStorage {
} else {
if (zkClient != null) {
String znodeBase = "/configs/"+zkConfigName;
- log.debug("Setting up ZooKeeper-based storage for the RestManager with znodeBase: "+znodeBase);
+ log.debug("Setting up ZooKeeper-based storage for the RestManager with znodeBase: {}", znodeBase);
storageIO = new ManagedResourceStorage.ZooKeeperStorageIO(zkClient, znodeBase);
} else {
storageIO = new FileStorageIO();
@@ -133,8 +133,9 @@ public abstract class ManagedResourceStorage {
// that doesn't have write-access to the config dir
// while this failover approach is not ideal, it's better
// than causing the core to fail esp. if managed resources aren't being used
- log.warn("Cannot write to config directory "+configDir.getAbsolutePath()+
- "; switching to use InMemory storage instead.");
+ if (log.isWarnEnabled()) {
+ log.warn("Cannot write to config directory {} ; switching to use InMemory storage instead.", configDir.getAbsolutePath());
+ }
storageIO = new ManagedResourceStorage.InMemoryStorageIO();
}
}
@@ -165,7 +166,7 @@ public abstract class ManagedResourceStorage {
dir.mkdirs();
storageDir = dir.getAbsolutePath();
- log.info("File-based storage initialized to use dir: "+storageDir);
+ log.info("File-based storage initialized to use dir: {}", storageDir);
}
@Override
@@ -238,7 +239,7 @@ public abstract class ManagedResourceStorage {
throw new SolrException(ErrorCode.SERVER_ERROR, errMsg, exc);
}
- log.info("Configured ZooKeeperStorageIO with znodeBase: "+znodeBase);
+ log.info("Configured ZooKeeperStorageIO with znodeBase: {}", znodeBase);
}
@Override
@@ -446,9 +447,11 @@ public abstract class ManagedResourceStorage {
writer.close();
} catch (Exception ignore){}
}
- }
- log.info("Saved JSON object to path {} using {}",
- storedResourceId, storageIO.getInfo());
+ }
+ if (log.isInfoEnabled()) {
+ log.info("Saved JSON object to path {} using {}",
+ storedResourceId, storageIO.getInfo());
+ }
}
} // end JsonStorage
@@ -489,8 +492,10 @@ public abstract class ManagedResourceStorage {
*/
public Object load(String resourceId) throws IOException {
String storedResourceId = getStoredResourceId(resourceId);
-
- log.debug("Reading {} using {}", storedResourceId, storageIO.getInfo());
+
+ if (log.isDebugEnabled()) {
+ log.debug("Reading {} using {}", storedResourceId, storageIO.getInfo());
+ }
InputStream inputStream = storageIO.openInputStream(storedResourceId);
if (inputStream == null) {
@@ -501,9 +506,11 @@ public abstract class ManagedResourceStorage {
parsed = parseText(reader, resourceId);
}
- String objectType = (parsed != null) ? parsed.getClass().getSimpleName() : "null";
- log.info(String.format(Locale.ROOT, "Loaded %s at path %s using %s",
- objectType, storedResourceId, storageIO.getInfo()));
+ String objectType = (parsed != null) ? parsed.getClass().getSimpleName() : "null";
+ if (log.isInfoEnabled()) {
+ log.info(String.format(Locale.ROOT, "Loaded %s at path %s using %s",
+ objectType, storedResourceId, storageIO.getInfo()));
+ }
return parsed;
}
diff --git a/solr/core/src/java/org/apache/solr/rest/RestManager.java b/solr/core/src/java/org/apache/solr/rest/RestManager.java
index 13717fb..addee77 100644
--- a/solr/core/src/java/org/apache/solr/rest/RestManager.java
+++ b/solr/core/src/java/org/apache/solr/rest/RestManager.java
@@ -219,14 +219,17 @@ public class RestManager {
if (observer != null) {
reg.observers.add(observer);
- log.info("Added observer of type {} to existing ManagedResource {}",
- observer.getClass().getName(), resourceId);
+ if (log.isInfoEnabled()) {
+ log.info("Added observer of type {} to existing ManagedResource {}",
+ observer.getClass().getName(), resourceId);
+ }
}
} else {
registered.put(resourceId,
new ManagedResourceRegistration(resourceId, implClass, observer));
- log.info("Registered ManagedResource impl {} for path {}",
- implClass.getName(), resourceId);
+ if (log.isInfoEnabled()) {
+ log.info("Registered ManagedResource impl {} for path {}", implClass.getName(), resourceId);
+ }
}
// there may be a RestManager, in which case, we want to add this new ManagedResource immediately
@@ -334,7 +337,7 @@ public class RestManager {
}
}
- log.info("Found ManagedResource ["+managedResource+"] for "+resourceId);
+ log.info("Found ManagedResource [{}] for {}", managedResource, resourceId);
}
@Override
@@ -614,7 +617,7 @@ public class RestManager {
StorageIO storageIO)
throws SolrException
{
- log.debug("Initializing RestManager with initArgs: "+initArgs);
+ log.debug("Initializing RestManager with initArgs: {}", initArgs);
if (storageIO == null)
throw new IllegalArgumentException(
@@ -633,7 +636,9 @@ public class RestManager {
managed.put(SCHEMA_BASE_PATH+MANAGED_ENDPOINT, endpoint);
// init registered managed resources
- log.debug("Initializing {} registered ManagedResources", registry.registered.size());
+ if (log.isDebugEnabled()) {
+ log.debug("Initializing {} registered ManagedResources", registry.registered.size());
+ }
for (ManagedResourceRegistration reg : registry.registered.values()) {
// keep track of this for lookups during request processing
managed.put(reg.resourceId, createManagedResource(reg));
@@ -751,7 +756,7 @@ public class RestManager {
res.onResourceDeleted();
} catch (IOException e) {
// the resource is already deleted so just log this
- log.error("Error when trying to clean-up after deleting "+resourceId, e);
+ log.error("Error when trying to clean-up after deleting {}",resourceId, e);
}
}
diff --git a/solr/core/src/java/org/apache/solr/rest/schema/analysis/ManagedSynonymFilterFactory.java b/solr/core/src/java/org/apache/solr/rest/schema/analysis/ManagedSynonymFilterFactory.java
index fba25ab..b62dd10 100644
--- a/solr/core/src/java/org/apache/solr/rest/schema/analysis/ManagedSynonymFilterFactory.java
+++ b/solr/core/src/java/org/apache/solr/rest/schema/analysis/ManagedSynonymFilterFactory.java
@@ -165,7 +165,9 @@ public class ManagedSynonymFilterFactory extends BaseManagedTokenFilterFactory {
cpsm.mappings.put(key, sortedVals);
}
}
- log.info("Loaded {} synonym mappings for {}", synonymMappings.size(), getResourceId());
+ if (log.isInfoEnabled()) {
+ log.info("Loaded {} synonym mappings for {}", synonymMappings.size(), getResourceId());
+ }
}
@SuppressWarnings("unchecked")
diff --git a/solr/core/src/java/org/apache/solr/rest/schema/analysis/ManagedSynonymGraphFilterFactory.java b/solr/core/src/java/org/apache/solr/rest/schema/analysis/ManagedSynonymGraphFilterFactory.java
index 08596df..d96c320 100644
--- a/solr/core/src/java/org/apache/solr/rest/schema/analysis/ManagedSynonymGraphFilterFactory.java
+++ b/solr/core/src/java/org/apache/solr/rest/schema/analysis/ManagedSynonymGraphFilterFactory.java
@@ -160,7 +160,9 @@ public class ManagedSynonymGraphFilterFactory extends BaseManagedTokenFilterFact
cpsm.mappings.put(key, sortedVals);
}
}
- log.info("Loaded {} synonym mappings for {}", synonymMappings.size(), getResourceId());
+ if (log.isInfoEnabled()) {
+ log.info("Loaded {} synonym mappings for {}", synonymMappings.size(), getResourceId());
+ }
}
@SuppressWarnings("unchecked")
diff --git a/solr/core/src/java/org/apache/solr/rest/schema/analysis/ManagedWordSetResource.java b/solr/core/src/java/org/apache/solr/rest/schema/analysis/ManagedWordSetResource.java
index a5ff38b..1a9840d 100644
--- a/solr/core/src/java/org/apache/solr/rest/schema/analysis/ManagedWordSetResource.java
+++ b/solr/core/src/java/org/apache/solr/rest/schema/analysis/ManagedWordSetResource.java
@@ -112,8 +112,9 @@ public class ManagedWordSetResource extends ManagedResource
} else {
storeManagedData(new ArrayList<String>(0)); // stores an empty word set
}
-
- log.info("Loaded "+managedWords.size()+" words for "+getResourceId());
+ if (log.isInfoEnabled()) {
+ log.info("Loaded {} words for {}", managedWords.size(), getResourceId());
+ }
}
/**
@@ -162,7 +163,7 @@ public class ManagedWordSetResource extends ManagedResource
boolean madeChanges = false;
List<String> words = (List<String>)updates;
- log.info("Applying updates: "+words);
+ log.info("Applying updates: {}", words);
boolean ignoreCase = getIgnoreCase();
for (String word : words) {
if (ignoreCase)