package net.bytebuddy.build.gradle; import lombok.EqualsAndHashCode; import org.gradle.api.Project; import java.util.logging.Handler; import java.util.logging.LogRecord; import java.util.logging.Logger; import java.util.logging.SimpleFormatter; /** * A log handler for only printing Byte Buddy specific log-messages if debug logging is enabled for a plugin. */ @EqualsAndHashCode(callSuper = false) public class ByteBuddyLogHandler extends Handler { /** * The current project. */ private final Project project; /** * The Byte Buddy logger target. */ private final Logger logger; /** * {@code true} if parent handler delegation was originally enabled. */ private final boolean useParentHandlers; /** * Creates a new log handler. * * @param project The current project. * @param logger The Byte Buddy logger target. * @param useParentHandlers {@code true} if parent handler delegation was originally enabled. */ protected ByteBuddyLogHandler(Project project, Logger logger, boolean useParentHandlers) { this.project = project; this.logger = logger; this.useParentHandlers = useParentHandlers; setFormatter(new SimpleFormatter()); } /** * Initializes the Byte Buddy log handler. * * @param project The current project. * @return The registered log handler. */ public static ByteBuddyLogHandler initialize(Project project) { Logger logger = Logger.getLogger("net.bytebuddy"); ByteBuddyLogHandler handler = new ByteBuddyLogHandler(project, logger, logger.getUseParentHandlers()); try { logger.setUseParentHandlers(false); logger.addHandler(handler); } catch (SecurityException exception) { project.getLogger().warn("Cannot configure Byte Buddy logging", exception); } return handler; } /** * Resets the configuration to its original state. */ public void reset() { try { logger.setUseParentHandlers(useParentHandlers); logger.removeHandler(this); } catch (SecurityException exception) { project.getLogger().warn("Cannot configure Byte Buddy logging", exception); } } @Override public void publish(LogRecord record) { if (project.getLogger().isDebugEnabled()) { project.getLogger().debug(getFormatter().format(record)); } } @Override public void flush() { /* do nothing */ } @Override public void close() { /* do nothing */ } @Override public String toString() { return "ByteBuddyLogHandler{" + "project=" + project + " ,logger=" + logger + " ,useParentHandlers=" + useParentHandlers + '}'; } }