org.jgroups.logging.LogFactory Maven / Gradle / Ivy
package org.jgroups.logging;
import org.jgroups.Global;
import org.jgroups.util.Util;
import java.lang.reflect.Constructor;
/**
* Factory that creates {@link Log} instances.
*
* @author Manik Surtani
* @author Bela Ban
* @since 4.0
*/
public final class LogFactory {
public static final boolean IS_SLF4J_AVAILABLE;
public static final boolean IS_LOG4J2_AVAILABLE; // log4j2 is the default logger
protected static boolean use_jdk_logger;
protected static CustomLogFactory custom_log_factory=null;
protected static Constructor extends Log> ctor_class=null, ctor_str=null;
private LogFactory() {
throw new InstantiationError( "Must not instantiate this class" );
}
static {
use_jdk_logger=isPropertySet(Global.USE_JDK_LOGGER);
String classname=Util.getProperty(Global.LOG_CLASS);
if(classname != null) {
try {
ctor_class=findConstructor(classname, Class.class);
ctor_str=findConstructor(classname, String.class);
}
catch(Exception e) {
throw new IllegalArgumentException(String.format("failed loading logger %s", classname), e);
}
}
IS_LOG4J2_AVAILABLE=isAvailable("org.apache.logging.log4j.core.Logger");
IS_SLF4J_AVAILABLE=isAvailable("org.slf4j.Logger");
}
public static CustomLogFactory getCustomLogFactory() {return custom_log_factory;}
public static void setCustomLogFactory(CustomLogFactory factory) {custom_log_factory=factory;}
public static boolean useJdkLogger() {return use_jdk_logger;}
public static void useJdkLogger(boolean flag) {use_jdk_logger=flag;}
public static String loggerType() {
if(ctor_class != null)
return ctor_class.getDeclaringClass().getSimpleName();
if(ctor_str != null)
ctor_str.getDeclaringClass().getSimpleName();
if(use_jdk_logger) return "jdk";
if(IS_LOG4J2_AVAILABLE) return "log4j2";
if(IS_SLF4J_AVAILABLE) return "slf4j";
return "jdk";
}
protected static boolean isAvailable(String classname) {
try {
return Class.forName(classname) != null;
}
catch(ClassNotFoundException cnfe) {
return false;
}
}
protected static boolean isPropertySet(String property_name) {
try {
return Boolean.parseBoolean(System.getProperty(property_name));
}
catch(Throwable t) {
return false;
}
}
public static Log getLog(Class clazz) {
if(custom_log_factory != null)
return custom_log_factory.getLog(clazz);
if(ctor_class != null) {
try {
return ctor_class.newInstance(clazz);
}
catch(Throwable t) {
throw new RuntimeException(t);
}
}
if(use_jdk_logger)
return new JDKLogImpl(clazz);
if(IS_LOG4J2_AVAILABLE)
return new Log4J2LogImpl(clazz);
if (IS_SLF4J_AVAILABLE)
return new Slf4jLogImpl(clazz);
return new JDKLogImpl(clazz);
}
public static Log getLog(String category) {
if(custom_log_factory != null)
return custom_log_factory.getLog(category);
if(ctor_str != null) {
try {
ctor_str.newInstance(category);
}
catch(Throwable t) {
throw new RuntimeException(t);
}
}
if(use_jdk_logger)
return new JDKLogImpl(category);
if(IS_LOG4J2_AVAILABLE)
return new Log4J2LogImpl(category);
if (IS_SLF4J_AVAILABLE)
return new Slf4jLogImpl(category);
return new JDKLogImpl(category);
}
protected static Constructor extends Log> findConstructor(String classname, Class arg) throws Exception {
Class> clazz=Util.loadClass(classname, (Class)null);
return (Constructor extends Log>)clazz.getDeclaredConstructor(arg);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy