Java 如何为特定于域的属性扩展Flogger fluent API?
假设在我的域中,每个日志语句都发生在Web请求的上下文中,每个请求都有用户ID、会话ID和购物车ID的上下文 而不是记录以下内容:Java 如何为特定于域的属性扩展Flogger fluent API?,java,logging,Java,Logging,假设在我的域中,每个日志语句都发生在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
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().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();
似乎暗示这是可能的,但我不知道在哪里
我希望我的日志后端可以将此信息的JSON序列化发送到我的ELK堆栈。您可以创建一个新类(例如,UserLogger
),该类扩展记录器并实现您的方法,并使用该类实例化记录器
public类UserLogger扩展了FluentLogger{
公用用户记录器forUser(对象用户ID){
返回super.log(“用户%s”);
}
...
}
FWIW,我了解到还有带有(MetadataKey,T)的,这与我要求的略有不同,但可以完成这项工作。