java - Logback %replace 它是否为每个日志语句编译正则表达式?

标签 java logging logback

使用正则表达式替换的消息上的 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/

相关文章:

java - 使用 ConsoleAppender 不会使用 Logback 打印日志

Java的默认接口(interface)方法与私有(private)实例方法冲突?

java - 使用 java 为 Jtable 的每一行添加列表框

java - 使用 c3p0 在 Hibernate 中进行客户端堆栈跟踪

java - Selenium chromedriver 禁用日志记录或将其重定向 java

asp.net - 在日志文件中 : s c sc cs? 是什么意思

java - 如何在Java中捕获同时执行多个查询的响应时间?

java - org.apache.http.impl.execchain.RequestAbortedException : Request aborted

java - 如何使用 slf4j 记录 postgres 驱动程序消息?

java - 如何将 logback 操作记录到文件中?