You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by gu...@apache.org on 2020/06/26 22:01:28 UTC

[lucene-solr] branch master updated: SOLR-13286 Quiet down metrics logging, add a marker to allow any handler to be silenced via log4j2.xml

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

gus 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 455f2e6  SOLR-13286 Quiet down metrics logging, add a marker to allow any handler to be silenced via log4j2.xml
455f2e6 is described below

commit 455f2e6c73fd7ae7a9e3a7832db47ad4bc8e482f
Author: Gus Heck <gu...@apache.org>
AuthorDate: Fri Jun 26 18:00:52 2020 -0400

    SOLR-13286 Quiet down metrics logging, add a marker to allow any handler to be silenced via log4j2.xml
---
 solr/CHANGES.txt                                        |  3 +++
 .../src/java/org/apache/solr/servlet/HttpSolrCall.java  | 17 ++++++++++-------
 solr/server/resources/log4j2.xml                        |  5 +++++
 3 files changed, 18 insertions(+), 7 deletions(-)

diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 57bab21..7967d98 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -25,6 +25,9 @@ Improvements
 
 * SOLR-14387: SolrClient.getById() will escape comma separater within ids (Markus Schuch via Mike Drob)
 
+* SOLR-13286: Metrics will no longer write a (sometimes large) log message every minute. This can be re-enabled
+  via log4j2.xml if desired, or other HttpSolrCall log messages may be quieted on a per handler basis. (Gus Heck)
+
 Other Changes
 ----------------------
 * LUCENE-9391: Upgrade HPPC to 0.8.2. (Haoyu Zhai)
diff --git a/solr/core/src/java/org/apache/solr/servlet/HttpSolrCall.java b/solr/core/src/java/org/apache/solr/servlet/HttpSolrCall.java
index 88940af..93be82b 100644
--- a/solr/core/src/java/org/apache/solr/servlet/HttpSolrCall.java
+++ b/solr/core/src/java/org/apache/solr/servlet/HttpSolrCall.java
@@ -113,6 +113,7 @@ import org.apache.solr.util.tracing.GlobalTracer;
 import org.apache.zookeeper.KeeperException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.slf4j.MarkerFactory;
 
 import static org.apache.solr.common.cloud.ZkStateReader.BASE_URL_PROP;
 import static org.apache.solr.common.cloud.ZkStateReader.COLLECTION_PROP;
@@ -473,7 +474,7 @@ public class HttpSolrCall {
     log.debug("AuthorizationContext : {}", context);
     AuthorizationResponse authResponse = cores.getAuthorizationPlugin().authorize(context);
     int statusCode = authResponse.statusCode;
-    
+
     if (statusCode == AuthorizationResponse.PROMPT.statusCode) {
       @SuppressWarnings({"unchecked"})
       Map<String, String> headers = (Map) getReq().getAttribute(AuthenticationPlugin.class.getName());
@@ -637,7 +638,7 @@ public class HttpSolrCall {
   private boolean shouldAuthorize() {
     if(PublicKeyHandler.PATH.equals(path)) return false;
     //admin/info/key is the path where public key is exposed . it is always unsecured
-    if ("/".equals(path) || "/solr/".equals(path)) return false; // Static Admin UI files must always be served 
+    if ("/".equals(path) || "/solr/".equals(path)) return false; // Static Admin UI files must always be served
     if (cores.getPkiAuthenticationPlugin() != null && req.getUserPrincipal() != null) {
       boolean b = cores.getPkiAuthenticationPlugin().needsAuthorization(req);
       log.debug("PkiAuthenticationPlugin says authorization required : {} ", b);
@@ -816,8 +817,10 @@ public class HttpSolrCall {
     SolrCore.preDecorateResponse(solrReq, solrResp);
     handleAdmin(solrResp);
     SolrCore.postDecorateResponse(handler, solrReq, solrResp);
-    if (log.isInfoEnabled() && solrResp.getToLog().size() > 0) {
-      log.info(solrResp.getToLogAsString("[admin]"));
+    if (solrResp.getToLog().size() > 0) {
+      if (log.isInfoEnabled()) { // has to come second and in it's own if to keep ./gradlew check happy.
+        log.info(handler != null ? MarkerFactory.getMarker(handler.getClass().getName()) : MarkerFactory.getMarker(HttpSolrCall.class.getName()), solrResp.getToLogAsString("[admin]"));
+      }
     }
     QueryResponseWriter respWriter = SolrCore.DEFAULT_RESPONSE_WRITERS.get(solrReq.getParams().get(CommonParams.WT));
     if (respWriter == null) respWriter = getResponseWriter();
@@ -1134,7 +1137,7 @@ public class HttpSolrCall {
       public String getHttpHeader(String s) {
         return getReq().getHeader(s);
       }
-      
+
       @Override
       public Enumeration<String> getHeaderNames() {
         return getReq().getHeaderNames();
@@ -1149,7 +1152,7 @@ public class HttpSolrCall {
       public RequestType getRequestType() {
         return requestType;
       }
-      
+
       public String getResource() {
         return path;
       }
@@ -1173,7 +1176,7 @@ public class HttpSolrCall {
         }
         if(collectionRequests.size() > 0)
           response.delete(response.length() - 1, response.length());
-        
+
         response.append("], Path: [").append(resource).append("]");
         response.append(" path : ").append(path).append(" params :").append(getParams());
         return response.toString();
diff --git a/solr/server/resources/log4j2.xml b/solr/server/resources/log4j2.xml
index 61aa2cf..0a545b2 100644
--- a/solr/server/resources/log4j2.xml
+++ b/solr/server/resources/log4j2.xml
@@ -66,6 +66,11 @@
     <AsyncLogger name="org.apache.hadoop" level="warn"/>
     <AsyncLogger name="org.apache.solr.update.LoggingInfoStream" level="off"/>
     <AsyncLogger name="org.apache.zookeeper" level="warn"/>
+    <!-- HttpSolrCall adds markers denoting the handler class to allow fine grained control, metrics are
+         very noisy so by default the metrics handler is turned off to see metrics logging set DENY to ACCEPT -->
+    <AsyncLogger name="org.apache.solr.servlet.HttpSolrCall" level="info">
+      <MarkerFilter marker="org.apache.solr.handler.admin.MetricsHandler" onMatch="DENY" onMismatch="ACCEPT"/>
+    </AsyncLogger>
     <AsyncLogger name="org.apache.solr.core.SolrCore.SlowRequest" level="info" additivity="false">
       <AppenderRef ref="SlowLogFile"/>
     </AsyncLogger>