Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用于微服务的集中式日志包装器_Java_Spring Boot_Logging_Error Handling_Microservices - Fatal编程技术网

Java 用于微服务的集中式日志包装器

Java 用于微服务的集中式日志包装器,java,spring-boot,logging,error-handling,microservices,Java,Spring Boot,Logging,Error Handling,Microservices,我有spring boot microservices,我使用sl4j logger factory,在每个服务中,我记录消息如下: 异常期间的日志错误: LOG.error("service:{};msg:{};ex:{}", serviceName, msg, ex.getMessage(), ex); 验证期间的日志错误: LOG.error("service:{};msg:{}", serviceName, msg); 日志信息: LOG.info("service:{};event

我有spring boot microservices,我使用sl4j logger factory,在每个服务中,我记录消息如下:

异常期间的日志错误:

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引导应用程序提供一个模块。您可以借助Spring上下文将它们粘合在一起

上面提到的日志记录将成为部署模块的一部分,因为域不应该知道关于“服务”的任何信息

如果错误处理很复杂,可以为其创建一个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;
        }
    }
}
public类Hello实现RequestHandler{
私有域逻辑域;
私人错误处理;
你好(域逻辑域,错误处理错误处理){
this.domain=域;
this.errHandling=errHandling;
}
@凌驾
公共字符串handleRequest(对象输入、上下文){
试一试{
返回domain.sayHello(输入);
}
捕获(例外e){
错误处理。处理(e);
投掷e;
}
}
}