You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@logging.apache.org by "Jakub (JIRA)" <ji...@apache.org> on 2018/06/08 05:28:00 UTC

[jira] [Comment Edited] (LOG4J2-2339) format multiple conversion characters with one conversion specifier

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

Jakub edited comment on LOG4J2-2339 at 6/8/18 5:27 AM:
-------------------------------------------------------

Thx very much for help.
 This is what worked for me:
{code:java}
<property name="pattern">%d{yyyy-MM-dd HH:mm:ss.SSS} | %-5.5p | %-15.15t | %-70.70CML | %-10.70X | %msg%n</property>{code}
{code:java}
import org.apache.logging.log4j.core.LogEvent;
import org.apache.logging.log4j.core.config.plugins.Plugin;
import org.apache.logging.log4j.core.pattern.ConverterKeys;
import org.apache.logging.log4j.core.pattern.NamePatternConverter;
import org.apache.logging.log4j.core.pattern.PatternConverter;

@Plugin(name = "ClassMethodLinePatternConverter", category = PatternConverter.CATEGORY)
@ConverterKeys({"CML", "classmethodline"})
public class ClassMethodLinePatternConverter extends NamePatternConverter {

    private static final String NA = "?";

    private ClassMethodLinePatternConverter(
            final String[] options) {
        super("Class Name", "class name", options);
    }

    public static ClassMethodLinePatternConverter newInstance(final String[] options) {
        return new ClassMethodLinePatternConverter(options);
    }

    /**
     * Format a logging event.
     *
     * @param event      event to format.
     * @param toAppendTo string buffer to which class name, method name and line will be appended.
     */
    @Override
    public void format(final LogEvent event, final StringBuilder toAppendTo) {
        final StackTraceElement element = event.getSource();
        if (element == null) {
            toAppendTo.append(NA);
        } else {
          toAppendTo.append(element.getClassName()).append(".").append(element.getMethodName()).append(":").append(element.getLineNumber());
        }
    }

}
{code}
 

 


was (Author: jakkub):
Thx very much for help.
This is what worked for me:

{code:java}
import org.apache.logging.log4j.core.LogEvent;
import org.apache.logging.log4j.core.config.plugins.Plugin;
import org.apache.logging.log4j.core.pattern.ConverterKeys;
import org.apache.logging.log4j.core.pattern.NamePatternConverter;
import org.apache.logging.log4j.core.pattern.PatternConverter;

@Plugin(name = "ClassMethodLinePatternConverter", category = PatternConverter.CATEGORY)
@ConverterKeys({"CML", "classmethodline"})
public class ClassMethodLinePatternConverter extends NamePatternConverter {

    private static final String NA = "?";

    private ClassMethodLinePatternConverter(
            final String[] options) {
        super("Class Name", "class name", options);
    }

    public static ClassMethodLinePatternConverter newInstance(final String[] options) {
        return new ClassMethodLinePatternConverter(options);
    }

    /**
     * Format a logging event.
     *
     * @param event      event to format.
     * @param toAppendTo string buffer to which class name, method name and line will be appended.
     */
    @Override
    public void format(final LogEvent event, final StringBuilder toAppendTo) {
        final StackTraceElement element = event.getSource();
        if (element == null) {
            toAppendTo.append(NA);
        } else {
          toAppendTo.append(element.getClassName()).append(".").append(element.getMethodName()).append(":").append(element.getLineNumber());
        }
    }

}
{code}

 

 

> format multiple conversion characters with one conversion specifier
> -------------------------------------------------------------------
>
>                 Key: LOG4J2-2339
>                 URL: https://issues.apache.org/jira/browse/LOG4J2-2339
>             Project: Log4j 2
>          Issue Type: New Feature
>          Components: Core, Pattern Converters
>    Affects Versions: 2.8.2
>            Reporter: Jakub
>            Priority: Major
>
> I am writing on suggestion from [~remkop@yahoo.com] in [https://stackoverflow.com/questions/50311762/log4j-set-class-and-method-summary-length-in-pattern] 
>  
> I would like to format multiple conversion characters with one conversion specifier.
> As Remko explained, it is currently not possible
> _No, each modifier applies to one conversion. But Log4j could add a new converter that means what you want. You can propose such a new converter on the mailing list or issue tracker_
> Would it be a useful feature to add to log4j2 ? Would it be hard to implement ?
>  
> EG
> I would like to set summary length of class.method.line with
> %-60.60CML
> It's not possible now. Below what doc states
> [https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PatternLayout.html]
> {quote}Each conversion specifier starts with a percent sign (%) and is followed by optional format modifiers and a conversion charact*er*. The conversion charact*er* specifies the type of data
> The pattern parser knows when it has reached the end of a conversion specifier when it reads a conversion charact*er*.
> {quote}
> It writes only about single conversion character, I would like to modify multiple conversion characters with one conversion specifier.
>  



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)