logging-log4j-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Matt Sicker (JIRA)" <j...@apache.org>
Subject [jira] [Assigned] (LOG4J2-1217) Layout option to limit length of text
Date Thu, 03 Mar 2016 03:56:18 GMT

     [ https://issues.apache.org/jira/browse/LOG4J2-1217?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Matt Sicker reassigned LOG4J2-1217:
-----------------------------------

    Assignee: Matt Sicker

> Layout option to limit length of text
> -------------------------------------
>
>                 Key: LOG4J2-1217
>                 URL: https://issues.apache.org/jira/browse/LOG4J2-1217
>             Project: Log4j 2
>          Issue Type: Improvement
>          Components: Pattern Converters
>    Affects Versions: 2.4.1
>            Reporter: Thies Wellpott
>            Assignee: Matt Sicker
>
> PatternLayout does not provide the ability to limit the length of the text without space
padding (with the numbers directly after the %).
> The following Converter provides this possibility:
> {{%maxLen\{pattern}\{max. length\}}}, e.g. {{%maxLen\{%m}\{90\}}}
> use {{%maxLen}} or {{%maxLength}}
> {code:title=MaxLengthConverter.java}
> package de.ittw.log4j;
> import java.util.List;
> import org.apache.logging.log4j.core.LogEvent;
> import org.apache.logging.log4j.core.appender.AbstractAppender;
> 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.PatternConverter;
> import org.apache.logging.log4j.core.pattern.PatternFormatter;
> import org.apache.logging.log4j.core.pattern.PatternParser;
> /**
>  * Max length pattern converter. Limit contained text to a maximum length.
>  * On invalid length the default value 100 is used (and an error message is logged).
>  * If max length is greater than 20, an abbreviated text will get ellipsis ("...") appended.
>  * Example usage (for email subject):
>  *    "%maxLen{[AppName, ${hostName}, ${web:contextPath}] %p: %c{1} - %m%notEmpty{ =>%ex{short}}}{160}"
>  *
>  * @author Thies Wellpott
>  */
> @Plugin(name = "maxLength", category = PatternConverter.CATEGORY)
> @ConverterKeys({ "maxLength", "maxLen" })
> public final class MaxLengthConverter extends LogEventPatternConverter
> {
>     /**
>      * Gets an instance of the class.
>      *
>      * @param config
>      *            The current Configuration.
>      * @param options
>      *            pattern options, an array of two elements: pattern, max length (defaults
to 100 on invalid value).
>      * @return instance of class.
>      */
>     public static MaxLengthConverter newInstance(final Configuration config, final String[]
options) {
>         if (options.length != 2) {
>             LOGGER.error("Incorrect number of options on maxLength: expected 2 received
{}: {}", options.length, options);
>             return null;
>         }
>         if (options[0] == null) {
>             LOGGER.error("No pattern supplied on maxLength");
>             return null;
>         }
>         if (options[1] == null) {
>             LOGGER.error("No length supplied on maxLength");
>             return null;
>         }
>         final PatternParser parser = PatternLayout.createPatternParser(config);
>         final List<PatternFormatter> formatters = parser.parse(options[0]);
>         return new MaxLengthConverter(formatters, AbstractAppender.parseInt(options[1],
100));
>     }
>     private final List<PatternFormatter> formatters;
>     private final int maxLength;
>     /**
>      * Construct the converter.
>      *
>      * @param formatters
>      *            The PatternFormatters to generate the text to manipulate.
>      * @param maxLength
>      *            The max. length of the resultung string. Ellipses ("...") is appended
on shorted string, if greater than 20.
>      */
>     private MaxLengthConverter(final List<PatternFormatter> formatters, final int
maxLength) {
>         super("MaxLength", "maxLength");
>         this.maxLength = maxLength;
>         this.formatters = formatters;
>         LOGGER.trace("new MaxLengthConverter with {}", maxLength);
>     }
>     @Override
>     public void format(final LogEvent event, final StringBuilder toAppendTo) {
>         final StringBuilder buf = new StringBuilder();
>         for (final PatternFormatter formatter : formatters) {
>             formatter.format(event, buf);
>             if (buf.length() > maxLength) {        // stop early
>                 break;
>             }
>         }
>         if (buf.length() > maxLength) {
>             buf.setLength(maxLength);
>             if (maxLength > 20) {        // only append ellipses if length is not
very short
>                 buf.append("...");
>             }
>         }
>         toAppendTo.append(buf);
>     }
> }
> {code}
> You may include this in log4j2



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-dev-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-dev-help@logging.apache.org


Mime
View raw message