logging-log4j-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Matt Sicker <boa...@gmail.com>
Subject Re: Log4J2 PatternConverter for adding a custom field to the log record
Date Sun, 10 Sep 2017 17:24:16 GMT
Well, pid might not be a great example considering there's already a
converter for it. Any global variable like that can generally be
implemented via a converter like that, or potentially via various lookups <
https://logging.apache.org/log4j/2.x/manual/lookups.html>, especially when
they're available via conventional means such as environment variables,
system properties, arguments to main(), etc. For an arg-less converter, I
believe you still need to accept a String[] as your newInstance factory
method, though you can ignore its arguments.

I wouldn't suggest extending LogEvent unless you're trying to implement
serialization logic for binary logging or similar (see for example the
Jackson-annotated versions of LogEvent for serializing to JSON/XML/YAML).

On 10 September 2017 at 12:08, Asma Zinneera Jabir <azinneera@gmail.com>
wrote:

> Does that mean I don't have to use options here? I can use "pid" in the
> constructor which works fine. But then there is no use of the options
> String array. Is this a good practice or is there a better way to implement
> appending a custom field to the log event?
>
> On Sep 10, 2017 10:05 PM, "Matt Sicker" <boards@gmail.com> wrote:
>
> The curly braces in this case would be when you use %p{foo}{bar} or
> %pId{foo}{bar}. The String[] would be {"foo", "bar"}. The @ConverterKeys
> specifies the name(s) of the %converterKey part. So if you specified just
> %p or %pId in your pattern, you'd get an empty String[].
>
> On 10 September 2017 at 01:44, Asma Zinneera Jabir <azinneera@gmail.com>
> wrote:
>
> > I want to append a custom field to the log record and used the
> > LogEventPatternConverter for this. Referred the documentation
> > <https://logging.apache.org/log4j/2.x/manual/extending.
> > html#PatternConverters>
> > and
> > wrote the below code.
> > Now the options happen to be a zero length array.
> > The documentation says "String array are the values that are specified
> > within the curly braces that can follow the converter key". Isn't this
> the
> > {"p","pId"} in my code?
> >
> > @Plugin(name = "PIdConverter", category = "Converter")
> > @ConverterKeys({"p","pId"})
> >
> > public class PIdConverter extends LogEventPatternConverter {
> >     public PIdConverter(String[] options) {
> >         super(options[0], options[0]);
> >     }
> >
> >     public static PIdConverter newInstance(String[] options) {
> >         return new PIdConverter(options);
> >     }
> >
> >     @Override
> >     public void format(LogEvent event, StringBuilder toAppendTo) {
> >         toAppendTo.append(getpID());
> >     }
> >
> >     public String getpID() {
> >         String pId = "123";
> >         if (pId == null) {
> >             pId = "[]";
> >         }
> >         return pId;
> >     }
> > }
> >
>
>
>
> --
> Matt Sicker <boards@gmail.com>
>



-- 
Matt Sicker <boards@gmail.com>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message