[ 
https://issues.apache.org/jira/browse/LOG4J2-232?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13649357#comment-13649357
 ] 

Remko Popma commented on LOG4J2-232:
------------------------------------

I'm beginning to suspect this may be a classpath or class loader issue.

I created the test program below, and ran it with your original log4j2.xml. I 
did not use PluginManager to generate a Log4jPlugins.dat file, because I wanted 
to try the "packages" first.
It seemed to work fine... It created a file C:/Temp/XXXJava/logs/vertx.log with 
this output:

00:13:10.821 [main] INFO  com.xxx.log4j.converters.MaskTest - test

// this is the test program
package com.xxx.log4j.converters;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class MaskTest {
    public static void main(String[] args) {
        Logger logger = LogManager.getLogger(MaskTest.class);
        logger.info("test");
    }
}

and this was the StatusLogger output. It contains the debug print statements in 
your plugin code.

2013-05-06 00:13:10,758 DEBUG Found Plugin Map at 
jar:file:/C:/Users/remko/workspace/log4j-perf/lib/log4j-core-2.0-beta5.jar!/org/apache/logging/log4j/core/config/plugins/Log4j2Plugins.dat
2013-05-06 00:13:10,766 DEBUG Generated plugins in 0.008124727 seconds
2013-05-06 00:13:10,768 DEBUG Generated plugins in 0.001784566 seconds
2013-05-06 00:13:10,770 DEBUG Generated plugins in 0.001285298 seconds
2013-05-06 00:13:10,772 DEBUG Generated plugins in 0.001166971 seconds
2013-05-06 00:13:10,773 DEBUG Generated plugins in 0.001181460 seconds
2013-05-06 00:13:10,775 DEBUG Generated plugins in 0.001124711 seconds
2013-05-06 00:13:10,777 DEBUG Generated plugins in 0.001131956 seconds
2013-05-06 00:13:10,779 DEBUG Generated plugins in 0.001715140 seconds
2013-05-06 00:13:10,781 DEBUG Generated plugins in 0.001268998 seconds
2013-05-06 00:13:10,792 DEBUG Calling createLayout on class 
org.apache.logging.log4j.core.layout.PatternLayout for element PatternLayout 
with params(pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - 
%mask{%msg}%n", 
Configuration(C:\Users\remko\workspace\log4j-perf\bin\log4j2.xml), null, 
charset="null")
2013-05-06 00:13:10,794 DEBUG Generated plugins in 0.001300391 seconds
There...
Here...
2013-05-06 00:13:10,797 DEBUG Calling createAppender on class 
org.apache.logging.log4j.core.appender.FastFileAppender for element FastFile 
with params(fileName="C:/Temp/XXXJava/logs/vertx.log", append="false", 
name="FILE", immediateFlush="true", suppressExceptions="null", 
PatternLayout(%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %mask{%msg}%n), 
null, advertise="null", advertiseURI="null", 
Configuration(C:\Users\remko\workspace\log4j-perf\bin\log4j2.xml))
2013-05-06 00:13:10,800 DEBUG Starting FastFileManager 
C:/Temp/XXXJava/logs/vertx.log
2013-05-06 00:13:10,801 DEBUG Calling createLayout on class 
org.apache.logging.log4j.core.layout.PatternLayout for element PatternLayout 
with params(pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - 
%mask{%msg}%n", 
Configuration(C:\Users\remko\workspace\log4j-perf\bin\log4j2.xml), null, 
charset="null")
There...
Here...
2013-05-06 00:13:10,803 DEBUG Calling createAppender on class 
org.apache.logging.log4j.core.appender.ConsoleAppender for element Console with 
params(PatternLayout(%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - 
%mask{%msg}%n), null, target="SYSTEM_OUT", name="Console", follow="null", 
suppressExceptions="null")
2013-05-06 00:13:10,804 DEBUG Jansi is not installed
2013-05-06 00:13:10,805 DEBUG Calling createAppenders on class 
org.apache.logging.log4j.core.config.plugins.AppendersPlugin for element 
appenders with params(appenders={FILE, Console})
2013-05-06 00:13:10,806 DEBUG Generated plugins in 0.001180253 seconds
2013-05-06 00:13:10,808 DEBUG Calling createAppenderRef on class 
org.apache.logging.log4j.core.config.AppenderRef for element appender-ref with 
params(ref="Console", level="null", null)
2013-05-06 00:13:10,809 DEBUG Calling createAppenderRef on class 
org.apache.logging.log4j.core.config.AppenderRef for element appender-ref with 
params(ref="FILE", level="null", null)
2013-05-06 00:13:10,811 DEBUG Calling createLogger on class 
org.apache.logging.log4j.core.config.LoggerConfig$RootLogger for element root 
with params(additivity="null", level="DEBUG", includeLocation="null", 
appender-ref={org.apache.logging.log4j.core.config.AppenderRef@7b2884e0, 
org.apache.logging.log4j.core.config.AppenderRef@212bcd4b}, properties={}, 
Configuration(C:\Users\remko\workspace\log4j-perf\bin\log4j2.xml), null)
2013-05-06 00:13:10,812 DEBUG Calling createLoggers on class 
org.apache.logging.log4j.core.config.plugins.LoggersPlugin for element loggers 
with params(loggers={root})
2013-05-06 00:13:10,813 DEBUG Reconfiguration completed
Where...SimpleMessage[message=test]
00:13:10.821 [main] INFO  com.xxx.log4j.converters.MaskTest - test
Where...SimpleMessage[message=test]
2013-05-06 00:13:10,824 DEBUG Shutting down FastFileManager 
C:/Temp/XXXJava/logs/vertx.log
2013-05-06 00:13:10,825 DEBUG Shutting down OutputStreamManager SYSTEM_OUT


