[ https://issues.apache.org/jira/browse/LUCENE-1482?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Shai Erera updated LUCENE-1482: ------------------------------- Attachment: slf4j-nop-1.5.6.jar slf4j-api-1.5.6.jar LUCENE-1482.patch Thanks Doug, I've replaced the JDK14 jar with the NOP jar and deleted the logging test I added (since NOP does not log anything). > Replace infoSteram by a logging framework (SLF4J) > ------------------------------------------------- > > Key: LUCENE-1482 > URL: https://issues.apache.org/jira/browse/LUCENE-1482 > Project: Lucene - Java > Issue Type: Improvement > Components: Index > Reporter: Shai Erera > Priority: Minor > Fix For: 2.4.1, 2.9 > > Attachments: LUCENE-1482.patch, slf4j-api-1.5.6.jar, > slf4j-nop-1.5.6.jar > > > Lucene makes use of infoStream to output messages in its indexing code only. > For debugging purposes, when the search application is run on the customer > side, getting messages from other code flows, like search, query parsing, > analysis etc can be extremely useful. > There are two main problems with infoStream today: > 1. It is owned by IndexWriter, so if I want to add logging capabilities to > other classes I need to either expose an API or propagate infoStream to all > classes (see for example DocumentsWriter, which receives its infoStream > instance from IndexWriter). > 2. I can either turn debugging on or off, for the entire code. > Introducing a logging framework can allow each class to control its logging > independently, and more importantly, allows the application to turn on > logging for only specific areas in the code (i.e., org.apache.lucene.index.*). > I've investigated SLF4J (stands for Simple Logging Facade for Java) which is, > as it names states, a facade over different logging frameworks. As such, you > can include the slf4j.jar in your application, and it recognizes at deploy > time what is the actual logging framework you'd like to use. SLF4J comes with > several adapters for Java logging, Log4j and others. If you know your > application uses Java logging, simply drop slf4j.jar and slf4j-jdk14.jar in > your classpath, and your logging statements will use Java logging underneath > the covers. > This makes the logging code very simple. For a class A the logger will be > instantiated like this: > public class A { > private static final logger = LoggerFactory.getLogger(A.class); > } > And will later be used like this: > public class A { > private static final logger = LoggerFactory.getLogger(A.class); > public void foo() { > if (logger.isDebugEnabled()) { > logger.debug("message"); > } > } > } > That's all ! > Checking for isDebugEnabled is very quick, at least using the JDK14 adapter > (but I assume it's fast also over other logging frameworks). > The important thing is, every class controls its own logger. Not all classes > have to output logging messages, and we can improve Lucene's logging > gradually, w/o changing the API, by adding more logging messages to > interesting classes. > I will submit a patch shortly -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]