001/* 002 * HA-JDBC: High-Availability JDBC 003 * Copyright (C) 2012 Paul Ferraro 004 * 005 * This program is free software: you can redistribute it and/or modify 006 * it under the terms of the GNU Lesser General Public License as published by 007 * the Free Software Foundation, either version 3 of the License, or 008 * (at your option) any later version. 009 * 010 * This program is distributed in the hope that it will be useful, 011 * but WITHOUT ANY WARRANTY; without even the implied warranty of 012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 013 * GNU Lesser General Public License for more details. 014 * 015 * You should have received a copy of the GNU Lesser General Public License 016 * along with this program. If not, see <http://www.gnu.org/licenses/>. 017 */ 018package net.sf.hajdbc.logging; 019 020import java.util.ServiceLoader; 021 022/** 023 * Factory for creating {@link Logger} implementation from various logging service provider implementations. 024 * @author Paul Ferraro 025 */ 026public final class LoggerFactory 027{ 028 private static final LoggingProvider provider = getProvider(); 029 030 private static LoggingProvider getProvider() 031 { 032 for (LoggingProvider provider: ServiceLoader.load(LoggingProvider.class, LoggingProvider.class.getClassLoader())) 033 { 034 if (provider.isEnabled()) 035 { 036 provider.getLogger(LoggerFactory.class).log(Level.DEBUG, "Using {0} logging", provider.getName()); 037 038 return provider; 039 } 040 } 041 throw new IllegalStateException(String.format("No %s found", LoggingProvider.class.getName())); 042 } 043 044 public static Logger getLogger(Class<?> targetClass) 045 { 046 return provider.getLogger(targetClass); 047 } 048 049 private LoggerFactory() 050 { 051 // Hide 052 } 053}