package org.ovirt.engine.core.logutils;
import java.io.IOException;
import java.util.logging.FileHandler;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
* Contains methods for runtime java.util.logging setup
*/
public class JavaLoggingUtils {
/**
* Instance of org.ovirt logger. We need to keep instance of it to prevent OpenJDK incompatibility described at
* http://findbugs.sourceforge.net/bugDescriptions.html#LG_LOST_LOGGER_DUE_TO_WEAK_REFERENCE
*/
private static final Logger OVIRT_LOGGER = Logger.getLogger("org.ovirt");
/**
* Parses logging level from case insensitive string.
*
* @param levelName
* specified level name
* @exception java.lang.IllegalArgumentException
* if unknown level is specified
*/
public static Level parseLevel(String levelName) {
if (levelName == null) {
throw new IllegalArgumentException("Invalid log level value: 'null'");
}
return Level.parse(levelName.toUpperCase());
}
/**
* Adds file handler with specified file to root logger
*
* @param fileName
* file name to log into
*/
public static void addFileHandler(String fileName) {
try {
FileHandler fh = new FileHandler(fileName, true);
fh.setFormatter(new TimeZoneBasedFormatter());
Logger.getLogger("").addHandler(fh);
} catch (SecurityException | IOException ex) {
throw new IllegalArgumentException(
String.format("Error accessing log file '%s': '%s'", fileName, ex.getMessage()),
ex);
}
}
/**
* Sets level of org.ovirt logger
*
* @param levelName
* log level to use
*/
public static void setLogLevel(String levelName) {
OVIRT_LOGGER.setLevel(parseLevel(levelName));
}
}