views:

829

answers:

5

Is it possible to have "debug" and "info" output written to the console while the "info" output is only written to some log file? For example, given this logging:

LOG.debug(fileContent);
LOG.info(fileLength);

What does a corresponding log4j.xml look like?

+3  A: 

That is definitely possible. The configuration would look something like this (not checked for syntactic correctness):

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"&gt;
    <appender name="console" class="org.apache.log4j.ConsoleAppender">
        ...
    </appender>

    <appender name="otherAppender"
              class="org.apache.log4j.FileAppender FileAppender">
        ...
    </appender>

    <logger name="com.mycompany.mypackage.MyClass">
        <level        value="info"/>
        <appender-ref ref="otherAppender" />
    </logger>

    <root>
        <priority     value="debug" />
        <appender-ref ref="console" />
    </root>
</log4j:configuration>

All debug and info messages go to the console appender. Info messages go to otherAppender.

Ronald Wildenberg
+1, I would have answered this but you beat me to it.
Eddie
I made some small edits to your answer. hope this is OK.
Eddie
That's ok :)Thanks!
Ronald Wildenberg
A: 

Go to this page for some examples.

It's as simple as adding two different appenders to your program, one appender for each type of logging you want to do.

A: 

With the configuration from Eddie I can only get the "info" output for MyClass. But what I would like to have is that the "info" output of MyClass goes to a file AND the "debug" output of MyClass goes to console.

A: 

Do as rwwilden suggested but remove this part

<logger name="com.mycompany.mypackage.MyClass">

<level value="info"/>

<appender-ref ref="otherAppender" />

</logger>

Add <param name="Threshold" value="INFO"/> under the otherAppender.

Bhushan
A: 

Ok, I've got it now:

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"&gt;
    <appender name="console" class="org.apache.log4j.ConsoleAppender">
        ...
    </appender>

    <appender name="otherAppender"
              class="org.apache.log4j.FileAppender FileAppender">
       <param name="Threshold" value="INFO"/>
        ...
    </appender>

    <root>
        <priority     value="debug" />
        <appender-ref ref="console" />
        <appender-ref ref="otherAppender" />
    </root>
</log4j:configuration>

Thanks for your help!