01: // Jericho HTML Parser - Java based library for analysing and manipulating HTML
02: // Version 2.5
03: // Copyright (C) 2007 Martin Jericho
04: // http://jerichohtml.sourceforge.net/
05: //
06: // This library is free software; you can redistribute it and/or
07: // modify it under the terms of either one of the following licences:
08: //
09: // 1. The Eclipse Public License (EPL) version 1.0,
10: // included in this distribution in the file licence-epl-1.0.html
11: // or available at http://www.eclipse.org/legal/epl-v10.html
12: //
13: // 2. The GNU Lesser General Public License (LGPL) version 2.1 or later,
14: // included in this distribution in the file licence-lgpl-2.1.txt
15: // or available at http://www.gnu.org/licenses/lgpl.txt
16: //
17: // This library is distributed on an "AS IS" basis,
18: // WITHOUT WARRANTY OF ANY KIND, either express or implied.
19: // See the individual licence texts for more details.
20:
21: package au.id.jericho.lib.html;
22:
23: final class LoggerFactory {
24: private static LoggerProvider defaultLoggerProvider = null;
25:
26: public static Logger getLogger(final String name) {
27: return getLoggerProvider().getLogger(name);
28: }
29:
30: public static Logger getLogger(final Class loggedClass) {
31: return getLogger(loggedClass.getName());
32: }
33:
34: public static LoggerProvider getLoggerProvider() {
35: return (Config.LoggerProvider != null) ? Config.LoggerProvider
36: : getDefaultLoggerProvider();
37: }
38:
39: private static LoggerProvider getDefaultLoggerProvider() {
40: if (defaultLoggerProvider == null)
41: defaultLoggerProvider = determineDefaultLoggerProvider();
42: return defaultLoggerProvider;
43: }
44:
45: private static LoggerProvider determineDefaultLoggerProvider() {
46: if (isClassAvailable("org.slf4j.impl.StaticLoggerBinder")) {
47: if (isClassAvailable("org.slf4j.impl.JDK14LoggerFactory"))
48: return LoggerProvider.JAVA;
49: if (isClassAvailable("org.slf4j.impl.Log4jLoggerFactory"))
50: return LoggerProvider.LOG4J;
51: if (!isClassAvailable("org.slf4j.impl.JCLLoggerFactory"))
52: return LoggerProvider.SLF4J;
53: // fall through to next check if SLF4J is configured to use JCL
54: }
55: if (isClassAvailable("org.apache.commons.logging.Log")) {
56: final String logClassName = org.apache.commons.logging.LogFactory
57: .getLog("test").getClass().getName();
58: if (logClassName
59: .equals("org.apache.commons.logging.impl.Jdk14Logger"))
60: return LoggerProvider.JAVA;
61: if (logClassName
62: .equals("org.apache.commons.logging.impl.Log4JLogger"))
63: return LoggerProvider.LOG4J;
64: return LoggerProvider.JCL;
65: }
66: if (isClassAvailable("org.apache.log4j.Logger"))
67: return LoggerProvider.LOG4J;
68: return LoggerProvider.JAVA;
69: }
70:
71: private static boolean isClassAvailable(final String className) {
72: try {
73: Class.forName(className);
74: return true;
75: } catch (Throwable t) {
76: return false;
77: }
78: }
79: }
|