001package gudusoft.gsqlparser.util; 002 003import java.util.logging.Level; 004 005/** 006 * A factory for {@link Logger} instances that uses SLF4J if present, falling back on a 007 * java.util.logging implementation otherwise. 008 */ 009public class LoggerFactory { 010 static final boolean USE_SLF4J; 011 012 static { 013 boolean useSLF4J; 014 try { 015 Class.forName("org.slf4j.impl.StaticLoggerBinder"); 016 useSLF4J = true; 017 } catch (Exception e) { 018 useSLF4J = false; 019 } 020 USE_SLF4J = useSLF4J; 021 } 022 023 /** 024 * Get a {@link Logger} instance for the given host class. 025 * 026 * @param hostClass the host class from which log messages will be issued 027 * @return a Logger 028 */ 029 public static Logger getLogger(Class<?> hostClass) { 030 if (USE_SLF4J) { 031 return new SLF4JLogger(hostClass); 032 } 033 034 return new JDKLogger(hostClass); 035 } 036 037 private static class JDKLogger implements Logger { 038 final java.util.logging.Logger logger; 039 040 public JDKLogger(Class<?> hostClass) { 041 logger = java.util.logging.Logger.getLogger(hostClass.getCanonicalName()); 042 } 043 044 @Override 045 public void trace(String message) { 046 if (logger.isLoggable(Level.FINEST)) { 047 logger.log(Level.FINEST, message); 048 } 049 } 050 051 @Override 052 public void info(String message) { 053 if (logger.isLoggable(Level.INFO)) { 054 logger.log(Level.INFO, message); 055 } 056 } 057 058 @Override 059 public void warn(String message) { 060 if (logger.isLoggable(Level.WARNING)) { 061 logger.log(Level.WARNING, message); 062 } 063 } 064 065 @Override 066 public void error(String message, Throwable t) { 067 if (logger.isLoggable(Level.SEVERE)) { 068 logger.log(Level.SEVERE, message, t); 069 } 070 } 071 } 072 073 private static class SLF4JLogger implements Logger { 074 final org.slf4j.Logger logger; 075 076 SLF4JLogger(Class<?> hostClass) { 077 logger = org.slf4j.LoggerFactory.getLogger(hostClass); 078 } 079 080 @Override 081 public void trace(String message) { 082 if (logger.isTraceEnabled()) { 083 logger.trace(message); 084 } 085 } 086 087 @Override 088 public void info(String message) { 089 if (logger.isInfoEnabled()) { 090 logger.info(message); 091 } 092 } 093 094 @Override 095 public void warn(String message) { 096 if (logger.isWarnEnabled()) { 097 logger.warn(message); 098 } 099 } 100 101 @Override 102 public void error(String message, Throwable t) { 103 if (logger.isErrorEnabled()) { 104 logger.error(message, t); 105 } 106 } 107 } 108}