簡體   English   中英

微服務的集中日志包裝器

[英]centralized logging wrapper for microservices

我有 Spring Boot 微服務,我使用 sl4j 記錄器工廠,在每個服務中我記錄的消息如下:

異常期間的 LOG 錯誤:

LOG.error("service:{};msg:{};ex:{}", serviceName, msg, ex.getMessage(), ex);

驗證期間的日志錯誤:

LOG.error("service:{};msg:{}", serviceName, msg);

日志信息:

LOG.info("service:{};event:{};msg:{}", service, event, message);

這在我所有的微服務中都很常見,使用包裝器來集中這些日志消息嗎? 或者將包裝器放在單獨的 maven 應用程序中並將依賴項添加為 jar ?

我想知道最好的設計是什么,代碼片段會有所幫助。

一般來說,將關注點、領域邏輯與基礎設施分開是個好主意。

例如,如果您將服務部署為 AWS Lambda,您可以將其視為一種部署。

然后,您應該創建一個單獨的 Maven 模塊,其中僅包含您的 Lambda 處理程序的代碼。 此外,您可以擁有用於 Azure 函數或 Spring Boot 應用程序的模塊。 您可以在 Spring Context 的幫助下將它們粘合在一起。

上面提到的日志記錄將成為部署模塊的一部分,因為域不應該知道任何關於“服務”的信息。

如果您的錯誤處理很復雜,您可以為其創建一個 lib 模塊。

AWS Lambda 示例:

public class Hello implements RequestHandler<Object, String> {
    private DomainLogic domain;
    private ErrorHandling errHandling;

    Hello(DomainLogic domain, ErrorHandling errHandling) {
        this.domain = domain;
        this.errHandling = errHandling;
    }

    @Override
    public String handleRequest(Object input, Context context) {
        try {
           return domain.sayHello(input);
        }
        catch  (Exception e) {
            errHandling.handle(e);
            throw e;
        }
    }
}

暫無
暫無

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

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