That plug-in wrapper pattern will always work. Maybe creating properties to
reference as variables is an option? There might be a way to structure your
configuration to use routing appenders or something like that to minimize
duplication, too.

On Fri, Nov 20, 2020 at 05:07 Stig Rohde Døssing <stigdoess...@gmail.com>
wrote:

> Hi,
>
> I have an application that ships with a number of config files included. We
> have a PatternLayout pattern that is used across all configurations, since
> our application needs to parse logs from that certain logs. We currently
> copy-paste the pattern to each file.
>
> I took a look at using properties and XInclude to avoid repeating the
> pattern, but this doesn't work too well with log4j2-test.xml, since that
> file is not located in the same directory as the production log4j2.xml
> files. I would also like to make it easy for customers doing their own
> custom log configs to reference the pattern, and it would be nice if they
> could just refer to the pattern by name.
>
> A bit of a hack I came up with was to programmatically create a named
> PatternLayout by using the PluginFactory mechanism
>
> @Plugin(name = "MyPatternLayout", category = Node.CATEGORY, elementType =
> Layout.ELEMENT_TYPE, printObject = true)
> class MyPatternLayout {
>   @PluginFactory
>   public static PatternLayout createLayout() {
>     PatternLayout.builder.withPattern(myPattern).build()
>   }
> }
>
> This lets me refer to MyPatternLayout rather than including the pattern in
> the config files.
>
> Is this a reasonable way to accomplish reuse, or am I misusing the factory
> mechanism in a way that is likely to break in future releases?
>

Reply via email to