So, I am beginning to think this is a classpath or class loader issue.

Can you try and run the standalone test program with the plugin and log4j2.xml 
config you provided in the original bug report?
If this works, then the issue has something to do with vertx.io.

Did you put the jar file that contains the plugin in the same location as the 
log4j-api-2.0-xxx.jar and log4j-core-2.0-xxx.jar files?
If your plugin is loaded by a different class loader then log4j may not be able 
to see it.
                
> Custom Converter plugin won't load.
> -----------------------------------
>
>                 Key: LOG4J2-232
>                 URL: https://issues.apache.org/jira/browse/LOG4J2-232
>             Project: Log4j 2
>          Issue Type: Bug
>    Affects Versions: 2.0-beta5
>            Reporter: Remko Popma
>            Assignee: Remko Popma
>
> From: John Smith <[email protected]>
> To: [email protected] 
> Sent: Thursday, May 2, 2013 5:41 AM
> Subject: Custom Converter plugin won't load.
> Using log4j2-beta5
> I'm writing a custom PatternConverter to mask logs for such things as
> Credit Card and Card Security Code and some additional elements.
> My converter looks like so....
> package com.xxx.log4j.converters;
> import java.util.List;
> import java.util.regex.Pattern;
> import org.apache.logging.log4j.core.LogEvent;
> import org.apache.logging.log4j.core.config.Configuration;
> import org.apache.logging.log4j.core.config.plugins.Plugin;
> import org.apache.logging.log4j.core.layout.PatternLayout;
> import org.apache.logging.log4j.core.pattern.ConverterKeys;
> import org.apache.logging.log4j.core.pattern.LogEventPatternConverter;
> import org.apache.logging.log4j.core.pattern.PatternFormatter;
> import org.apache.logging.log4j.core.pattern.PatternParser;
> @Plugin(name = "MaskConverter", type = "Converter")
> @ConverterKeys({"ma", "mask" })
> public class MaskConverter extends LogEventPatternConverter  {
> private final List<PatternFormatter> formatters;
> private final Pattern ccPattern;
> private final Pattern cvnPattern;
> public static final String CARD_PATTERN =
> "(AcctNumber|AcctNumber2)([=\\^])([0-9]+)([0-9]{4})";
> public static final String CARD_MASK = "$1$2********$4";
> public static final String CVN_PATTERN = "(Cvn)([=\\^])([0-9]{3,4})";
> public static final String CVN_MASK = "$1$2****";
>     private MaskConverter(final List<PatternFormatter> formatters, final
> Pattern ccPattern, final Pattern cvnPattern) {
>         super("ma", "mask");
>         System.out.println("Here...");
>         this.formatters = formatters;
>         this.ccPattern = ccPattern;
>         this.cvnPattern = cvnPattern;
>     }
>     public static MaskConverter newInstance(final Configuration config,
> final String[] options) {
>         System.out.println("There...");
>     if (options.length != 1) {
>             LOGGER.error("Incorrect number of options on mask. Expected 1
> received " + options.length);
>             return null;
>         }
>         final Pattern ccPattern = Pattern.compile(CARD_PATTERN,
> Pattern.CASE_INSENSITIVE);
>         final Pattern cvnPattern = Pattern.compile(CVN_PATTERN,
> Pattern.CASE_INSENSITIVE);
>         final PatternParser parser =
> PatternLayout.createPatternParser(config);
>         final List<PatternFormatter> formatters = parser.parse(options[0]);
>         return new MaskConverter(formatters, ccPattern, cvnPattern);
>     }
> @Override
> public void format(final LogEvent event, final StringBuilder toAppendTo) {
>         System.out.println("Where..." + event.getMessage());
> final StringBuilder buf = new StringBuilder();
> for (final PatternFormatter formatter : formatters) {
>             formatter.format(event, buf);
>         }
> toAppendTo.append(ccPattern.matcher(cvnPattern.matcher(buf.toString()).replaceAll(CVN_MASK)).replaceAll(CARD_MASK));
> }
> }
> And my log4j2.xml looks like...
> <?xml version="1.0" encoding="UTF-8"?>
> <configuration status="TRACE" monitorInterval="5"
> packages="com.xxx.log4j.converters,">
> <appenders>
> <FastFile name="FILE" fileName="C:/Temp/XXXJava/logs/vertx.log"
> immediateFlush="false" append="false">
> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} -
> %mask{%msg}%n"/>
> </FastFile>
> <Console name="Console" target="SYSTEM_OUT">
> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} -
> %mask{%msg}%n"/>
> </Console>
> </appenders>
> <loggers>
> <root level="DEBUG">
> <appender-ref ref="Console"/>
> <appender-ref ref="FILE"/>
> </root>
> </loggers>
> </configuration>
> But it doesn't seem to load the plugin I don't see any of my print
> statements in the console and all I see is the word ask appended to my log
> messages.
> Have I missed something

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to