You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4j-user@logging.apache.org by John Smith <ja...@gmail.com> on 2013/05/01 22:41:13 UTC

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

Re: Custom Converter plugin won't load.

Posted by John Smith <ja...@gmail.com>.
Yeah I tried. :(
On 2013-05-01 7:37 PM, "Remko Popma" <re...@yahoo.com> wrote:

> Hi John,
>
> I don't have an immediate answer for you, but
> I've created JIRA LOG4J2-232 to track this issue.
>
> (Have you tried removing the trailing comma in
> packages="com.xxx.log4j.converters,">
>
> in the log4j2.xml config?)
>
> Remko
>
>
> ________________________________
>  From: John Smith <ja...@gmail.com>
> To: log4j-user@logging.apache.org
> 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

Re: Custom Converter plugin won't load.

Posted by Remko Popma <re...@yahoo.com>.
Hi John,

I don't have an immediate answer for you, but
I've created JIRA LOG4J2-232 to track this issue.

(Have you tried removing the trailing comma in 
packages="com.xxx.log4j.converters,">

in the log4j2.xml config?)

Remko


________________________________
 From: John Smith <ja...@gmail.com>
To: log4j-user@logging.apache.org 
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