我有以下PatternLayout:
public class EscapedEnhancedPatternLayout extends EnhancedPatternLayout {
@Override
public String format(LoggingEvent event) {
return StringEscapeUtils.escapeJava(super.format(event));
}
}
但这会转出完整的日志记录行。
我想要这样的东西,但仅用于消息传递。
但是
LoggingEvent
类没有setMessage
和setRenderedMessage
方法。而且我在
LoggingEvent
上没有看到复制构造函数。如果LoggingEvent
具有复制构造函数,我可以从LoggingEvent
继承并覆盖下面提到的方法。请告诉我如何解决我的问题。
最佳答案
没错,没有LoggingEvent(LoggingEvent other)
构造函数,但是您可以通过format
方法将事件的值传递给LoggingEvent constructor,如下所示:
@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);
}
这将从旧的
LoggingEvent
创建一个新的StringEscapeUtils.escapeJava
,并设置所有值。 message
方法现在可以修改super.format
而不影响其他属性,并且您仍然可以使用ojit_code