package net.bytebuddy.build.maven;
import org.apache.maven.plugin.logging.Log;
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.
*/
public class ByteBuddyLogHandler extends Handler {
/**
* The Maven logging target.
*/
private final Log log;
/**
* 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 log The Maven logging target.
* @param logger The Byte Buddy logger target.
* @param useParentHandlers {@code true} if parent handler delegation was originally enabled.
*/
protected ByteBuddyLogHandler(Log log, Logger logger, boolean useParentHandlers) {
this.log = log;
this.logger = logger;
this.useParentHandlers = useParentHandlers;
setFormatter(new SimpleFormatter());
}
/**
* Initializes the Byte Buddy log handler.
*
* @param log The Maven logging target.
* @return The registered log handler.
*/
public static ByteBuddyLogHandler initialize(Log log) {
Logger logger = Logger.getLogger("net.bytebuddy");
ByteBuddyLogHandler handler = new ByteBuddyLogHandler(log, logger, logger.getUseParentHandlers());
try {
logger.setUseParentHandlers(false);
logger.addHandler(handler);
} catch (SecurityException exception) {
log.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) {
log.warn("Cannot configure Byte Buddy logging", exception);
}
}
@Override
public void publish(LogRecord record) {
if (log.isDebugEnabled()) {
log.debug(getFormatter().format(record));
}
}
@Override
public void flush() {
/* do nothing */
}
@Override
public void close() {
/* do nothing */
}
}