001package gudusoft.gsqlparser.util; 002 003import java.util.logging.Level; 004 005public class LoggerFactory { 006 007 private static final boolean SLF4J_ENABLED = detectSlf4j(); 008 009 private static boolean detectSlf4j() { 010 try { 011 Class.forName("org.slf4j.impl.StaticLoggerBinder"); 012 return true; 013 } catch (Throwable e) { 014 return false; 015 } 016 } 017 018 public static Logger getLogger(Class<?> ownerClass) { 019 return SLF4J_ENABLED ? new Slf4jDelegate(ownerClass) : new JdkDelegate(ownerClass); 020 } 021 022 private static class JdkDelegate implements Logger { 023 private final java.util.logging.Logger julLogger; 024 025 JdkDelegate(Class<?> type) { 026 this.julLogger = java.util.logging.Logger.getLogger(type.getCanonicalName()); 027 } 028 029 @Override 030 public void trace(String msg) { 031 log(Level.FINEST, msg, null); 032 } 033 034 @Override 035 public void info(String msg) { 036 log(Level.INFO, msg, null); 037 } 038 039 @Override 040 public void warn(String msg) { 041 log(Level.WARNING, msg, null); 042 } 043 044 @Override 045 public void error(String msg, Throwable ex) { 046 log(Level.SEVERE, msg, ex); 047 } 048 049 private void log(Level level, String message, Throwable error) { 050 if (julLogger.isLoggable(level)) { 051 if (error == null) { 052 julLogger.log(level, message); 053 } else { 054 julLogger.log(level, message, error); 055 } 056 } 057 } 058 } 059 060 private static class Slf4jDelegate implements Logger { 061 private final org.slf4j.Logger slf4jLogger; 062 063 Slf4jDelegate(Class<?> type) { 064 this.slf4jLogger = org.slf4j.LoggerFactory.getLogger(type); 065 } 066 067 @Override 068 public void trace(String msg) { 069 if (slf4jLogger.isTraceEnabled()) slf4jLogger.trace(msg); 070 } 071 072 @Override 073 public void info(String msg) { 074 if (slf4jLogger.isInfoEnabled()) slf4jLogger.info(msg); 075 } 076 077 @Override 078 public void warn(String msg) { 079 if (slf4jLogger.isWarnEnabled()) slf4jLogger.warn(msg); 080 } 081 082 @Override 083 public void error(String msg, Throwable ex) { 084 if (slf4jLogger.isErrorEnabled()) slf4jLogger.error(msg, ex); 085 } 086 } 087}