You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@logging.apache.org by "sharanggupta (via GitHub)" <gi...@apache.org> on 2026/10/19 20:58:49 UTC

[I] LoggerNameLevelRewritePolicy matches sibling packages that share a logger-name prefix [logging-log4j2]

sharanggupta opened a new issue, #4412:
URL: https://github.com/apache/logging-log4j2/issues/4412

   **Describe the bug**
   `LoggerNameLevelRewritePolicy.rewrite()` matches the configured logger name with `String.startsWith`, with no check for a following `.` or exact-match boundary. A policy configured for `logger="com.foo"` therefore also matches an unrelated sibling package such as `com.foobar.Baz`, which merely happens to share the same character prefix without being a sub-logger of `com.foo` at all.
   
   This is inconsistent with how every other logger-name-hierarchy feature in Log4j works (e.g. `<Logger name="com.foo">` resolves by progressively truncating at the last dot, never by substring prefix matching), and it's a silent effect: a `WARN` (or any configured level) from the unrelated package gets rewritten/demoted with no error, warning, or indication anything unexpected happened.
   
   **Environment**
   - Log4j version: 2.26.1 (latest stable; also reproduces on `2.x`/3.0.0-beta3 source)
   - OS: macOS (environment-independent; pure string logic)
   - JDK: 17
   
   **To Reproduce**
   ```java
   KeyValuePair[] rewrite = { new KeyValuePair("WARN", "DEBUG") };
   LoggerNameLevelRewritePolicy policy = LoggerNameLevelRewritePolicy.createPolicy("com.foo", rewrite);
   
   LogEvent event = Log4jLogEvent.newBuilder()
           .setLoggerName("com.foobar.PaymentProcessor")
           .setLevel(Level.WARN)
           .setMessage(new SimpleMessage("payment declined"))
           .build();
   
   LogEvent rewritten = policy.rewrite(event);
   // rewritten.getLevel() is DEBUG, even though "com.foobar.PaymentProcessor" is not
   // a descendant of "com.foo" — it's an unrelated sibling package.
   ```
   
   **Expected behavior**
   A rule configured for `"com.foo"` should only affect `"com.foo"` itself and its true descendants (`"com.foo.Bar"`, etc.), not an unrelated package that happens to share the same character prefix.
   
   **Additional context**
   I have a fix + regression test ready and will open a PR referencing this issue.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@logging.apache.org.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [I] LoggerNameLevelRewritePolicy matches sibling packages that share a logger-name prefix [logging-log4j2]

Posted by "ramanathan1504 (via GitHub)" <gi...@apache.org>.
ramanathan1504 closed issue #4412: LoggerNameLevelRewritePolicy matches sibling packages that share a logger-name prefix
URL: https://github.com/apache/logging-log4j2/issues/4412


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@logging.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org