1 /*
2 ~ Copyright 2006-2007 Nicolas De Loof.
3 ~
4 ~ Licensed under the Apache License, Version 2.0 (the "License");
5 ~ you may not use this file except in compliance with the License.
6 ~ You may obtain a copy of the License at
7 ~
8 ~ http://www.apache.org/licenses/LICENSE-2.0
9 ~
10 ~ Unless required by applicable law or agreed to in writing, software
11 ~ distributed under the License is distributed on an "AS IS" BASIS,
12 ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 ~ See the License for the specific language governing permissions and
14 ~ limitations under the License.
15 */
16 package org.jmonit.log;
17
18 import static org.jmonit.util.RuntimeAdaptable.isPresentInClasspath;
19
20 /**
21 * Facade API to any logging framework.
22 * <p>
23 * commons-logging provides such an abstraction layer, but introduces some
24 * classloader issues that many user complain. To avoid dependency on this
25 * librairy, this thin layer can wrap commons-logging if no other supported
26 * logging framework is found.
27 *
28 * @author <a href="mailto:nicolas.deloof@gmail.com">Nicolas De Loof</a>
29 */
30 public abstract class Log
31 {
32 /** Indicates log4j present in classpath */
33 private static boolean log4j = isPresentInClasspath( "org.apache.log4j.Logger" );
34
35 /** Indicates jakarta commons-logging present in classpath */
36 private static boolean commonsLogging = isPresentInClasspath( "org.apache.commons.logging.Log" );
37
38 /** Indicates Java 1.4 or better runtime environment */
39 private static boolean java14 = isPresentInClasspath( "java.lang.StackTraceElement" );
40
41 public static Log getLog( Class clazz )
42 {
43 if ( System.getProperty( "org.jmonit.log.Log.console" ) != null )
44 {
45 return new ConsoleLogger( clazz );
46 }
47 if ( log4j )
48 {
49 return new Log4jLogger( clazz );
50 }
51 if ( commonsLogging )
52 {
53 return new CommonsLoggingLogger( clazz );
54 }
55 if ( java14 )
56 {
57 return new Java14Logger( clazz );
58 }
59 return new NullLogger();
60 }
61
62 /**
63 * @return true if debug logs are enabled
64 */
65 public abstract boolean isDebugEnabled();
66
67 /**
68 * @param message message to be logged
69 */
70 public abstract void debug( String message );
71
72 /**
73 * @param message message to be logged
74 */
75 public abstract void info( String message );
76
77 /**
78 * @param message message to be logged
79 * @param t Exception to be logged
80 */
81 public abstract void info( String message, Throwable t );
82
83 /**
84 * @param message message to be logged
85 */
86 public abstract void warn( String message );
87
88 /**
89 * @param message message to be logged
90 * @param t Exception to be logged
91 */
92 public abstract void warn( String message, Throwable t );
93
94 /**
95 * @param message message to be logged
96 */
97 public abstract void error( String message );
98
99 /**
100 * @param message message to be logged
101 * @param t Exception to be logged
102 */
103 public abstract void error( String message, Throwable t );
104
105 }