On 7/27/2017 10:57 AM, Nawab Zada Asad Iqbal wrote:
> I see a lot of discussion on this topic from almost 10 years ago: e.g.,
> https://issues.apache.org/jira/browse/LUCENE-1482
>
> For 4.5, I relied on 'System.out.println' for writing information for
> debugging in production.
>
> In 6.6, I notice that some classes in Lucene are instantiating a Logger,
> should I use Logger instead? I tried to log with it, but I don't see any
> output in logs.

You're asking about this on a Solr list, not a Lucene list.  I am not
subscribed to the main Lucene user list, so I do not know if you have
also sent this question to that list.

Solr uses slf4j for logging.  Many of its dependencies have chosen other
logging frameworks.

https://www.slf4j.org/

With slf4j, you can utilize just about any supported logging
implementation to do the actual end logging.  The end implementation
chosen by the Solr project for version 4.3 and later is log4j 1.x.

It is my understanding that Lucene's core module has zero dependencies
-- it's pure Java.  That would include any external logging
implementation.  I do not know if the core module even uses
java.util.logging ... a quick grep for "Logger" suggests that there are
no loggers in use in the core module at all, but it's possible that I
have not scanned for the correct text.  I did notice that
TestIndexWriter uses a PrintStream for logging, and Shalin's reply has
reminded me about the infoStream feature.

Looking at the source code, it does appear that some of the other Lucene
modules do use a logger. Some of them appear to use the logger built
into java, others seem to use one of the third-party implementations
like slf4j.  Some of the dependent jars pulled in for non-core Lucene
modules depend on various logging implementations.

Logging frameworks can be the center of a religious flamewar.  Opinions
run strong.  IMHO, if you are writing your own code, the best option is
slf4j, bound to whatever end logging implementation you are most
comfortable using.  You can install slf4j jars to intercept logging sent
to the other common logging implementations and direct those through
slf4j so they end up in the same place as everything else.

Note if you want to use log4j2 as your end logging destination with
slf4j: log4j2 comes with jars implementing the slf4j classes, so you're
probably going to want to use those.

Thanks,
Shawn

Reply via email to