2009-10-02 87 views
2

我有一個彈簧2.5 Web應用具有以下的web.xml注漿的Log4J記錄器與彈簧

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" 
version="2.4"> 

<display-name>Spring BlazeDS Integration Samples</display-name> 


<context-param> 
    <param-name>webAppRootKey</param-name> 
    <param-value>ServerBlaze</param-value> 
</context-param> 

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value> 
     /WEB-INF/spring/*-context.xml 
    </param-value> 
</context-param> 

<context-param> 
    <param-name>log4jConfigLocation</param-name> 
    <param-value>/WEB-INF/config/log4j.xml</param-value> 
</context-param> 

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

<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 

<listener> 
    <listener-class>flex.messaging.HttpFlexSession</listener-class> 
</listener> 

<servlet> 
    <servlet-name>serverBlaze</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 


<servlet-mapping> 
    <servlet-name>serverBlaze</servlet-name> 
    <url-pattern>/messagebroker/*</url-pattern> 
</servlet-mapping> 

<welcome-file-list> 
    <welcome-file>index.html</welcome-file> 
</welcome-file-list> 

</web-app> 

,我宣佈這個bean

<bean id="mylog" 
    class="org.springframework.beans.factory.config.CommonsLogFactoryBean"> 
    <property name="logName" value="mylog" /> 
</bean> 

內部服務-context.xml中(這是一個BlazeDS的/春季項目)。

我注入這種方式進入的UserDAO豆:

<bean id="user" class="com.acotel.msp.database.UserDAO" > 
    <property name="mylog" ref="mylog" /> 
    <property name="jsonClient" ref="jsonClient" /> 
</bean> 

這是的log4j.xml配置文件:

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> 
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'> 
    <appender name="FILE" class="org.apache.log4j.DailyRollingFileAppender"> 
     <param name="file" value="${catalina.home}\\logs\\serverBlaze.log" /> 
     <param name="datePattern" value="'.'yyyy-MM" /> 
     <param name="append" value="true" /> 
     <layout class="org.apache.log4j.PatternLayout"> 
      ...cut... 
     </layout> 
    </appender> 

    <appender name="ROOT" class="org.apache.log4j.DailyRollingFileAppender"> 
     <param name="file" value="${catalina.home}\\logs\\serverBlazeRoot.log" /> 
     <param name="datePattern" value="'.'yyyy-MM" /> 
     <param name="append" value="true" /> 
     <layout class="org.apache.log4j.PatternLayout"> 
      <param name="ConversionPattern" value="%d [%t] %-5p %C{6} (%F:%L) - %m%n" /> 
     </layout> 
    </appender> 

    <logger name="com.bla.database"> 
     <level value="info" /> 
     <appender-ref ref="FILE" /> 
    </logger> 

    <root> 
     <priority value="info" /> 
     <appender-ref ref="ROOT" /> 
    </root> 
</log4j:configuration> 

在我的課我有這樣的:

package com.bla.database; 

import java.util.ArrayList; 

import json.Client; 

import org.apache.commons.logging.Log; 
import org.apache.log4j.Logger; 
import org.apache.log4j.PropertyConfigurator; 

import com.bla.MessageReceiver; 
import com.bla.PropertiesManager; 
import com.bla.interfaces.Users; 
import com.bla.vo.User; 

public class UserDAO { 

private Log mylog; 

private Client jsonClient; 

public User getUser(String username, String password) { 

    User result = null; 

    try { 

    Users users = jsonClient.openProxy("userDAO", Users.class); 
    result = users.getUser(username, password); 
    mylog.info("Esito invio bean ["+result+"]");  
    } catch (Exception e) { 
     // TODO: handle exception 
     e.printStackTrace(); 
    } 
    return result; 
}} 

我希望在類UserDAO中登錄會記錄到FILE appender,但它不會。該文件已創建,但爲空。 ROOT appender正常工作。 我在做什麼錯?

+0

您正在將commons-logging與Log4j混合使用。 Te myLog變量應該是org.apache.log4j.Logger類型,並且應該是靜態的。這使得Spring很難注入它......我不知道是否有注入靜態變量的方法。 – Neuquino 2010-05-28 15:47:01

回答

3

在您的services-context.xml文件中,嘗試將「myLog」bean的「logName」屬性設置爲「com.bla.database」。這應該匹配您的log4j.xml配置文件中定義的記錄器的名稱。

+0

謝謝你,它工作! :) – Francesco 2009-10-06 12:32:17

5

另一種方法是將伐木處理視爲一個交叉問題,並將其與方面進行對比。您可以聲明性地應用標準的Spring攔截器。

+0

還有,我非常喜歡自己的方面。 – 2009-10-05 21:41:18

+1

我想這樣做,但我在Spring中的專業知識還不夠。其實我甚至不知道除了我在維基百科上閱讀的東西外,哪些方面是不同的。 – Francesco 2009-10-06 12:33:27