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 @Override 050 public void error(String msg) { 051 log(Level.SEVERE, msg, null); 052 } 053 054 private void log(Level level, String message, Throwable error) { 055 if (julLogger.isLoggable(level)) { 056 if (error == null) { 057 julLogger.log(level, message); 058 } else { 059 julLogger.log(level, message, error); 060 } 061 } 062 } 063 } 064 065 private static class Slf4jDelegate implements Logger { 066 private final org.slf4j.Logger slf4jLogger; 067 068 Slf4jDelegate(Class<?> type) { 069 this.slf4jLogger = org.slf4j.LoggerFactory.getLogger(type); 070 } 071 072 @Override 073 public void trace(String msg) { 074 if (slf4jLogger.isTraceEnabled()) slf4jLogger.trace(msg); 075 } 076 077 @Override 078 public void info(String msg) { 079 if (slf4jLogger.isInfoEnabled()) slf4jLogger.info(msg); 080 } 081 082 @Override 083 public void warn(String msg) { 084 if (slf4jLogger.isWarnEnabled()) slf4jLogger.warn(msg); 085 } 086 087 @Override 088 public void error(String msg, Throwable ex) { 089 if (slf4jLogger.isErrorEnabled()) slf4jLogger.error(msg, ex); 090 } 091 092 @Override 093 public void error(String msg) { 094 if (slf4jLogger.isErrorEnabled()) slf4jLogger.error(msg); 095 } 096 } 097}