2016-02-25 114 views
11

目前在春季啓動1.3中,我們只能將訪問日誌記錄到文件系統中的文件。有沒有什麼方法可以真正使用自定義記錄器(如log4j2)來記錄訪問日誌?如何在春季啓動時使用自定義記錄器記錄訪問日誌

我目前正在使用springow引導,但在檢查spring引導源代碼後,使用正在寫入文件的DefaultAccessLogReceiver初始化下流記錄器。如果可能的話,我想使用AccessLogHandler,並避免編寫一個記錄訪問的Web過濾器。

有沒有簡單的解決方法呢? (除了寫入請求)

回答

5

這種硬編碼不可定製的問題的一個竅門是隱藏課堂,以便用具有相同包裝和名稱的新課程開課。所有你需要做的就是提供一個基於log4j的DefaultAccessLogReceiver 並確保它可以在類庫之前的類加載器中進行搜索。

package io.undertow.server.handlers.accesslog; 

public class DefaultAccessLogReceiver implements AccessLogReceiver { 

    public void logMessage(final String message) { 
     // TODO: log with log4j 
    } 
} 
+0

這是一個有趣的想法,從來沒有想過這個想法。 – Rowanto

0

Spring Boot沒有強制日誌依賴性,除了commons-logging API之外,其中有許多實現可供選擇。要使用Logback,您需要將其包含在內,並在類路徑中記錄一些公共日誌記錄的綁定。最簡單的方法是通過初學者poms,這些都取決於spring-boot-starter-logging。對於Web應用程序,您只需要spring-boot-starter-web,因爲它依賴於日誌啓動器。例如,使用Maven:

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-web</artifactId> 
</dependency> 

Spring Boot具有LoggingSystem抽象,試圖根據類路徑的內容來配置日誌記錄。如果Logback可用,它是首選。

Spring Boot還支持Log4j或Log4j 2用於日誌記錄配置,但前提是其中一個位於類路徑中。如果您使用入門者poms來組裝依賴關係,那意味着您必須排除Logback,然後包含您選擇的Log4j版本。如果您沒有使用啓動器,那麼除了您選擇的Log4j版本之外,您還需要提供公共日誌記錄(至少)。

最簡單的路徑可能是通過初學者poms,即使它需要一些與排除,例如。在Maven的:

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-web</artifactId> 
</dependency> 
<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter</artifactId> 
    <exclusions> 
     <exclusion> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-logging</artifactId> 
     </exclusion> 
    </exclusions> 
</dependency> 
<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-log4j</artifactId> 
</dependency> 

要使用Log4j,2,單純依靠彈簧啓動起動log4j2而不是彈簧引導起動log4j的。

+1

我知道這一點。但它不允許您將訪問日誌記錄到控制檯。並更改其設置。訪問日誌正在使用底層的本地記錄器。 – Rowanto

+0

你可以從你的應用程序中給出你想要做的例子嗎?在我們的應用程序中,我們可以在控制檯上看到日誌 – AGdev