Hi,
I'm trying to realize a feature which can programmatically
suppress exception's stacktrace for PatternLayout in ConsoleAppender in Log4j
2.x. Actually it’s very easy to do that in Log4j 1.x, I just extend the
PatternLayout like below:
public class MyPatternLayout extends PatternLayout {
…
Public void
format(LoggingEvent event) {
// according to event to decide if ignores throwable
}
Public Boolean
ignoresThrowable() {
Return ignoresThrowable;
}
…
}
Then replace old PatternLayout with MyPatternLayout.
But in Log4j 2.x(mine is log4j 2.5), PatternLayout has no
such interfaces for usage anymore, the pattern like “%throwable{none}” can
suppress the stacktrace, but it’s not programmatic way I expect.
I guess ThrowablePatternConverter is used to handle the
throwables instead here, but after several attempts, I come up with some
questions:
1 intially, I thought handlesThorwable() in
ThrowablePatternConverter is similar with ignoresThrowable(), but I’m wrong,
it’s not working as I expect, the customized converter as below:
@Plugin(name = "MyThrowablePatternConverter",
category = "Converter")
@ConverterKeys({ "myThrowable" })
public class MyThrowablePatternConverter extends ThrowablePatternConverter
{
protected MyPatternConverter(String name,
String style, String[] options) {
super(name,
style, options);
}
public static MyPatternConverter
newInstance(final String[] options) {
return new
MyPatternConverter("MyThrowable", "throwable", options);
}
@Override
public void format(LogEvent event,
StringBuilder buffer) {
super.format(event, buffer);
}
@Override
public boolean handlesThrowable() {
return false;
}
}
I let handlesThrowable() return false and use
“%myThrowable{full}” in my configuration file, but when I insert the exception
in logging API, the stacktrace is still printed. What should I do to suppress
it?
2 I understand that the Pattern converter must come up with
converter key, but is it possible for user to modify the behavior of built-in
PatternConverter? There are three built-in throwable-related PatternConverter
as I know: ThrowablePatternConverter and its subclass
ExtendedThrowablePatternConverter
and RootThrowablePatternConverter, the according keys are like throwable,
xThrowable and rThrowable, I want to reuse these keys but works in my expected
way. Is that possible?
Thanks in advance.
Best regards.