Hi Ceki,<br><br>This information has saved me a lot of digging, however having viewed the logging throughout the Nutch code base, I am personally tempted to move towards the first of your suggestions. As you explained I was aware that this was the de facto method for logging errors, and this is present throughout various areas of the code. I must thank you very much for your suggestions.<br>
<br>Lewis<br><br><div class="gmail_quote">On Fri, Sep 23, 2011 at 3:52 PM, Ceki Gulcu <span dir="ltr">&lt;<a href="mailto:ceki@qos.ch">ceki@qos.ch</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Hi  Lewis,<br>
<br>
The problem has to do with how LogUtil is implemented.<br>
Here are two possible solutions.<br>
<br>
1) Get rid of the LogUtil class. For example, in HttpBase, instead of<div class="im"><br>
<br>
 } catch (Throwable e) {<br>
   e.printStackTrace(LogUtil.<u></u>getErrorStream(logger));<br>
   return new ProtocolOutput(null, new ProtocolStatus(e));<br>
 }<br>
<br></div>
 write instead<br>
<br>
 } catch (Throwable e) {<br>
   logger.error(&quot;Failed to get protocol output&quot;, e);<div class="im"><br>
   return new ProtocolOutput(null, new ProtocolStatus(e));<br>
 }<br>
<br></div>
This latter form is the standard way of logging exceptions.<br>
You would need to repeat this operation in all places where LogUtil is used. There are about 60 such places located in about a dozen classes.<br>
<br>
2) In LogUtil, replace<br>
<br>
static {<br>
  try {<br>
   TRACE=Logger.class.getMethod(&quot;<u></u>trace&quot;, new Class[] { Object.class });<br>
   DEBUG=Logger.class.getMethod(&quot;<u></u>debug&quot;, new Class[] { Object.class });<br>
   INFO=Logger.class.getMethod(&quot;<u></u>info&quot;,  new Class[] { Object.class });<br>
  } catch ...<br>
  }<br>
}<br>
<br>
 with<br>
<br>
static {<br>
  try {<br>
   TRACE=Logger.class.getMethod(&quot;<u></u>trace&quot;, new Class[] {String.class});<br>
   DEBUG=Logger.class.getMethod(&quot;<u></u>debug&quot;, new Class[] {String.class});<br>
   INFO=Logger.class.getMethod(&quot;<u></u>info&quot;,  new Class[] {String.class});<br>
  } catch ...<br>
  }<br>
}<br>
<br>
On line 104 change<br>
  method.invoke(logger, new Object[] {toString().trim() });<br>
to<br>
  method.invoke(logger, new String[] {toString().trim() });<br>
<br>
<br>
Unless there is a good reason not to, I would get rid of LogUtil in Nutch. It seems like a very convoluted way for logging exceptions. But maybe I am missing the bigger picture...<br>
<br>
HTH,<br>
--<br>
Ceki<div><div></div><div class="h5"><br>
<br>
On 23.09.2011 14:49, lewis john mcgibbney wrote:<br>
</div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div></div><div class="h5">
Hi list,<br>
<br>
I&#39;m working on the task of upgrading our Apache Nutch codebase to use<br>
SLF4J with Log4J backend, therefore using the migrator. Testing in a<br>
development environment all JUnit tests, build and compile ant tasks<br>
pass successfully, however when moving into production (when exceptions<br>
are caught) we are having some problems. The full JIRA issue can be seen<br>
here[1].<br>
<br>
Namely the following class [2] at around this code snippet<br>
{code}<br>
<br>
     } catch (Throwable e) {<br>
       e.printStackTrace(LogUtil.<u></u>getErrorStream(logger));<br>
       return new ProtocolOutput(null, new ProtocolStatus(e));<br>
     }<br>
   }<br>
<br>
   /* -------------------------- *<br>
    *&lt;/implementation:Protocol&gt;  *<br>
    * -------------------------- */<br>
