Class RoutingAppender.RouteAppenderControl

All Implemented Interfaces:
Filterable, LifeCycle, LifeCycle2
Direct Known Subclasses:
RoutingAppender.CreatedRouteAppenderControl, RoutingAppender.ReferencedRouteAppenderControl
Enclosing class:
RoutingAppender

private abstract static class RoutingAppender.RouteAppenderControl extends AppenderControl
LOG4J2-2629: PurgePolicy implementations can invoke RoutingAppender.deleteAppender(String) after we have looked up an instance of a target appender but before events are appended, which could result in events not being recorded to any appender. This extension of AppenderControl allows to mark usage of an appender, allowing deferral of LifeCycle.stop() until events have successfully been recorded. Alternative approaches considered: - More aggressive synchronization: Appenders may do expensive I/O that shouldn't block routing. - Move the 'updatePurgePolicy' invocation before appenders are called: Unfortunately this approach doesn't work if we consider an ImmediatePurgePolicy (or IdlePurgePolicy with a very small timeout) because it may attempt to remove an appender that doesn't exist yet. It's counterintuitive to get an event that a route has been used at a point when we expect the route doesn't exist in RoutingAppender.getAppenders().
  • Constructor Details

    • RouteAppenderControl

      RouteAppenderControl(Appender appender)
  • Method Details

    • checkout

      abstract void checkout()
    • release

      abstract void release()