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>
Run Code Online (Sandbox Code Playgroud)
它产生这些日志:
10:44:55,893 INFO [STDOUT] INFO : my.package.MyClass - I'm class message
Run Code Online (Sandbox Code Playgroud)
我怎样才能使这条消息看起来像ie
10:44:55,893 INFO : my.package.MyClass - I'm class message
Run Code Online (Sandbox Code Playgroud)我可以制作一个特殊的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>
Run Code Online (Sandbox Code Playgroud)
对此:
<!-- ============================== -->
<!-- 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>
Run Code Online (Sandbox Code Playgroud)
它有效,但这样做似乎有点难看.还有其他方法吗?我正在使用spring MVC/JBoss组合.
我现在得到了很好的干净消息:
10:44:55,893 INFO : my.package.MyClass - I'm class message
Run Code Online (Sandbox Code Playgroud)
没有烦恼
10:44:55,893 INFO [STDOUT]
Run Code Online (Sandbox Code Playgroud)
字首
问题1:
为appender使用以下模式布局:
<param name="ConversionPattern" value="%d{ABSOLUTE} %-5p: %c - %m%n" />
Run Code Online (Sandbox Code Playgroud)
您声明的配置文件中的转换模式不会导致您声明的日志类型.例如,日期/时间不包含在转换模式中.
问题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>
Run Code Online (Sandbox Code Playgroud)
您可以将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");
}
}
Run Code Online (Sandbox Code Playgroud)
调用doSomething会导致:
17:17:18,125 INFO : com.foo.TestClassA - Some message from TestClassA
Some message via the specialLogger from TestClassA
Run Code Online (Sandbox Code Playgroud)
在主类的某个地方,您需要像往常一样配置log4j,例如:
DOMConfigurator.configureAndWatch("log4j.xml", 60 * 1000);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3992 次 |
| 最近记录: |