I am a committer on the Apache Solr project.

The primary dependency that Solr has is Lucene, and there are a LOT more dependencies.

The lucene-core jar has zero dependencies, and their intent is to keep it that way. So when they needed to implement logging, they did so using java.util.logging.

Solr uses slf4j for logging. The binary package includes Jetty, and logging jars are in jetty's lib/ext folder. The ultimate logging destination in the binary package is log4j2. Before the 7.4 version of Solr, it used log4j1 as the ultimate destination -- long after log4j1 reached end of life.

For a very long time Solr has had slf4j bridges in place to handle anything logged by its many dependencies. The current version of Solr uses the JCL bridge and the JUL bridge. Bridging for log4j1 is handled by log4j2.

One of my fellow developers noticed that Lucene's logs were not getting logged with the Solr logs. So they added log4j's JUL bridge and a system property to use it. This created a problem when another feature was activated. See this issue:

https://issues.apache.org/jira/browse/SOLR-16976

I have learned that although Solr does include the jul-to-slf4j jar, this bridge does not get activated just by having the jar in the classpath. It must be activated either in the code or in the JUL config.

So I tried to add these lines to Solr's entry point, a class called SolrDispatchFilter:

SLF4JBridgeHandler.removeHandlersForRootLogger();
SLF4JBridgeHandler.install();

Solr has an admin UI with a page that shows all the loggers that exist for log4j2 and allows the levels for each logger to be changed on the fly. With the log4j bridge for JUL, this page has entries for Lucene classes, but I have not been able to get those to show up with the slf4j bridge.

I also tried configuring a logging.properties file with the following line in it, and setting the system property for that config to be used:

handlers = org.slf4j.bridge.SLF4JBridgeHandler

What do I need to do to properly activate the jul-to-slf4j bridge in Solr? How can I tell when/if it is successful?

Thanks,
Shawn

_______________________________________________
slf4j-user mailing list
slf4j-user@qos.ch
https://mailman.qos.ch/cgi-bin/mailman/listinfo/slf4j-user

Reply via email to