[
https://issues.apache.org/jira/browse/LOG4J2-2529?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17453702#comment-17453702
]
Ralph Goers commented on LOG4J2-2529:
-------------------------------------
I must be missing something. The newInstance method is a static member of your
Converter. It should be declared public. The constructor in
LogEventPatternConverter is protected as it can only be accessed by classes
that extend it. I do not understand why you would have to put this into the
org.apache package as PatternParser should have no problem calling a public
newInstance method.
Also, I wouldn't have implemented masking this way. I would have done it as
%mask{%m}{ssn,${ONLY_LAST_FOUR},creditCard,${ONLY_LAST_FOUR}} where
ONLY_LAST_FOUR is a property that contains a regex to mask everything but the
last 4 digits. This would not need to extend the LogEventPatternConverter as
the resolved message would be passed to the MaskConverter.
> Cannot extend LogPatternConverter
> ---------------------------------
>
> Key: LOG4J2-2529
> URL: https://issues.apache.org/jira/browse/LOG4J2-2529
> Project: Log4j 2
> Issue Type: Bug
> Components: Core
> Affects Versions: 2.9.1, 2.11.1
> Reporter: David H
> Priority: Minor
> Labels: log4j2-newbie
>
> It seems that when I want to extend LogPatternConverter, you quickly get an
> IllegalAccessException. The source of that problem seems to be the method
> PatternParser.finalizeConverter().
> On one hand I should be able to create the static newInstance method in my
> newly created class (variable "newInstanceMethod"). Otherwise the method is
> not assigned:
> {code:java}
> final Method[] methods = converterClass.getDeclaredMethods();
> Method newInstanceMethod = null;
> for (final Method method : methods) {
> if (Modifier.isStatic(method.getModifiers()) &&
> method.getDeclaringClass().equals(converterClass)
> && method.getName().equals("newInstance")) {
> if (newInstanceMethod == null) {
> newInstanceMethod = method;
> } else if
> (method.getReturnType().equals(newInstanceMethod.getReturnType())) {
> LOGGER.error("Class " + converterClass + " cannot
> contain multiple static newInstance methods");
> return null;
> }
> }
> }{code}
> On the other hand, "newInstanceMethod.invoke" is called without calling
> newInstanceMethod.setAccessible(true)
> {code:java}
> final Object newObj = newInstanceMethod.invoke(null, parms);
> {code}
> But your extended class would normally be ourside the package of
> PatternParser. Triggering an IllegalAccessException.
> A possible workaround is to put your new class in the package
> org.apache.logging.log4j.core.pattern yourself. But that is not how we
> normally extend classes ;).
--
This message was sent by Atlassian Jira
(v8.20.1#820001)