gpt4 book ai didi

java - 如何只转义消息而不是 log4j 中的所有行?

转载 作者:搜寻专家 更新时间:2023-11-01 00:55:09 25 4
gpt4 key购买 nike

我有以下 PatternLayout:

public class EscapedEnhancedPatternLayout extends EnhancedPatternLayout {
@Override
public String format(LoggingEvent event) {
return StringEscapeUtils.escapeJava(super.format(event));
}
}

但这会转义完整的日志记录行。

我想要这样的东西,但只是为了消息。

但是 LoggingEvent 类没有 setMessagesetRenderedMessage 方法。

而且我在 LoggingEvent 中没有看到复制构造函数。如果 LoggingEvent 有复制构造函数,我可以从 LoggingEvent 继承并覆盖下面提到的方法。

请告诉我如何解决我的问题。

最佳答案

没错,没有LoggingEvent(LoggingEvent other) 构造函数,但您可以将事件的值传递给LoggingEvent constructor在你的 format 方法中是这样的:

@Override
public String format(LoggingEvent event) {
Object msgObj = event.getMessage();

LoggingEvent newEvent = new LoggingEvent(
event.getFQNOfLoggerClass(),
event.getLogger(), event.getTimeStamp(),
event.getLevel(),
StringEscapeUtils.escapeJava(msgObj != null ? msgObj.toString() : null),
event.getThreadName(),
event.getThrowableInformation(),
event.getNDC(),
event.getLocationInformation(),
event.getProperties());

return super.format(newEvent);
}

这将从旧的所有值集创建一个新的 LoggingEventStringEscapeUtils.escapeJava 方法现在可以修改 message 而不会影响其他属性,您仍然可以使用 super.format

关于java - 如何只转义消息而不是 log4j 中的所有行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36627034/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com