Gan*_*row 8 java log4j jboss5.x
我目前正在开发大型(功能明智的)休息网络服务,我想捕获日志非常好,所以我可以很好地了解发生了什么.现在我使用log4j进行日志记录,使用这个附加设置:
<!-- Appenders -->
<appender name="console" class="org.apache.log4j.ConsoleAppender">
    <param name="Target" value="System.out" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%-5p: %c - %m%n" />
    </layout>
</appender>
它产生这些日志:
10:44:55,893 INFO  [STDOUT] INFO : my.package.MyClass - I'm class message
我怎样才能使这条消息看起来像ie
10:44:55,893 INFO : my.package.MyClass - I'm class message
我可以制作一个特殊的appender或它是什么,并在一些类中使用它,而不是所有的,即我想在我的几个日志中有这个:
Payload: some request parametersResponse: some response that my service returnsextra data : some extra data没有这些 INFO [STDOUT] INFO my.package.MyClass in front of it
UPDATE
我忘记在问题中提到我正在使用Jboss 5.我认为jboss可能会添加10:44:55,893 INFO  [STDOUT]到我放在log4j配置中的任何格式.
BOUNTY UPDATE
我改变了这个:
<!-- ============================== -->
   <!-- Append messages to the console -->
   <!-- ============================== -->
   <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">
         <!-- The default pattern: Date Priority [Category] Message\n -->
         <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/>
      </layout>
   </appender>
对此:
<!-- ============================== -->
   <!-- Append messages to the console -->
   <!-- ============================== -->
       <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">
             <!-- The default pattern: Date Priority [Category] Message\n -->
             <param name="ConversionPattern" value="%m%n"/>
          </layout>
       </appender>
它有效,但这样做似乎有点难看.还有其他方法吗?我正在使用spring MVC/JBoss组合.
我现在得到了很好的干净消息:
10:44:55,893 INFO : my.package.MyClass - I'm class message
没有烦恼
10:44:55,893 INFO  [STDOUT]
字首
问题1:
为appender使用以下模式布局:
<param name="ConversionPattern" value="%d{ABSOLUTE} %-5p: %c - %m%n" />
您声明的配置文件中的转换模式不会导致您声明的日志类型.例如,日期/时间不包含在转换模式中.
问题2:
您可以使用一个特殊的记录器,它使用另一个只记录纯消息的appender.
您的配置将如下所示:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <appender name="consoleAppender" class="org.apache.log4j.ConsoleAppender">
        <param name="Target" value="System.out" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%m%n" />
        </layout>
    </appender>
    <appender name="consoleAppender2" class="org.apache.log4j.ConsoleAppender">
        <param name="Target" value="System.out" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p: %c - %m%n" />
        </layout>
    </appender>
    <logger name="specialLogger" additivity="false">
        <level value="INFO" />
        <appender-ref ref="consoleAppender" />
    </logger>
    <root>
        <priority value="INFO" />
        <appender-ref ref="consoleAppender2" />
    </root>
</log4j:configuration>
您可以将specialLogger用于纯消息,而无需其他信息.它可以用于多个类.
在specialLogger的配置中,additivity = "false"需要,因为否则consoleAppender2根记录器的appender 也会记录相同的消息.(在这种情况下,消息将被记录两次.)
例如,您的代码可能如下所示:
public class TestClassA
{
    private static Logger specialLogger = Logger.getLogger("specialLogger");
    private static Logger logger = Logger.getLogger(TestClassA.class);    
    public TestClassA() {
    }
    public void doSomething() {
        logger.info("Some message from TestClassA");
        specialLogger.info("Some message via the specialLogger from TestClassA");
    }
}
调用doSomething会导致:
17:17:18,125 INFO : com.foo.TestClassA - Some message from TestClassA
Some message via the specialLogger from TestClassA
在主类的某个地方,您需要像往常一样配置log4j,例如:
DOMConfigurator.configureAndWatch("log4j.xml", 60 * 1000);