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 Asma Zinneera Jabir <az...@gmail.com> on 2017/09/10 06:44:53 UTC
Log4J2 PatternConverter for adding a custom field to the log record
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;
}
}
Re: Log4J2 PatternConverter for adding a custom field to the log record
Posted by Matt Sicker <bo...@gmail.com>.
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 <az...@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" <bo...@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 <az...@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 <bo...@gmail.com>
>
--
Matt Sicker <bo...@gmail.com>
Re: Log4J2 PatternConverter for adding a custom field to the log record
Posted by Asma Zinneera Jabir <az...@gmail.com>.
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" <bo...@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 <az...@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 <bo...@gmail.com>
Re: Log4J2 PatternConverter for adding a custom field to the log record
Posted by Matt Sicker <bo...@gmail.com>.
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 <az...@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 <bo...@gmail.com>