另一种方法是创建自定义LogEventFactory
。 A LogEventFactory
用于生成LogEvents。应用程序可以通过将系统属性Log4jLogEventFactory
的值设置为自定义LogEventFactory类的名称来替换标准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);
}
}
我没有看到DefaultLogEventFactory – gstackoverflow
这是在'log4j的 – uniknow
的org.apache.logging.log4j.core.impl' 2.x版本我用1.2.17版本 – gstackoverflow