Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix RegexFilter pattern flags #3086

Open
JWT007 opened this issue Oct 14, 2024 · 1 comment
Open

Fix RegexFilter pattern flags #3086

JWT007 opened this issue Oct 14, 2024 · 1 comment
Labels
bug Incorrect, unexpected, or unintended behavior of existing code

Comments

@JWT007
Copy link

JWT007 commented Oct 14, 2024

In the Log4j 2.x documentation for the RegexFilter:

https://logging.apache.org/log4j/2.x/manual/filters.html#RegexFilter

The only two configuration attributes are "regex" and "useRawMsg" (and the common filter attributes onMatch/onMismatch).

In the RegExFilter @pluginfactory there is a nested element for a set of Strings which is not mentioned in the documentation:

@PluginFactory
    public static RegexFilter createFilter(
            // @formatter:off
            @PluginAttribute("regex") final String regex,
            @PluginElement("PatternFlags") final String[] patternFlags,
            @PluginAttribute("useRawMsg") final Boolean useRawMsg,
            @PluginAttribute("onMatch") final Result match,
            @PluginAttribute("onMismatch") final Result mismatch)
            // @formatter:on
            throws IllegalArgumentException, IllegalAccessException {

If I understand correctly one can provide field names from the Pattern class here: (CASE_INSENSITIVE, COMMENTS, etc.).

The example in the Plugin Reference for the RegexFilter shows an example of nested strings but is not very clear with "a-String-implementation":

<RegexFilter onMatch=""
             onMismatch=""
             regex=""
             useRawMsg="">
    <a-String-implementation/><!-- multiple occurrences allowed -->
</RegexFilter>

Is it?:

<RegExFilter ...>
  <PatternFlags>CASE_INSENTIVE</PatternFlags>
  <PatternFlags>COMMENTS</PatternFlags>
</RegExFilter>

A usage example would be helpful.

Maybe this API is not really "public"? In the log4j-core-test RegexFilter test it seems the RegexFilter is never tested with anything but a null value for the patternFlags.

@ppkarwasz ppkarwasz changed the title Log4j 2.x Documentation - RegexFilter does not document the possible nested element PatternFlags Fix RegexFilter pattern flags Oct 17, 2024
@ppkarwasz
Copy link
Contributor

Hi @JWT007,

Thank you for helping us checking our documentation against the automatically-generated plugin reference. We created the plugin reference exactly for this purpose and we are happy you find it useful.

This is a longstanding LOG4J2-696 bug, old as Log4j 2 itself. The attempted solution has no chance to work, since the @PluginElement annotation only accepts classes annotated with @Plugin and String is final.

Since you can embed pattern flags in the regex (e.g. (?i) instead of CASE_SENSITIVE), I believe that we can just remove the annotation on the parameter.

@ppkarwasz ppkarwasz added bug Incorrect, unexpected, or unintended behavior of existing code and removed waiting-for-maintainer labels Oct 17, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Incorrect, unexpected, or unintended behavior of existing code
Projects
None yet
Development

No branches or pull requests

2 participants