Java 用于微服务的集中式日志包装器
我有spring boot microservices,我使用sl4j logger factory,在每个服务中,我记录消息如下: 异常期间的日志错误: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
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;
}
}
}