Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.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 如何为特定于域的属性扩展Flogger fluent API?_Java_Logging - Fatal编程技术网

Java 如何为特定于域的属性扩展Flogger fluent API?

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

假设在我的域中,每个日志语句都发生在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().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)的
,这与我要求的略有不同,但可以完成这项工作。