1 package org.apache.ojb.broker.util.logging; 2 3 17 18 import java.net.URL ; 19 import java.util.Enumeration ; 20 21 import org.apache.log4j.LogManager; 22 import org.apache.log4j.Level; 23 import org.apache.log4j.PropertyConfigurator; 24 import org.apache.ojb.broker.util.ClassHelper; 25 import org.apache.ojb.broker.util.configuration.Configuration; 26 import org.apache.ojb.broker.util.configuration.ConfigurationException; 27 28 45 public class Log4jLoggerImpl implements Logger 46 { 47 static private final String FQCN = Log4jLoggerImpl.class.getName(); 48 49 private static boolean log4jConfigured = false; 50 51 private transient org.apache.log4j.Logger logger; 52 private String name; 53 54 55 private static synchronized boolean isLog4JConfigured() 56 { 57 if(!log4jConfigured) 58 { 59 Enumeration en = org.apache.log4j.Logger.getRootLogger().getAllAppenders(); 60 61 if (!(en instanceof org.apache.log4j.helpers.NullEnumeration)) 62 { 63 log4jConfigured = true; 64 } 65 else 66 { 67 Enumeration cats = LogManager.getCurrentLoggers(); 68 while (cats.hasMoreElements()) 69 { 70 org.apache.log4j.Logger c = (org.apache.log4j.Logger) cats.nextElement(); 71 if (!(c.getAllAppenders() instanceof org.apache.log4j.helpers.NullEnumeration)) 72 { 73 log4jConfigured = true; 74 } 75 } 76 } 77 if(log4jConfigured) 78 { 79 String msg = "Log4J is already configured, will not search for log4j properties file"; 80 LoggerFactory.getBootLogger().info(msg); 81 } 82 else 83 { 84 LoggerFactory.getBootLogger().info("Log4J is not configured"); 85 } 86 } 87 return log4jConfigured; 88 } 89 90 95 private static synchronized void initializeLog4JSubSystem(String configFile) 96 { 97 LoggerFactory.getBootLogger().info("Initializing Log4J using file: '" + configFile + "'"); 98 if(configFile == null || "".equals(configFile.trim())) 99 { 100 LoggerFactory.getBootLogger().warn("No log4j configuration file specified"); 102 } 103 else 104 { 105 URL url = ClassHelper.getResource(configFile); 107 LoggerFactory.getBootLogger().info("Initializing Log4J : resource from config file:" + url); 108 if (url != null) 109 { 110 PropertyConfigurator.configure(url); 111 } 112 else 114 { 115 PropertyConfigurator.configure(configFile); 116 } 117 } 118 log4jConfigured = true; 119 } 120 121 public Log4jLoggerImpl(String name) 122 { 123 this.name = name; 124 } 125 126 130 public void configure(Configuration config) throws ConfigurationException 131 { 132 if (!isLog4JConfigured()) 133 { 134 LoggingConfiguration lc = (LoggingConfiguration) config; 135 initializeLog4JSubSystem(lc.getLoggerConfigFile()); 136 } 137 } 138 139 144 private org.apache.log4j.Logger getLogger() 145 { 146 150 if (logger == null) 151 { 152 logger = org.apache.log4j.Logger.getLogger(name); 153 } 154 return logger; 155 } 156 157 public String getName() 158 { 159 return name; 160 } 161 162 private Level getLevel() 163 { 164 return getLogger().getEffectiveLevel(); 165 } 166 167 172 public final void debug(Object pObject) 173 { 174 getLogger().log(FQCN, Level.DEBUG, pObject, null); 175 } 176 177 182 public final void info(Object pObject) 183 { 184 getLogger().log(FQCN, Level.INFO, pObject, null); 185 } 186 187 192 public final void warn(Object pObject) 193 { 194 getLogger().log(FQCN, Level.WARN, pObject, null); 195 } 196 197 202 public final void error(Object pObject) 203 { 204 getLogger().log(FQCN, Level.ERROR, pObject, null); 205 } 206 207 212 public final void fatal(Object pObject) 213 { 214 getLogger().log(FQCN, Level.FATAL, pObject, null); 215 } 216 217 public void debug(Object message, Throwable obj) 218 { 219 getLogger().log(FQCN, Level.DEBUG, message, obj); 220 } 221 222 public void error(Object message, Throwable obj) 223 { 224 getLogger().log(FQCN, Level.ERROR, message, obj); 225 } 226 227 public void fatal(Object message, Throwable obj) 228 { 229 getLogger().log(FQCN, Level.FATAL, message, obj); 230 } 231 232 public void info(Object message, Throwable obj) 233 { 234 getLogger().log(FQCN, Level.INFO, message, obj); 235 } 236 237 public void warn(Object message, Throwable obj) 238 { 239 getLogger().log(FQCN, Level.WARN, message, obj); 240 } 241 242 public void safeDebug(String message, Object obj) 243 { 244 if (Level.DEBUG.isGreaterOrEqual(getLevel())) 245 { 246 String toString = null; 247 if (obj != null) 248 { 249 try 250 { 251 toString = obj.toString(); 252 } 253 catch (Throwable t) 254 { 255 toString = "BAD toString() impl for " + obj.getClass().getName(); 256 } 257 } 258 debug(message + " : " + toString); 259 } 260 } 261 262 public void safeDebug(String message, Object obj, Throwable throwable) 263 { 264 if (Level.DEBUG.isGreaterOrEqual(getLevel())) 265 { 266 String toString = null; 267 if (obj != null) 268 { 269 try 270 { 271 toString = obj.toString(); 272 } 273 catch (Throwable t) 274 { 275 toString = "BAD toString() impl for " + obj.getClass().getName(); 276 } 277 } 278 debug(message + " : " + toString, throwable); 279 } 280 } 281 282 public void safeInfo(String message, Object obj) 283 { 284 if (Level.INFO.isGreaterOrEqual(getLevel())) 285 { 286 String toString = null; 287 if (obj != null) 288 { 289 try 290 { 291 toString = obj.toString(); 292 } 293 catch (Throwable t) 294 { 295 toString = "BAD toString() impl for " + obj.getClass().getName(); 296 } 297 } 298 info(message + " : " + toString); 299 } 300 } 301 302 public void safeInfo(String message, Object obj, Throwable throwable) 303 { 304 if (Level.INFO.isGreaterOrEqual(getLevel())) 305 { 306 String toString = null; 307 if (obj != null) 308 { 309 try 310 { 311 toString = obj.toString(); 312 } 313 catch (Throwable t) 314 { 315 toString = "BAD toString() impl for " + obj.getClass().getName(); 316 } 317 } 318 info(message + " : " + toString, throwable); 319 } 320 } 321 322 public void safeWarn(String message, Object obj) 323 { 324 if (Level.WARN.isGreaterOrEqual(getLevel())) 325 { 326 String toString; 327 try 328 { 329 toString = obj.toString(); 330 } 331 catch (Throwable t) 332 { 333 toString = "BAD toString() impl for " + obj.getClass().getName(); 334 } 335 warn(message + " : " + toString); 336 } 337 } 338 339 public void safeWarn(String message, Object obj, Throwable throwable) 340 { 341 if (Level.WARN.isGreaterOrEqual(getLevel())) 342 { 343 String toString; 344 try 345 { 346 toString = obj.toString(); 347 } 348 catch (Throwable t) 349 { 350 toString = "BAD toString() impl for " + obj.getClass().getName(); 351 } 352 warn(message + " : " + toString, throwable); 353 } 354 } 355 356 public void safeError(String message, Object obj) 357 { 358 if (Level.ERROR.isGreaterOrEqual(getLevel())) 359 { 360 String toString; 361 try 362 { 363 toString = obj.toString(); 364 } 365 catch (Throwable t) 366 { 367 toString = "BAD toString() impl for " + obj.getClass().getName(); 368 } 369 error(message + " : " + toString); 370 } 371 } 372 373 public void safeError(String message, Object obj, Throwable throwable) 374 { 375 if (Level.ERROR.isGreaterOrEqual(getLevel())) 376 { 377 String toString; 378 try 379 { 380 toString = obj.toString(); 381 } 382 catch (Throwable t) 383 { 384 toString = "BAD toString() impl for " + obj.getClass().getName(); 385 } 386 error(message + " : " + toString, throwable); 387 } 388 } 389 390 public void safeFatal(String message, Object obj) 391 { 392 if (Level.FATAL.isGreaterOrEqual(getLevel())) 393 { 394 String toString; 395 try 396 { 397 toString = obj.toString(); 398 } 399 catch (Throwable t) 400 { 401 toString = "BAD toString() impl for " + obj.getClass().getName(); 402 } 403 fatal(message + " : " + toString); 404 } 405 } 406 407 public void safeFatal(String message, Object obj, Throwable throwable) 408 { 409 if (Level.FATAL.isGreaterOrEqual(getLevel())) 410 { 411 String toString; 412 try 413 { 414 toString = obj.toString(); 415 } 416 catch (Throwable t) 417 { 418 toString = "BAD toString() impl for " + obj.getClass().getName(); 419 } 420 fatal(message + " : " + toString, throwable); 421 } 422 } 423 424 public boolean isDebugEnabled() 425 { 426 return getLogger().isDebugEnabled(); 427 } 428 429 public boolean isEnabledFor(int priority) 430 { 431 org.apache.log4j.Logger log4j = getLogger(); 432 switch(priority) 433 { 434 case Logger.DEBUG: return log4j.isDebugEnabled(); 435 case Logger.INFO: return log4j.isInfoEnabled(); 436 case Logger.WARN: return log4j.isEnabledFor(org.apache.log4j.Priority.WARN); 437 case Logger.ERROR: return log4j.isEnabledFor(org.apache.log4j.Priority.ERROR); 438 case Logger.FATAL: return log4j.isEnabledFor(org.apache.log4j.Priority.FATAL); 439 } 440 return false; 441 } 442 } 443 | Popular Tags |