Thanks for the feedback Ralph. Actually having the pattern and the key be the same expression does not mean it will always match. What actually happens is that the lookup is applied in the pattern so $${ctx:queryId} becomes let's say "query0" but the key of the route remains "${ctx:queryId}" (one dollar '$' stripped). The code ends up doing "query0".equals("${ctx:queryId}"), which returns false, and thus the route does not match.
Another interesting thing, which I discovered yesterday, is that if there is no value in the log4j context then we end up doing "${ctx:queryId}".equals("${ctx:queryId}") so the specific route will be chosen. I don't know the original intentions behind this logging definition but I doubt that it was what happens here. At the moment, I am mostly trying to understand if it is normal that lookups are not applied in the key of the route. Best, Stamatis On 2021/01/11 15:38:47, Ralph Goers <ralph.go...@dslextreme.com> wrote: > You are correct in your assessment. The default route is the one that does > not have a key. Naming a route “default” doesn’t make it the default. The > value of the key is the value that is required for the route to match. Having > the pattern and key be the same expression means it will always match, which > makes the routing appender useless. > > Ralph > > > On Jan 11, 2021, at 4:01 AM, Stamatis Zampetakis <zabe...@gmail.com> wrote: > > > > Hello, > > > > During code review I bump into a configuration (snippet below) for a > > routing appender that seems wrong in various aspects. > > > > appender.query-routing.type = Routing > > appender.query-routing.name = query-routing > > appender.query-routing.routes.type = Routes > > appender.query-routing.routes.pattern = $${ctx:queryId} > > # purge policy > > ... > > # default route > > appender.query-routing.routes.route-default.type = Route > > appender.query-routing.routes.route-default.key = $${ctx:queryId} > > appender.query-routing.routes.route-default.ref = RFA > > # queryId based route > > appender.query-routing.routes.route-mdc.type = Route > > appender.query-routing.routes.route-mdc.file-mdc.type = RandomAccessFile > > appender.query-routing.routes.route-mdc.file-mdc.name = query-file-appender > > ... > > > > I've never used the routing appender before so I would be grateful if > > somebody could verify the findings below. > > > > First, the naming pattern (and comment) indicating that the first route > > (route-default) is the default one seems to be wrong. > > Based on the documentation [1], if there is no key definition for a route > > then that one is the default; so in this case the second route seems to be > > the default and not the first one. > > > > The lookup based key definition in the first route seems to be useless. > > Although not explicitly stated in the doc [1] from the code it seems that > > only static literals (not lookups) are supported in route keys. > > > > All in all, at the current state the route-default seems to be useless and > > I suppose can be removed. > > > > Best, > > Stamatis > > > > [1] > > https://logging.apache.org/log4j/2.x/manual/appenders.html#RoutingAppender > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: log4j-user-unsubscr...@logging.apache.org > For additional commands, e-mail: log4j-user-h...@logging.apache.org > > --------------------------------------------------------------------- To unsubscribe, e-mail: log4j-user-unsubscr...@logging.apache.org For additional commands, e-mail: log4j-user-h...@logging.apache.org