1 /* 2 * Copyright 2001-2004 The Apache Software Foundation. 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 17 package org.apache.commons.logging.impl; 18 19 import java.io.ObjectStreamException; 20 import java.io.Serializable; 21 22 import org.apache.commons.logging.Log; 23 import org.slf4j.Logger; 24 import org.slf4j.LoggerFactory; 25 import org.slf4j.spi.LocationAwareLogger; 26 27 /** 28 * Implementation of {@link Log org.apache.commons.logging.Log} interface which 29 * delegates all processing to a wrapped {@link Logger org.slf4j.Logger} 30 * instance. 31 * 32 * <p> 33 * JCL's FATAL level is mapped to ERROR. All other levels map one to one. 34 * 35 * @author Ceki Gülcü 36 */ 37 public class SLF4JLocationAwareLog implements Log, Serializable { 38 39 private static final long serialVersionUID = -2379157579039314822L; 40 41 // used to store this logger's name to recreate it after serialization 42 protected String name; 43 44 // in both Log4jLogger and Jdk14Logger classes in the original JCL, the 45 // logger instance is transient 46 private final transient LocationAwareLogger logger; 47 48 private static final String FQCN = SLF4JLocationAwareLog.class.getName(); 49 50 public SLF4JLocationAwareLog(LocationAwareLogger logger) { 51 this.logger = logger; 52 this.name = logger.getName(); 53 } 54 55 /** 56 * Delegates to the <code>isTraceEnabled<code> method of the wrapped 57 * <code>org.slf4j.Logger</code> instance. 58 */ 59 public boolean isTraceEnabled() { 60 return logger.isTraceEnabled(); 61 } 62 63 /** 64 * Directly delegates to the wrapped <code>org.slf4j.Logger</code> instance. 65 */ 66 public boolean isDebugEnabled() { 67 return logger.isDebugEnabled(); 68 } 69 70 /** 71 * Directly delegates to the wrapped <code>org.slf4j.Logger</code> instance. 72 */ 73 public boolean isInfoEnabled() { 74 return logger.isInfoEnabled(); 75 } 76 77 /** 78 * Directly delegates to the wrapped <code>org.slf4j.Logger</code> instance. 79 */ 80 public boolean isWarnEnabled() { 81 return logger.isWarnEnabled(); 82 } 83 84 /** 85 * Directly delegates to the wrapped <code>org.slf4j.Logger</code> instance. 86 */ 87 public boolean isErrorEnabled() { 88 return logger.isErrorEnabled(); 89 } 90 91 /** 92 * Delegates to the <code>isErrorEnabled<code> method of the wrapped 93 * <code>org.slf4j.Logger</code> instance. 94 */ 95 public boolean isFatalEnabled() { 96 return logger.isErrorEnabled(); 97 } 98 99 /** 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 if (isTraceEnabled()) { 108 logger.log(null, FQCN, LocationAwareLogger.TRACE_INT, String.valueOf(message), null, null); 109 } 110 } 111 112 /** 113 * Converts the first input parameter to String and then delegates to the 114 * debug method of the wrapped <code>org.slf4j.Logger</code> instance. 115 * 116 * @param message 117 * the message to log. Converted to {@link String} 118 * @param t 119 * the exception to log 120 */ 121 public void trace(Object message, Throwable t) { 122 if (isTraceEnabled()) { 123 logger.log(null, FQCN, LocationAwareLogger.TRACE_INT, String.valueOf(message), null, t); 124 } 125 } 126 127 /** 128 * Converts the input parameter to String and then delegates to the wrapped 129 * <code>org.slf4j.Logger</code> instance. 130 * 131 * @param message 132 * the message to log. Converted to {@link String} 133 */ 134 public void debug(Object message) { 135 if (isDebugEnabled()) { 136 logger.log(null, FQCN, LocationAwareLogger.DEBUG_INT, String.valueOf(message), null, null); 137 } 138 } 139 140 /** 141 * Converts the first input parameter to String and then delegates to the 142 * wrapped <code>org.slf4j.Logger</code> instance. 143 * 144 * @param message 145 * the message to log. Converted to {@link String} 146 * @param t 147 * the exception to log 148 */ 149 public void debug(Object message, Throwable t) { 150 if (isDebugEnabled()) { 151 logger.log(null, FQCN, LocationAwareLogger.DEBUG_INT, String.valueOf(message), null, t); 152 } 153 } 154 155 /** 156 * Converts the input parameter to String and then delegates to the wrapped 157 * <code>org.slf4j.Logger</code> instance. 158 * 159 * @param message 160 * the message to log. Converted to {@link String} 161 */ 162 public void info(Object message) { 163 if (isInfoEnabled()) { 164 logger.log(null, FQCN, LocationAwareLogger.INFO_INT, String.valueOf(message), null, null); 165 } 166 } 167 168 /** 169 * Converts the first input parameter to String and then delegates to the 170 * wrapped <code>org.slf4j.Logger</code> instance. 171 * 172 * @param message 173 * the message to log. Converted to {@link String} 174 * @param t 175 * the exception to log 176 */ 177 public void info(Object message, Throwable t) { 178 if (isInfoEnabled()) { 179 logger.log(null, FQCN, LocationAwareLogger.INFO_INT, String.valueOf(message), null, t); 180 } 181 } 182 183 /** 184 * Converts the input parameter to String and then delegates to the wrapped 185 * <code>org.slf4j.Logger</code> instance. 186 * 187 * @param message 188 * the message to log. Converted to {@link String} 189 */ 190 public void warn(Object message) { 191 if (isWarnEnabled()) { 192 logger.log(null, FQCN, LocationAwareLogger.WARN_INT, String.valueOf(message), null, null); 193 } 194 } 195 196 /** 197 * Converts the first input parameter to String and then delegates to the 198 * wrapped <code>org.slf4j.Logger</code> instance. 199 * 200 * @param message 201 * the message to log. Converted to {@link String} 202 * @param t 203 * the exception to log 204 */ 205 public void warn(Object message, Throwable t) { 206 if (isWarnEnabled()) { 207 logger.log(null, FQCN, LocationAwareLogger.WARN_INT, String.valueOf(message), null, t); 208 } 209 } 210 211 /** 212 * Converts the input parameter to String and then delegates to the wrapped 213 * <code>org.slf4j.Logger</code> instance. 214 * 215 * @param message 216 * the message to log. Converted to {@link String} 217 */ 218 public void error(Object message) { 219 if (isErrorEnabled()) { 220 logger.log(null, FQCN, LocationAwareLogger.ERROR_INT, String.valueOf(message), null, null); 221 } 222 } 223 224 /** 225 * Converts the first input parameter to String and then delegates to the 226 * wrapped <code>org.slf4j.Logger</code> instance. 227 * 228 * @param message 229 * the message to log. Converted to {@link String} 230 * @param t 231 * the exception to log 232 */ 233 public void error(Object message, Throwable t) { 234 if (isErrorEnabled()) { 235 logger.log(null, FQCN, LocationAwareLogger.ERROR_INT, String.valueOf(message), null, t); 236 } 237 } 238 239 /** 240 * Converts the input parameter to String and then delegates to the error 241 * method of the wrapped <code>org.slf4j.Logger</code> instance. 242 * 243 * @param message 244 * the message to log. Converted to {@link String} 245 */ 246 public void fatal(Object message) { 247 if (isErrorEnabled()) { 248 logger.log(null, FQCN, LocationAwareLogger.ERROR_INT, String.valueOf(message), null, null); 249 } 250 } 251 252 /** 253 * Converts the first input parameter to String and then delegates to the 254 * error method of the wrapped <code>org.slf4j.Logger</code> instance. 255 * 256 * @param message 257 * the message to log. Converted to {@link String} 258 * @param t 259 * the exception to log 260 */ 261 public void fatal(Object message, Throwable t) { 262 if (isErrorEnabled()) { 263 logger.log(null, FQCN, LocationAwareLogger.ERROR_INT, String.valueOf(message), null, t); 264 } 265 } 266 267 /** 268 * Replace this instance with a homonymous (same name) logger returned by 269 * LoggerFactory. Note that this method is only called during deserialization. 270 * 271 * @return logger with same name as returned by LoggerFactory 272 * @throws ObjectStreamException 273 */ 274 protected Object readResolve() throws ObjectStreamException { 275 Logger logger = LoggerFactory.getLogger(this.name); 276 return new SLF4JLocationAwareLog((LocationAwareLogger) logger); 277 } 278 }