简体   繁体   中英

log4j log only messages from specific class in file

In a external file I would like to log the output of my com.foo.test class to a specific file but whats happening is its appending the console log as well as file log. Below is my xml configuration,

<appender name="FILE" class="org.jboss.logging.appender.DailyRollingFileAppender">
      <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
      <param name="File" value="${jboss.server.log.dir}/server.log"/>
      <param name="Append" value="false"/>
<param name="DatePattern" value="'.'yyyy-MM-dd"/>
 <layout class="org.apache.log4j.PatternLayout">
</layout>
</appender>

<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
      <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
      <param name="Target" value="System.out"/>
      <param name="Threshold" value="INFO"/>

      <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/>
      </layout>
   </appender>
<appender name="MYTESTAPPENDER" class="org.jboss.logging.appender.RollingFileAppender">
        <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
        <param name="File" value="${jboss.server.home.dir}/log/mytest.log"/>
        <param name="Append" value="false"/>
        <param name="MaxFileSize" value="3MB"/>
        <param name="MaxBackupIndex" value="3"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>
        </layout>
    </appender>
 <logger name="testsplitlogger" additivity="false">
<level value="info"/>
 <appender-ref ref="MYTESTAPPENDER"/>
 </logger>
 <root>
      <appender-ref ref="CONSOLE"/>
      <appender-ref ref="FILE"/>
      <appender-ref ref="MYTESTAPPENDER"/>
   </root>

And My Java code is,

private static final Logger logger = Logger.getLogger("testsplitlogger");

Update: The problem is its logging all the console output and other appenders output to mytest.log file instead I want to append only the info messages from my testsplitlogger for specific class and other logs from console and file should be written to server.log.

Am I doing anything wrong?

You need to create a Category for that:

<category name="my.company.package" additivity="false">
    <priority value="info" />
    <appender-ref ref="MYTESTAPPENDER" />
</category>

Please see the <root> xml config. You are allowing the log to be directed on all three different files.

  1. CONSOLE (system.out)
  2. FILE(in this case server.log) and
  3. MYTESTAPPENDER(mytest.log)

To your requirement you need to define like this.

<root>
<priority value="info"/>       
<!--<appender-ref ref="CONSOLE"/>-->       
<!--<appender-ref ref="FILE"/>-->       
<appender-ref ref="MYTESTAPPENDER"/>    
</root> 

EDIT: It seems you have updated the question since I last posted... So my following suggestion has already been taken care of by you.

The testsplitlogger must contain the appender reference as well.

<logger name="testsplitlogger" additivity="false">
   <level value="info" />
   <appender-ref ref="MYTESTAPPENDER" />
</logger>

Here is a good link you can refer to http://wiki.apache.org/logging-log4j/Log4jXmlFormat

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM