qos-ch / logback

The reliable, generic, fast and flexible logging framework for Java.
http://logback.qos.ch
Other
2.97k stars 1.28k forks source link

JaninoEventEvaluator Doesn't support Marker #800

Closed matt19870107 closed 4 months ago

matt19870107 commented 4 months ago

I want to filter my log per the expression marker != null && (marker.contains("SYSTEM_OUT") || level==ERROR). But recently I upgraded the logback to the latest version and found it doesn't work. I checked the document and it says it still supports marker, see https://logback.qos.ch/manual/appenders.html#marker_JaninoEventEvaluator. But from the source code I see it has already comment out https://github.com/qos-ch/logback/blob/master/logback-classic/src/main/java/ch/qos/logback/classic/boolex/JaninoEventEvaluator.java#L50. I also tried to workaround this by adding two appenders and one for log level filter and another for OnMarkerEvaluator, but the performance decreased significantly and it would be obvious if I have a large set of data that need to be logged. Any thoughts on this?

ceki commented 4 months ago

@matt19870107 Thank you for this report.

EventEvalutator should not be confused with EvaluatorFilter. The former is for computing a "triggering" event whereas the latter is for filtering. However, an JaninoEventEvaluator can be nested within an ch.qos.logback.core.filter.EvaluatorFilter.

In any case, your remarks regarding JaninoEventEvaluator and markers are valid and are being fixed.

matt19870107 commented 4 months ago

@ceki May I know the plan for when we can get it fixed then I can decide to workaround this or I can wait for the fix?

ceki commented 4 months ago

@matt19870107 Fixed in commit 61140ea10056. Logback version 1.5.4 containing this fix has been released earlier today.

See also the updated documentation and in particular the new markerList variable.

Do not hesitate to report back your results.