我有spring boot microservices,我使用sl4j logger工厂,在每个服务中,我都记录如下消息:
异常期间的LOG错误:
LOG.error("service:{};msg:{};ex:{}", serviceName, msg, ex.getMessage(), ex);
验证期间出现LOG错误:
LOG.error("service:{};msg:{}", serviceName, msg);
日志信息:
LOG.info("service:{};event:{};msg:{}", service, event, message);
这在我所有的微服务中都很常见,是否使用包装器将这些日志消息集中化?还是将包装器放在单独的Maven应用程序中,并将依赖项添加为jar?
我想知道最好的设计是什么,代码片段会有所帮助。
答案 0 :(得分:2)
通常,将关注点,领域逻辑与基础架构分开是一个好主意。
例如,如果您将服务部署为AWS Lambda,则可以将其视为一种部署。
然后,您应该创建一个单独的Maven模块,仅在其中放置Lambda处理程序的代码。此外,您可以具有一个用于Azure功能或Spring Boot应用程序的模块。您可以在Spring Context的帮助下将它们粘合在一起。
因此,您的日志记录将成为部署模块的一部分,因为域对“服务”一无所知。
如果错误处理很复杂,则可以为其创建一个lib模块。
AWS Lambda示例:
User = require('./models/user');
Cars = require('./models/cars');
Orders = require('./models/orders');
app.get('/userInfo', function(req, res) {
let outPut = {}
/*
* Get data from MongoDB
*/
// A
User.countUsers()
.then(count => {
outPut.coutUsers = count;
// B
return Cars.countCars();
})
.then(count => {
outPut.coutCars = count;
// C
return Orders.countOrders();
})
.then(count => {
outPut.coutOrders = count;
// Finally return a response
res.status(200);
res.json(outPut);
})
.catch(err => {
// Catch errors in between the chains
// Return server error (Depends on your way)
res.status(500);
})
});