2011-06-28 16 views
1

在我的Web應用程序(基於Spring)中,我具有簡單的分層體系結構,即Service-> Manager-> Dao-> database。爲了記錄日誌的目的,我想記錄請求到服務,然後從服務退出,這樣很容易調試問題。否則,日誌包含來自不同線程的各種輸出,彼此混合,這是不容易閱讀的。是否有可能與現有的日誌框架,如log4j。記錄應用程序的整個流程易於閱讀

回答

1

它可以用任何日誌框架。您可以使用AOP在服務方法周圍創建「日誌記錄」方面。這裏有一些example

1

您可以使用Spring AOP來實現此類日誌。這裏有一個例子:

@Aspect 
public class LoggingAspect { 

    private static final Logger LOG = LoggerFactory.getLogger(LoggingAspect.class); 

    @Pointcut("call(* com.yourcompany.*.*(..))") 
    public void serviceMethod() { 
    } 

    @Before("serviceMethod()") 
    public void logMethodCalls(final JoinPoint joinPoint) { 
    if (LOG.isDebugEnabled()) 
      LOG.debug("Calling method {} with args {}", 
       joinPoint.getSignature(), joinPoint.getArgs()); 
    } 

} 

剛絲它作爲一個Spring bean:

<bean class="com.somepackage.LoggingAspect" /> 
<aop:aspectj-autoproxy/> 

,並呼籲該匹配的包的Spring bean的公共方法應該被記錄下來。

+0

讓我指定我需要的例子。我有3層,用戶服務(認證方法),UserManager(authenticateUser),UserDaoImpl(認證方法)。我在日誌中需要的是如下「在UserService.authenticate中,參數是...,其他一些日誌語句在authenticicate中,在UserManager.authenticate ....在UserDaoImpl.authenticate方法........中, 「然後是其他請求的日誌。在你的方式,我只能記錄一種方法,但這種方法也可以記錄一些東西。我需要按順序在單個請求中生成的所有日誌,以便於調試。 – dmay

+0

你是否說你想要在所有圖層的單個服務請求期間累積所有日誌消息,然後在服務方法退出時一次全部記錄它們? –

+0

是的,但因爲我目前不知道該怎麼做,所以我只實現了日誌記錄的簡單解決方案,記錄了它在應用程序中發生的所有消息 – dmay