2

以下是我的 log4j.properties:

log4j.rootLogger=ALL, stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d [%t] %p [%c] - %m%n


log4j.logger.org.springframework=ALL
log4j.logger.app.dev.ems=ALL
log4j.logger.org.springframework.transaction=ALL

log4jConfigLocation在 web.xml 中提到过:

<context-param>
    <param-name>log4jConfigLocation</param-name>
    <param-value>/WEB-INF/resources/log4j.properties</param-value>
</context-param>

并且还定义了它的监听类:

<listener>
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>

但我无法在控制台中看到 Spring Transaction 日志。同样来自一个班级:app.dev.ems.web.wicket.page.home.HomePage当我在做的时候:

Logger logger = LoggerFactory.getLogger(getClass());

public HomePage() {     
    logger.debug("<<<<<<<<<<<<<<<<<<<JYM>>>>>>>>>>>>>>>>>>");//if logger.info is used then it is showing.       
}

这也没有显示该日志。我在 Wicket Application 中,我已经设置:

<init-param>
    <param-name>configuration</param-name>
    <param-value>DEVELOPMENT</param-value>
</init-param>

在定义 WicketServlet 时。

我无法找到问题所在。任何信息都会对我很有帮助。

注意:如果您希望我发布 applicationContext.xml,我可以这样做。事务是注释驱动的。


我添加了 log4j-1.2.14、slf4j-api-1.6.1、slf4j-log4j12-1.4.2。我正在使用 JBoss AS-7.1.0-Final。

在其他 SO 线程中,我看到这是 JBoss 的问题,并且根据那里给出的指令,我在 WEB-INF 中添加了 jboss-deployment-structure.xml(也尝试使用 META-INF):

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
    <deployment>
        <exclusions>
            <module name="org.apache.log4j" />
        </exclusions>
    </deployment>
</jboss-deployment-structure> 

并在 applicationContext.xml 中定义了一个 bean,它将加载 log4j.properties:

<bean id="log4jInitializer" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
    <property name="targetClass" value="org.springframework.util.Log4jConfigurer" />
    <property name="targetMethod" value="initLogging" />
    <property name="arguments">
        <list>
            <value>classpath:/app/dev/ems/web/log4j.properties</value>
        </list>
    </property>
</bean>

但不幸的是,它没有奏效。

4

2 回答 2

2

使用jboss-deployment-structure.xml排除应该有效。如果不是,它可能是您的配置文件的位置。我对 Spring 不熟悉,所以添加 可能<context-param/>是指定日志配置位置的典型方法。

您可能想尝试将您log4j.properties的文件移至存档的WEB-INF/classesorMETA-INF目录。此外,您还要确保在部署中包含 log4j 库。

FWIWjboss-deployment-structure.xml将不再需要记录配置。它还没有发布,但它在上游源中。

由于您似乎正在寻找一种打开调试的方法,因此您需要做两件事。您需要设置一个处理程序以允许调试消息通过。您还需要设置一个记录器,如果不是所有消息都可以通过,至少允许调试。

例如,在您的情况下,您将像这样创建一个记录器。

<logger category="app.dev.ems.web.wicket" />

这将创建一个记录所有级别的记录器。现在创建一个处理程序,或更改先前定义的处理程序以接受调试消息。

另一个例子是为您的特定记录器创建一个文件处理程序,它将您的日志消息打印到一个文件中。

<file-handler name="myFileHandler>
    <level name="DEBUG"/>
    <file relative-to="jboss.server.log.dir" path="my-log.log"/>
</file-handler>

现在创建您的记录器并将处理程序分配给它。

<logger category="app.dev.ems.web.wicket">
    <handlers>
        <handler name="myFileHandler/>
    </handlers>
<logger>

app.dev.ems.web.wicket.*现在,除了附加到根记录器的处理程序之外,所有通过具有类别的记录器的日志消息都将打印到该文件。如果您不想在默认值server.log或控制台中看到这些,您可以将use-parent-handler="false"属性添加到记录器。

于 2012-04-29T18:06:29.580 回答
0

I have found a solution. My aim was to see the transaction logs. And now I can see that. What I did, I have modified the standalone.xml file resides in standalone/configuration. I changed some parts of the Logging subsystem:

The console-handler:

<console-handler name="CONSOLE">
   <level name="INFO"/>
   <formatter>
       <pattern-formatter pattern="%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%E%n"/>
   </formatter>
 </console-handler>

changed to

<console-handler name="CONSOLE">
   <level name="DEBUG"/>
   <formatter>
       <pattern-formatter pattern="%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%E%n"/>
   </formatter>
 </console-handler>

And the root-logger

<root-logger>
   <level name="INFO"/>
   <handlers>
      <handler name="CONSOLE"/>
      <handler name="FILE"/>
   </handlers>
</root-logger>

changed to

<root-logger>
   <level name="DEBUG"/>
   <handlers>
      <handler name="CONSOLE"/>
      <handler name="FILE"/>
   </handlers>
</root-logger>

And that works. Now I can see the DEBUG log in console. :)

于 2012-04-29T20:11:17.777 回答