I am using log4j2. And i have deffined custom appender and pattern for it and setting in up programatically:
public static void initCustomLogging(List<Appender> appenders) {
LoggerContext loggerContext = (LoggerContext) LogManager.getContext(false);
Configuration configuration = loggerContext.getConfiguration();
LoggerConfig rootLoggerConfig = configuration.getLoggerConfig("");
for (Appender appender : appenders) {
appender.start();
rootLoggerConfig.addAppender(appender, Level.INFO, null);
}
loggerContext.updateLoggers();
}
Where i create my appender like:
private static final String CUSTOM_PATTERN = "{\"time\":\"%d{HH:mm:ss.SSS}\",\"data\":%msg}";
private static final Layout CUSTOM_LAYOUT = PatternLayout.newBuilder()
.withPattern(CUSTOM_PATTERN)
.build();
Appender appender = CustomAppender.createAppender("custom",CUSTOM_LAYOUT)
However i want to add custom arguments to my pattern, for example [%requestInfo] where this would call some static method. I know i can define my converter like:
@Plugin(name = "MyConverter", category = "Converter")
@ConverterKeys({"requestData"})
public class MyConverter extends LogEventPatternConverter {
private MyConverter (final String name, final String style) {
super(name, style);
}
public static MyConverter newInstance(final String[] options) {
return new MyConverter ("requestData", "requestData");
}
@Override
public void format(final LogEvent event, final StringBuilder toAppendTo) {
toAppendTo.append(getRequestId());
}
private String getRequestData() {
String data= // some static method call
if (data== null) {
data= "-";
}
return data;
}
}
If i was configurating log4j2 via xml config file, this would get picked up automaticly and configured for me. However since i am configurating it programmatically - how do i add this converted to my layout? I see no method of doing it.
Thanks for help!