<br>
{code}<br>
<br>
To be honest, I&#39;m pretty stumped as I&#39;ve read all of the migrator<br>
documentation and not surprisingly as far as I know, none seems to be<br>
specific enough to address this issue. Does anyone have any suggestions<br>
as to how this code can be manually edited to prevent the various errors<br>
occuring as shown below.<br>
<br>
2011-09-22 19:36:02,046 ERROR org.apache.nutch.util.LogUtil: Cannot log with method [null]<br>
java.lang.NullPointerException<br>
        at org.apache.nutch.util.LogUtil$<u></u>1.flush(LogUtil.java:103)<br>
        at java.io.PrintStream.write(<u></u>PrintStream.java:432)<br>
        at sun.nio.cs.StreamEncoder.<u></u>writeBytes(StreamEncoder.java:<u></u>202)<br>
        at sun.nio.cs.StreamEncoder.<u></u>implFlushBuffer(StreamEncoder.<u></u>java:272)<br>
        at sun.nio.cs.StreamEncoder.<u></u>flushBuffer(StreamEncoder.<u></u>java:85)<br>
        at java.io.OutputStreamWriter.<u></u>flushBuffer(<u></u>OutputStreamWriter.java:168)<br>
        at java.io.PrintStream.newLine(<u></u>PrintStream.java:496)<br>
        at java.io.PrintStream.println(<u></u>PrintStream.java:774)<br>
        at java.lang.Throwable.<u></u>printStackTrace(Throwable.<u></u>java:461)<br>
        at org.apache.nutch.protocol.<u></u>http.api.HttpBase.<u></u>getProtocolOutput(HttpBase.<u></u>java:197)&lt;&lt;&lt;&lt;&lt;&lt;&lt;  HERE<br>
        at org.apache.nutch.fetcher.<u></u>Fetcher$FetcherThread.run(<u></u>Fetcher.java:665)<br>
<br>
2011-09-22 19:44:26,929 ERROR org.apache.nutch.util.LogUtil: Cannot init log methods<br>
java.lang.<u></u>NoSuchMethodException: org.slf4j.Logger.trace(java.<u></u>lang.Object)<br>
        at java.lang.Class.getMethod(<u></u>Class.java:1605)<br>
        at org.apache.nutch.util.LogUtil.<u></u>&lt;clinit&gt;(LogUtil.java:48)<br>
        at org.apache.nutch.protocol.<u></u>http.api.HttpBase.<u></u>getProtocolOutput(HttpBase.<u></u>java:197)&lt;&lt;&lt;&lt;&lt;&lt;&lt;  HERE<br>
        at org.apache.nutch.fetcher.<u></u>Fetcher$FetcherThread.run(<u></u>Fetcher.java:665)<br>
<br>
<br>
Thank you kindly in advance for any suggestions.<br>
<br>
Lewis<br>
<br>
[1] <a href="https://issues.apache.org/jira/browse/NUTCH-1078" target="_blank">https://issues.apache.org/<u></u>jira/browse/NUTCH-1078</a><br>
[2]<br>
<a href="https://svn.apache.org/repos/asf/nutch/branches/branch-1.4/src/plugin/lib-http/src/java/org/apache/nutch/protocol/http/api/HttpBase.java" target="_blank">https://svn.apache.org/repos/<u></u>asf/nutch/branches/branch-1.4/<u></u>src/plugin/lib-http/src/java/<u></u>org/apache/nutch/protocol/<u></u>http/api/HttpBase.java</a><br>

[3] <a href="http://www.slf4j.org/migrator.html" target="_blank">http://www.slf4j.org/migrator.<u></u>html</a><br>
--<br></div></div>
/Lewis/<br>
<br>
<br>
</blockquote>
______________________________<u></u>_________________<br>
slf4j-user mailing list<br>
<a href="mailto:slf4j-user@qos.ch" target="_blank">slf4j-user@qos.ch</a><br>
<a href="http://qos.ch/mailman/listinfo/slf4j-user" target="_blank">http://qos.ch/mailman/<u></u>listinfo/slf4j-user</a><br>
</blockquote></div><br><br clear="all"><br>-- <br><font style="font-family:courier new,monospace;background-color:rgb(255, 255, 255);color:rgb(51, 102, 255)" size="4"><i>Lewis</i></font><span style="background-color:rgb(255, 255, 255);color:rgb(51, 102, 255)"></span> <br>
<br>