org.infinispan.util.logging.events.EventLogger Maven / Gradle / Ivy
package org.infinispan.util.logging.events;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.security.Principal;
import java.time.Instant;
import java.util.List;
import java.util.Optional;
import javax.security.auth.Subject;
import org.infinispan.Cache;
import org.infinispan.remoting.transport.Address;
import org.infinispan.security.Security;
/**
* EventLogger provides an interface for logging event messages.
*
* @author Tristan Tarrant
* @since 8.2
*/
public interface EventLogger {
/**
* Logs a message to the event log with the specified level
*
* @param level
* the severity level of the event
* @param message
* the message to log
*/
void log(EventLogLevel level, EventLogCategory category, String message);
/**
* Logs a message to the event log using the {@link EventLogLevel#INFO} severity
*
* @param message
* the message to log
*/
default void info(EventLogCategory category, String message) {
log(EventLogLevel.INFO, category, message);
}
/**
* Logs a message to the event log using the {@link EventLogLevel#WARN} severity
*
* @param message
* the message to log
*/
default void warn(EventLogCategory category, String message) {
log(EventLogLevel.WARN, category, message);
}
/**
* Logs a message to the event log using the {@link EventLogLevel#ERROR} severity
*
* @param message
* the message to log
*/
default void error(EventLogCategory category, String message) {
log(EventLogLevel.ERROR, category, message);
}
/**
* Logs a message to the event log using the {@link EventLogLevel#FATAL} severity
*
* @param message
* the message to log
*/
default void fatal(EventLogCategory category, String message) {
log(EventLogLevel.FATAL, category, message);
}
/**
* Sets the scope of this event log, e.g. a node address. This should be used for events which
* reference a single node in the cluster
*
* @param scope a scope
* @return the event logger
*/
default EventLogger scope(String scope) {
return this;
}
/**
* Sets a node address as the scope of this event log
*
* @param scope the address of the node
* @return the event logger
*/
default EventLogger scope(Address scope) { return this; }
/**
* Sets a cache as context of this event log. The name of the cache will be used to indicate the
* context.
*
* @param cache
* the cache to set as context
* @return the event logger
*/
default EventLogger context(Cache, ?> cache) {
return context(cache.getName());
}
/**
* Sets a context of this event log.
*
* @param context
* the name of the context
* @return the event logger
*/
default EventLogger context(String context) {
return this;
}
/**
* Sets a detail for this event log which could include additional information.
*
* @param detail
* the event log detail
* @return the event logger
*/
default EventLogger detail(String detail) {
return this;
}
/**
* Sets a throwable to include as detail for this event. Both the localized message of the
* Throwable as well as its stack trace will be recorded as the event's detail
*
* @param detail
* a throwable
* @return the event logger
*/
default EventLogger detail(Throwable t) {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
pw.println(t.getLocalizedMessage());
t.printStackTrace(pw);
return detail(sw.toString());
}
/**
* Sets a security subject for this event log. The name of the main user principal of the subject
* will be recorded in the log.
*
* @param subject
* the security subject
* @return the event logger
*/
default EventLogger who(Subject subject) {
if (subject != null) {
return this.who(Security.getSubjectUserPrincipal(subject));
} else {
return this;
}
}
/**
* Sets a security principal for this event log. The name of the principal will be recorded in
* the log.
*
* @param principal
* the security principal
* @return the event logger
*/
default EventLogger who(Principal principal) {
if (principal != null) {
return this.who(principal.getName());
} else {
return this;
}
}
/**
* Sets a security name for this event log.
*
* @param s
* the security name
* @return the event logger
*/
default EventLogger who(String s) {
return this;
}
/**
* Retrieves the event logs from the cluster within the specified range
*
* @param start
* the instant from which to retrieve the logs
* @param count
* the number of logs to retrieve
* @param category
* an optional category filter
* @param level
* an optional level filter
* @return a list of {@link EventLog}s
*/
List getEvents(Instant start, int count, Optional category, Optional level);
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy