Hello everyone,
PatternLayout
(https://logging.apache.org/log4j/2.x/manual/layouts.html#PatternLayout)
advertises this parameter syntax, to allow filtering undesired stack
frames from logged stacktraces: `%ex{filters(package,list)}`
> ex|exception|throwable
>
> {filters(package,package,...)}
>
> Use {filters(packages)} where packages is a list of package names to suppress
> matching stack frames from stack traces.
However on 2.17.1 (latest) when I use such a pattern:
`<PatternLayout pattern="%d{ISO8601} %5p %c{1} %m%n%ex{filters(org.p2)}"/>`
no filtering happens, and I still get stacktraces like:
```
2022-02-14T07:25:23,048 ERROR TestLog error
java.lang.IllegalStateException: Oh no
at org.p2.Foo.run(Foo.java:5)
at com.p1.Bar.run(Bar.java:7)
at org.p2.Bar.run(Bar.java:5)
at com.p1.Foo.run(Foo.java:7)
at TestLog.main(TestLog.java:11)
```
Per my understanding, above config should remove the two `at
org.p2...` frames/lines from the stacktrace.
Turning off `alwaysWriteExceptions` makes no change.
Looking at the
`org.apache.logging.log4j.core.impl.ThrowableFormatOptions#newInstance(..)`
codebase I see that the `filters` parameter is parsed and loaded to
`ThrowableFormatOptions` properly; but in the actual
`org.apache.logging.log4j.core.pattern.ThrowablePatternConverter#formatOption(..)`
I cannot find any stack frame filtering logic using `filters` config.
So to me it seems like `filters` functionality is not yet implemented
(although I could not find any documentation/discussions to back my
suspicion).
I would be happy to contribute a filtering implementation honoring the
already documented specification; however first I would like to
confirm if I'm correct so far, or if I have missed something.
TIA!
--
Janaka Bandara
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]