java - 如何为特定领域的属性扩展 Flogger fluent API?
问题描述
假设在我的域中,每个日志语句都出现在 Web 请求的上下文中,并且每个请求都有用户 ID、会话 ID 和购物车 ID 的上下文。
而不是记录如下内容:
logger.atInfo().log("User %s (session: %s) added product %s to cart %s.", userId, sessionId, productId, cartId);
我更喜欢类似以下结构的东西:
logger.atInfo().forUser(userId).withSession(sessionId).withCart(cartId).log("product added to cart: %s", productId);
或者更好
logger.atInfo().forUser(userId).withSession(sessionId).withCart(cartId).product(productId).action(PRODUCT_ADDED).log();
https://google.github.io/flogger/benefits#extensibility似乎暗示这是可能的,但我看不出在哪里。
我希望我的日志记录后端可以将此信息的 JSON 序列化发送到我的 ELK 堆栈。
解决方案
您创建了一个新类(例如UserLogger
),它扩展了 Logger 并实现了您的方法,并使用该类实例化了您的 logger。
public class UserLogger extends FluentLogger {
public UserLogger forUser(Object userId) {
return super.log("User %s");
}
...
}
推荐阅读
- amazon-web-services - 无法在 EC2 实例中进行 SSH
- tesseract - RuntimeError:TSVNotSupported:不支持 TSV 输出。需要 Tesseract >= 3.05(谷歌数据流)
- php - 在 Linkedin API 上创建图像共享
- angular - 使用 defaultIfEmpty() 仍然没有在 Angular canActivate 防护中发出
- ios - 调用出列单元时出列可重用单元崩溃
- reactjs - 如何在 Typescript 模块声明中使用多个通配符?
- java - OpenJPA & Spring Boot 2 & Gradle
- scala - 将数据框转换为列名和值的结构数组
- google-bigquery - BigQuery:验证所有日期的格式为 yyyy-mm-dd
- javascript - 更改 _.groupBy() 结果数据的顺序