私は現在、ライブラリに Log4J を使用していますが、SLF4J の使用に移行して、ライブラリのユーザーがロギング フレームワークを選択できるようにしたいと考えていました。
画面またはログに表示される前に、ログメッセージのテキストを置き換えるために使用する1つのクラスを除いて、すべて問題ありません。
public class FilteringLayout extends PatternLayout {
private static final String REPLACEMENT = "[APIKEY]";
private static Pattern replacementPattern = Pattern.compile("DO_NOT_MATCH");
public static void addReplacementString(String replacementString) {
replacementPattern = Pattern.compile(replacementString);
}
@Override
public String format(LoggingEvent event) {
if (event.getMessage() instanceof String) {
String message = event.getRenderedMessage();
Matcher matcher = replacementPattern.matcher(message);
if (matcher.find()) {
String maskedMessage = matcher.replaceAll(REPLACEMENT);
Throwable throwable = event.getThrowableInformation() != null
? event.getThrowableInformation().getThrowable() : null;
LoggingEvent maskedEvent = new LoggingEvent(event.fqnOfCategoryClass,
LoggerFactory.getLogger(event.getLoggerName()), event.timeStamp,
event.getLevel(), maskedMessage, throwable);
return super.format(maskedEvent);
}
}
return super.format(event);
}
}
純粋な SLF4J でこれを行い、Log4J への依存を取り除くにはどうすればよいですか?
編集: わかりやすくするために、一連の文字列をログ メッセージから自動的に削除してから、下流のロガーに送信するようにしたいと考えています。