001/* 002 * Copyright 2001-2004 The Apache Software Foundation. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 017package org.apache.commons.logging.impl; 018 019import java.io.ObjectStreamException; 020import java.io.Serializable; 021 022import org.apache.commons.logging.Log; 023import org.slf4j.Logger; 024import org.slf4j.LoggerFactory; 025import org.slf4j.spi.LocationAwareLogger; 026 027/** 028 * Implementation of {@link Log org.apache.commons.logging.Log} interface which 029 * delegates all processing to a wrapped {@link Logger org.slf4j.Logger} 030 * instance. 031 * 032 * <p> 033 * JCL's FATAL level is mapped to ERROR. All other levels map one to one. 034 * 035 * @author Ceki Gülcü 036 */ 037public class SLF4JLocationAwareLog implements Log, Serializable { 038 039 private static final long serialVersionUID = -2379157579039314822L; 040 041 // used to store this logger's name to recreate it after serialization 042 protected String name; 043 044 // in both Log4jLogger and Jdk14Logger classes in the original JCL, the 045 // logger instance is transient 046 private transient LocationAwareLogger logger; 047 048 private static final String FQCN = SLF4JLocationAwareLog.class.getName(); 049 050 SLF4JLocationAwareLog(LocationAwareLogger logger) { 051 this.logger = logger; 052 this.name = logger.getName(); 053 } 054 055 /** 056 * Delegates to the <code>isTraceEnabled<code> method of the wrapped 057 * <code>org.slf4j.Logger</code> instance. 058 */ 059 public boolean isTraceEnabled() { 060 return logger.isTraceEnabled(); 061 } 062 063 /** 064 * Directly delegates to the wrapped <code>org.slf4j.Logger</code> instance. 065 */ 066 public boolean isDebugEnabled() { 067 return logger.isDebugEnabled(); 068 } 069 070 /** 071 * Directly delegates to the wrapped <code>org.slf4j.Logger</code> instance. 072 */ 073 public boolean isInfoEnabled() { 074 return logger.isInfoEnabled(); 075 } 076 077 /** 078 * Directly delegates to the wrapped <code>org.slf4j.Logger</code> instance. 079 */ 080 public boolean isWarnEnabled() { 081 return logger.isWarnEnabled(); 082 } 083 084 /** 085 * Directly delegates to the wrapped <code>org.slf4j.Logger</code> instance. 086 */ 087 public boolean isErrorEnabled() { 088 return logger.isErrorEnabled(); 089 } 090 091 /** 092 * Delegates to the <code>isErrorEnabled<code> method of the wrapped 093 * <code>org.slf4j.Logger</code> instance. 094 */ 095 public boolean isFatalEnabled() { 096 return logger.isErrorEnabled(); 097 } 098 099 /** 100 * Converts the input parameter to String and then delegates to the debug 101 * method of the wrapped <code>org.slf4j.Logger</code> instance. 102 * 103 * @param message 104 * the message to log. Converted to {@link String} 105 */ 106 public void trace(Object message) { 107 logger.log(null, FQCN, LocationAwareLogger.TRACE_INT, String.valueOf(message), null, null); 108 } 109 110 /** 111 * Converts the first input parameter to String and then delegates to the 112 * debug method of the wrapped <code>org.slf4j.Logger</code> instance. 113 * 114 * @param message 115 * the message to log. Converted to {@link String} 116 * @param t 117 * the exception to log 118 */ 119 public void trace(Object message, Throwable t) { 120 logger.log(null, FQCN, LocationAwareLogger.TRACE_INT, String.valueOf(message), null, t); 121 } 122 123 /** 124 * Converts the input parameter to String and then delegates to the wrapped 125 * <code>org.slf4j.Logger</code> instance. 126 * 127 * @param message 128 * the message to log. Converted to {@link String} 129 */ 130 public void debug(Object message) { 131 logger.log(null, FQCN, LocationAwareLogger.DEBUG_INT, String.valueOf(message), null, null); 132 } 133 134 /** 135 * Converts the first input parameter to String and then delegates to the 136 * wrapped <code>org.slf4j.Logger</code> instance. 137 * 138 * @param message 139 * the message to log. Converted to {@link String} 140 * @param t 141 * the exception to log 142 */ 143 public void debug(Object message, Throwable t) { 144 logger.log(null, FQCN, LocationAwareLogger.DEBUG_INT, String.valueOf(message), null, t); 145 } 146 147 /** 148 * Converts the input parameter to String and then delegates to the wrapped 149 * <code>org.slf4j.Logger</code> instance. 150 * 151 * @param message 152 * the message to log. Converted to {@link String} 153 */ 154 public void info(Object message) { 155 logger.log(null, FQCN, LocationAwareLogger.INFO_INT, String.valueOf(message), null, null); 156 } 157 158 /** 159 * Converts the first input parameter to String and then delegates to the 160 * wrapped <code>org.slf4j.Logger</code> instance. 161 * 162 * @param message 163 * the message to log. Converted to {@link String} 164 * @param t 165 * the exception to log 166 */ 167 public void info(Object message, Throwable t) { 168 logger.log(null, FQCN, LocationAwareLogger.INFO_INT, String.valueOf(message), null, t); 169 } 170 171 /** 172 * Converts the input parameter to String and then delegates to the wrapped 173 * <code>org.slf4j.Logger</code> instance. 174 * 175 * @param message 176 * the message to log. Converted to {@link String} 177 */ 178 public void warn(Object message) { 179 logger.log(null, FQCN, LocationAwareLogger.WARN_INT, String.valueOf(message), null, null); 180 } 181 182 /** 183 * Converts the first input parameter to String and then delegates to the 184 * wrapped <code>org.slf4j.Logger</code> instance. 185 * 186 * @param message 187 * the message to log. Converted to {@link String} 188 * @param t 189 * the exception to log 190 */ 191 public void warn(Object message, Throwable t) { 192 logger.log(null, FQCN, LocationAwareLogger.WARN_INT, String.valueOf(message), null, t); 193 } 194 195 /** 196 * Converts the input parameter to String and then delegates to the wrapped 197 * <code>org.slf4j.Logger</code> instance. 198 * 199 * @param message 200 * the message to log. Converted to {@link String} 201 */ 202 public void error(Object message) { 203 logger.log(null, FQCN, LocationAwareLogger.ERROR_INT, String.valueOf(message), null, null); 204 } 205 206 /** 207 * Converts the first input parameter to String and then delegates to the 208 * wrapped <code>org.slf4j.Logger</code> instance. 209 * 210 * @param message 211 * the message to log. Converted to {@link String} 212 * @param t 213 * the exception to log 214 */ 215 public void error(Object message, Throwable t) { 216 logger.log(null, FQCN, LocationAwareLogger.ERROR_INT, String.valueOf(message), null, t); 217 } 218 219 /** 220 * Converts the input parameter to String and then delegates to the error 221 * method of the wrapped <code>org.slf4j.Logger</code> instance. 222 * 223 * @param message 224 * the message to log. Converted to {@link String} 225 */ 226 public void fatal(Object message) { 227 logger.log(null, FQCN, LocationAwareLogger.ERROR_INT, String.valueOf(message), null, null); 228 } 229 230 /** 231 * Converts the first input parameter to String and then delegates to the 232 * error method of the wrapped <code>org.slf4j.Logger</code> instance. 233 * 234 * @param message 235 * the message to log. Converted to {@link String} 236 * @param t 237 * the exception to log 238 */ 239 public void fatal(Object message, Throwable t) { 240 logger.log(null, FQCN, LocationAwareLogger.ERROR_INT, String.valueOf(message), null, t); 241 } 242 243 /** 244 * Replace this instance with a homonymous (same name) logger returned by 245 * LoggerFactory. Note that this method is only called during deserialization. 246 * 247 * @return logger with same name as returned by LoggerFactory 248 * @throws ObjectStreamException 249 */ 250 protected Object readResolve() throws ObjectStreamException { 251 Logger logger = LoggerFactory.getLogger(this.name); 252 return new SLF4JLocationAwareLog((LocationAwareLogger) logger); 253 } 254}