package org.infinispan.util.logging.events.impl; import static org.infinispan.util.logging.events.Messages.MESSAGES; import java.time.Instant; import java.util.List; import java.util.Optional; import org.infinispan.remoting.transport.Address; import org.infinispan.util.logging.events.EventLog; import org.infinispan.util.logging.events.EventLogCategory; import org.infinispan.util.logging.events.EventLogLevel; import org.infinispan.util.logging.events.EventLogger; /** * DecoratedEventLogger. Provides a way to decorate an EventLog with additional information. * * @author Tristan Tarrant * @since 8.2 */ public class DecoratedEventLogger implements EventLogger { private static final Optional<String> LOCAL_SCOPE = Optional.of("local"); private EventLogger delegate; protected Optional<String> detail = Optional.empty(); protected Optional<String> context = Optional.empty(); protected Optional<String> scope = Optional.empty(); protected Optional<String> who = Optional.empty(); protected DecoratedEventLogger(EventLogger delegate) { this.delegate = delegate; } @Override public void log(EventLogLevel level, EventLogCategory category, String message) { StringBuilder sb = new StringBuilder(); context.ifPresent(c -> sb.append(MESSAGES.eventLogContext(c))); scope.ifPresent(s -> sb.append(MESSAGES.eventLogScope(s))); who.ifPresent(w -> sb.append(MESSAGES.eventLogWho(w))); // We don't include detail in this implementation sb.append(message); delegate.log(level, category, sb.toString()); } @Override public EventLogger who(String who) { this.who = Optional.of(who); return this; } @Override public EventLogger scope(String scope) { this.scope = Optional.of(scope); return this; } @Override public EventLogger scope(Address scope) { this.scope = scope != null ? Optional.of(scope.toString()) : LOCAL_SCOPE; return this; } @Override public EventLogger context(String context) { this.context = Optional.of(context); return this; } @Override public EventLogger detail(String detail) { this.detail = Optional.ofNullable(detail); return this; } @Override public List<EventLog> getEvents(Instant start, int count, Optional<EventLogCategory> category, Optional<EventLogLevel> level) { return delegate.getEvents(start, count, category, level); } }