另一种方法是创建一个定制的LogEventFactory
. ALogEventFactory
用于生成 LogEvents。LogEventFactory
应用程序可以通过将系统属性的值设置为Log4jLogEventFactory
自定义 LogEventFactory 类的名称来替换标准。
将被调用以创建实例的LogEvent
方法如下:
LogEvent createEvent(String loggerName,
org.apache.logging.log4j.Marker marker,
String fqcn,
org.apache.logging.log4j.Level level,
org.apache.logging.log4j.message.Message data,
List<Property> properties,
Throwable t)
并且DefaultLogEventFactory
是 log4j 的基本实现。在您的情况下,您可以扩展基本实现并转义消息,然后调用默认实现。它会变成这样:
public class MyCustomLogEventFactory extends DefaultLogEventFactory {
/**
* Creates a log event.
*
* @param loggerName The name of the Logger.
* @param marker An optional Marker.
* @param fqcn The fully qualified class name of the caller.
* @param level The event Level.
* @param data The Message.
* @param properties Properties to be added to the log event.
* @param t An optional Throwable.
* @return The LogEvent.
*/
@Override
public LogEvent createEvent(final String loggerName, final Marker marker,
final String fqcn, final Level level, final Message data,
final List<Property> properties, final Throwable t) {
super.createEvent(loggerName, marker, fqcn, level, StringEscapeUtils.escapeJava(data != null ? data.toString() : null), properties, t);
}
}