You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ds...@apache.org on 2020/10/01 12:34:19 UTC

[lucene-solr] branch branch_8x updated: SOLR-12987: Deprecated plugins are logged once and with log category org.apache.solr.DEPRECATED (#1927)

This is an automated email from the ASF dual-hosted git repository.

dsmiley pushed a commit to branch branch_8x
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git


The following commit(s) were added to refs/heads/branch_8x by this push:
     new 798b67b  SOLR-12987: Deprecated plugins are logged once and with log category org.apache.solr.DEPRECATED (#1927)
798b67b is described below

commit 798b67b97ad31c16f10dcb74dc212f065e3edfd3
Author: David Smiley <ds...@apache.org>
AuthorDate: Thu Oct 1 08:31:39 2020 -0400

    SOLR-12987: Deprecated plugins are logged once and with log category org.apache.solr.DEPRECATED (#1927)
    
    (cherry picked from commit 9cadbf04b6556b227580a7d72f7af51fcf3083f3)
---
 solr/CHANGES.txt                                   |  3 ++
 .../org/apache/solr/core/SolrResourceLoader.java   |  5 ++-
 .../org/apache/solr/logging/DeprecationLog.java    | 50 ++++++++++++++++++++++
 3 files changed, 56 insertions(+), 2 deletions(-)

diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index c7496a2..a92e139 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -170,6 +170,9 @@ Other Changes
   Also, Deprecate unused constants NULL_COLLAPSE, NULL_IGNORE, NULL_EXPAND, HINT_MULTI_DOCVALUES in collapse parser.
   (Guna Sekhar Dora Kovvuru, Munendra S N, Mike Drob)
 
+* SOLR-12987: Deprecated plugins/features are now logged once and with log category org.apache.solr.DEPRECATED
+  (David Smiley)
+
 ==================  8.6.2 ==================
 
 Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
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 ccc1bd9..52706c7 100644
--- a/solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java
+++ b/solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java
@@ -46,6 +46,7 @@ import org.apache.solr.common.SolrException;
 import org.apache.solr.common.cloud.SolrClassLoader;
 import org.apache.solr.handler.component.SearchComponent;
 import org.apache.solr.handler.component.ShardHandlerFactory;
+import org.apache.solr.logging.DeprecationLog;
 import org.apache.solr.pkg.PackageListeningClassLoader;
 import org.apache.solr.request.SolrRequestHandler;
 import org.apache.solr.response.QueryResponseWriter;
@@ -552,8 +553,8 @@ public class SolrResourceLoader implements ResourceLoader, Closeable, SolrClassL
 
         // print warning if class is deprecated
         if (clazz.isAnnotationPresent(Deprecated.class)) {
-          log.warn("Solr loaded a deprecated plugin/analysis class [{}]. Please consult documentation how to replace it accordingly.",
-              cname);
+          DeprecationLog.log(cname,
+            "Solr loaded a deprecated plugin/analysis class [" + cname + "]. Please consult documentation how to replace it accordingly.");
         }
       }
     }
diff --git a/solr/core/src/java/org/apache/solr/logging/DeprecationLog.java b/solr/core/src/java/org/apache/solr/logging/DeprecationLog.java
new file mode 100644
index 0000000..20c775e
--- /dev/null
+++ b/solr/core/src/java/org/apache/solr/logging/DeprecationLog.java
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.solr.logging;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Utility to log a deprecation.
+ */
+public class DeprecationLog {
+
+  public static final String LOG_PREFIX = "org.apache.solr.DEPRECATED.";
+
+  // featureId -> message.  Don't really need the message
+  private static final Map<String, String> alreadyLogged = new ConcurrentHashMap<>();
+
+  /**
+   * Logs a deprecation warning for the provided feature, but only the first time.
+   * The logger name used is {@value LOG_PREFIX} + {@code featureId}.
+   * Remember that logger names are disable-able via configuration if needed.
+   * @return true if logged
+   */
+  public static boolean log(String featureId, String message) {
+    if (alreadyLogged.putIfAbsent(featureId, message) != null) {
+      return false;
+    }
+    Logger log = LoggerFactory.getLogger(LOG_PREFIX + featureId);
+    log.warn(message);
+    return true;
+  }
+}