0

JDK8 と JDK11 で同じ slf4j ログを取得するにはどうすればよいですか?

私の Java Slf4j ロガー:

log.info("---> {} {}", "When", String.format(matcher.group(1).replaceAll("\\{\\S+\\}", "{%s}").replace("(\\?)", ""), invocation.getArguments()));

JDK8によるJava 8での私のトレース:

---> When I update text {bakery.DemoPage-input_text_field} with {Jenkins T5}

JDK11によるJava 8での私のトレース:

---> When "I update text {bakery.DemoPage-input_text_field} with {Jenkins T5}"

編集:

私はこれを試しますが、同じ結果です:

String message = MessageFormat.format("---> {0} {1}",
                                      stepAnnotation.annotationType().getSimpleName(),
                                      String.format(matcher.group(1).replaceAll("\\{\\S+\\}", "{%s}").replace("(\\?)", ""), invocation.getArguments())
                                     );
log.info(message);

編集(より単純なケースが必要な場合):

log.info("---> {} {}", "When", String.format("I update text {%s} with {%s}", "bakery.DemoPage-input_text_field", "Jenkins T5"));

@Mで編集。Deinum 提案が機能しない

log.info("---> {} " + matcher.group(1).replaceAll("\\{\\S+\\}", "{}").replace("(\\?)", ""), stepAnnotation.annotationType().getSimpleName(), invocation.getArguments());

---> When "I update text [bakery.DemoPage-input_text_field, Jenkins T5, []] with {}"

編集:私は外部置換で他の提案を試みます:

String mes = String.format(matcher.group(1).replaceAll("\\{\\S+\\}", "{%s}").replace("(\\?)", ""), invocation.getArguments());
log.info("---> {} {}", stepAnnotation.annotationType().getSimpleName(), mes);

---> When "I update text {bakery.DemoPage-input_text_field} with {Jenkins T5}"
4

1 に答える 1