使用正则表达式替换的消息上的 logback %replace 函数是否为打印的每个日志语句编译正则表达式。
似乎 %replace 由于正则表达式的使用而占用了大量的 cpu。
最佳答案
使用%replace
会导致Logback使用ch.qos.logback.core.pattern.ReplacingCompositeConverter
。当模式布局启动时,即 Logback 配置自身时,该转换器将被实例化并启动。
ReplacingCompositeConverter.start()
方法编译模式:
public void start() {
...
regex = optionList.get(0);
pattern = Pattern.compile(regex);
replacement = optionList.get(1);
super.start();
}
然后,每次 Logback 遇到使用包含 %replace
的模式的日志条目时,它都会委托(delegate)给应用该模式的 ReplacingCompositeConverter.transform()
:
protected String transform(E event, String in) {
...
return pattern.matcher(in).replaceAll(replacement);
}
因此,Logback 不会为“打印的每个日志语句”编译 %replace
模式。
关于java - Logback %replace 它是否为每个日志语句编译正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47403126/