简体   繁体   English

log4j 只记录来自文件中特定类的消息

[英]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.在外部文件中,我想将 com.foo.test 类的输出记录到特定文件中,但发生的情况是它附加了控制台日志和文件日志。 Below is my xml configuration,下面是我的xml配置,

<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,我的 Java 代码是,

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.更新:问题是它将所有控制台输出和其他附加程序输出记录到 mytest.log 文件中,而不是我只想将来自我的 testsplitlogger 的特定类的信息消息和来自控制台和文件的其他日志附加到 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.请参阅 <root> xml 配置。 You are allowing the log to be directed on all three different files.您允许将日志定向到所有三个不同的文件。

  1. CONSOLE (system.out)控制台 (system.out)
  2. FILE(in this case server.log) and FILE(在本例中为 server.log)和
  3. MYTESTAPPENDER(mytest.log) 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. testsplitlogger 也必须包含 appender 引用。

<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这是一个很好的链接,您可以参考http://wiki.apache.org/logging-log4j/Log4jXmlFormat

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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