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