簡體   English   中英

Spring Boot中觸發log4j2的logger.error()時觸發自定義方法

[英]Trigger custom method when log4j2's logger.error() is triggered in Spring Boot

我正在使用帶有 log4j2 的 Spring Boot - 當logger.error(...)被觸發時,我想在“@Service”類中觸發一個自定義方法。

例如,

@Service
public class Foo {
    private final Logger logger = LogManager.getLogger(getClass());
    ...
    public void doSomething() {
        try {
            ...
        }
        catch (Exception e) {
            logger.error("Error!", e); // When `error` is triggered...
        }
    }
}

// Other class
@Service
public class Bar {
    @Autowired private NotificationService notificationService;

    public void triggeredOnError() { // I'd like to trigger this method
        this.notificationService.notifySomething();
    }
}

我想知道這在帶有 Spring Boot 的 log4j2 中是可能的。 問題是,我只想觸發默認方法logger.error(...)因為我不想更改 log4j2 的默認行為 我研究了一下 - filteradapter可能是這里的解決方案,但我不確定如何實現這一點。 請幫幫我!

雖然 appender 會像 Mark 建議的那樣工作,但我會實現一個過濾器。 過濾器可以放置在 Log4j 2 中的四個不同位置,並且可以選擇強制記錄日志事件、強制不記錄它或繼續正常評估是否應該記錄它。 但是過濾器總是可以用 onMatch=NEUTRAL 和 onMismatch=NEUTRAL 來配置,這樣它對是否處理日志事件沒有影響,但允許其他一些處理發生。 此外,過濾器比 Appender 更容易編寫。

您可以在http://logging.apache.org/log4j/2.x/manual/extending.html#Filters找到示例過濾器

但是,您不應該在過濾器中做的是將其用作將日志事件寫入某個目的地的一種方式。 這正是 Appenders 的用途。

IMO 實現這一目標的最簡單方法是創建一個特殊的 appender,並在 Log4j2 配置中將其與您選擇的記錄器相關聯(或者,如果您想要“全局”配置,則可能與所有記錄器相關聯)。

然后,您可以使用“appender 過濾器”來調用僅在出現錯誤消息時才調用的 appender。

唯一的潛在問題是從 log4j2 appender 聯系 spring bean。 閱讀此 SO 線程以了解您如何在技術上實現這一目標。

這種方法的好處是您無需更改框架,而是利用它已經提供的配置選項。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM