Roy Teeuwen created SLING-13212:
-----------------------------------

             Summary: LogStoreListener push API on the in-memory log store
                 Key: SLING-13212
                 URL: https://issues.apache.org/jira/browse/SLING-13212
             Project: Sling
          Issue Type: Improvement
          Components: Commons
    Affects Versions: Commons Log 6.1.2
            Reporter: Roy Teeuwen


 SLING-13188 added an optional in-memory LogStore queryable via 
LogStore.getRecent(Pattern, LogLevel, int). The query API is well suited to 
occasional inspection (e.g., a web console panel), but consumers that want to 
forward log events elsewhere — telemetry pipelines, alerting, audit shipping — 
are forced into a polling loop with manual de-duplication and a race against 
the ring buffer's eviction policy.

Proposal: add a whiteboard-style consumer interface in 
org.apache.sling.commons.log.logback.store:

{code:java}
  @ConsumerType
  public interface LogStoreListener {
      void onEntry(LogEntry entry);
  }
{code}

  
LogStoreRegistrar tracks LogStoreListener services with a ServiceTracker. Each 
appended entry is fanned out to the currently-registered listeners 
synchronously on the appender thread, after the entry has been added to the 
store and outside its internal lock. Listeners registered before the LogStore 
PID is configured are remembered and attached when the store activates; 
listeners registered later are attached immediately.

Listeners are documented to be cheap and non-blocking; if a listener throws, 
the throwable propagates to the caller (the Logback appender thread) and 
Logback handles it, which keeps the contract simple and matches how Logback 
already treats appender exceptions.

This change is additive: the existing LogStore.getRecent(...) API is untouched, 
and consumers that don't register a LogStoreListener see no behavioural 
difference.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to