1
votes

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!

1

1 Answers

0
votes

This should be equivalent to scanning the plugins under the specified package:

PluginManager.addPackage("yourpackage");