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