1 61 62 package org.logicalcobwebs.logging.impl; 63 64 import org.logicalcobwebs.logging.Log; 65 66 import java.io.InputStream; 67 import java.lang.reflect.Method; 68 import java.security.AccessControlException; 69 import java.text.DateFormat; 70 import java.text.SimpleDateFormat; 71 import java.util.Date; 72 import java.util.Enumeration; 73 import java.util.Properties; 74 75 110 public class SimpleLog implements Log { 111 112 114 115 protected static final String SYSTEM_PREFIX = 116 "org.apache.commons.logging.simplelog."; 117 118 119 protected static final Properties SIMLE_LOG_PROPS = new Properties (); 120 121 private static boolean showLogName = false; 122 126 private static boolean showShortName = true; 127 128 private static boolean showDateTime = false; 129 130 private static DateFormat dateFormatter = null; 131 132 134 135 136 public static final int LOG_LEVEL_TRACE = 1; 137 138 public static final int LOG_LEVEL_DEBUG = 2; 139 140 public static final int LOG_LEVEL_INFO = 3; 141 142 public static final int LOG_LEVEL_WARN = 4; 143 144 public static final int LOG_LEVEL_ERROR = 5; 145 146 public static final int LOG_LEVEL_FATAL = 6; 147 148 149 public static final int LOG_LEVEL_ALL = (LOG_LEVEL_TRACE - 1); 150 151 152 public static final int LOG_LEVEL_OFF = (LOG_LEVEL_FATAL + 1); 153 154 156 static { 158 159 try { 160 Enumeration enum = System.getProperties ().propertyNames (); 162 while (enum.hasMoreElements ()) { 163 String name = (String) (enum.nextElement ()); 164 if (null != name && name.startsWith (SYSTEM_PREFIX)) { 165 SIMLE_LOG_PROPS.setProperty (name, System.getProperty (name)); 166 } 167 } 168 169 ClassLoader classLoader = null; 171 try { 172 Method method = 173 Thread.class.getMethod ("getContextClassLoader", null); 174 classLoader = (ClassLoader) 175 method.invoke (Thread.currentThread (), null); 176 } catch (Exception e) { 177 ; } 179 if (classLoader == null) { 180 classLoader = SimpleLog.class.getClassLoader (); 181 } 182 183 InputStream in = 185 classLoader.getResourceAsStream ("simplelog.properties"); 186 if (null != in) { 187 try { 188 SIMLE_LOG_PROPS.load (in); 189 in.close (); 190 } catch (java.io.IOException e) { 191 } 193 } 194 195 202 203 String prop = SIMLE_LOG_PROPS.getProperty (SYSTEM_PREFIX + "showlogname"); 204 205 if (prop != null) { 206 showLogName = "true".equalsIgnoreCase (prop); 207 } 208 209 prop = SIMLE_LOG_PROPS.getProperty (SYSTEM_PREFIX + "showShortLogname"); 210 if (prop != null) { 211 showShortName = "true".equalsIgnoreCase (prop); 212 } 213 214 prop = SIMLE_LOG_PROPS.getProperty (SYSTEM_PREFIX + "showdatetime"); 215 if (prop != null) { 216 showDateTime = "true".equalsIgnoreCase (prop); 217 } 218 219 if (showDateTime) { 220 dateFormatter = new SimpleDateFormat ( 221 SIMLE_LOG_PROPS.getProperty ( 222 SYSTEM_PREFIX + "dateformat", "yyyy/MM/dd HH:mm:ss:SSS zzz")); 223 } 224 } catch (AccessControlException e) { 225 } 227 } 228 229 230 232 233 private String logName = null; 234 235 private int currentLogLevel; 236 237 private String prefix = null; 238 239 240 242 247 public SimpleLog (String name) { 248 249 logName = name; 250 251 setLevel (SimpleLog.LOG_LEVEL_INFO); 255 256 String lvl = SIMLE_LOG_PROPS.getProperty (SYSTEM_PREFIX + "log." + logName); 258 int i = String.valueOf (name).lastIndexOf ("."); 259 while (null == lvl && i > -1) { 260 name = name.substring (0, i); 261 lvl = SIMLE_LOG_PROPS.getProperty (SYSTEM_PREFIX + "log." + name); 262 i = String.valueOf (name).lastIndexOf ("."); 263 } 264 265 if (null == lvl) { 266 lvl = SIMLE_LOG_PROPS.getProperty (SYSTEM_PREFIX + "defaultlog"); 267 } 268 269 if ("all".equalsIgnoreCase (lvl)) { 270 setLevel (SimpleLog.LOG_LEVEL_ALL); 271 } else if ("trace".equalsIgnoreCase (lvl)) { 272 setLevel (SimpleLog.LOG_LEVEL_TRACE); 273 } else if ("debug".equalsIgnoreCase (lvl)) { 274 setLevel (SimpleLog.LOG_LEVEL_DEBUG); 275 } else if ("info".equalsIgnoreCase (lvl)) { 276 setLevel (SimpleLog.LOG_LEVEL_INFO); 277 } else if ("warn".equalsIgnoreCase (lvl)) { 278 setLevel (SimpleLog.LOG_LEVEL_WARN); 279 } else if ("error".equalsIgnoreCase (lvl)) { 280 setLevel (SimpleLog.LOG_LEVEL_ERROR); 281 } else if ("fatal".equalsIgnoreCase (lvl)) { 282 setLevel (SimpleLog.LOG_LEVEL_FATAL); 283 } else if ("off".equalsIgnoreCase (lvl)) { 284 setLevel (SimpleLog.LOG_LEVEL_OFF); 285 } 286 287 } 288 289 290 292 297 public void setLevel (int currentLogLevel) { 298 299 this.currentLogLevel = currentLogLevel; 300 301 } 302 303 306 public int getLevel () { 307 308 return currentLogLevel; 309 } 310 311 312 314 315 320 protected void log (int type, Object message, Throwable t) { 321 StringBuffer buf = new StringBuffer (); 323 324 if (showDateTime) { 326 buf.append (dateFormatter.format (new Date ())); 327 buf.append (" "); 328 } 329 330 switch (type) { 332 case SimpleLog.LOG_LEVEL_TRACE: 333 buf.append ("[TRACE] "); 334 break; 335 case SimpleLog.LOG_LEVEL_DEBUG: 336 buf.append ("[DEBUG] "); 337 break; 338 case SimpleLog.LOG_LEVEL_INFO: 339 buf.append ("[INFO] "); 340 break; 341 case SimpleLog.LOG_LEVEL_WARN: 342 buf.append ("[WARN] "); 343 break; 344 case SimpleLog.LOG_LEVEL_ERROR: 345 buf.append ("[ERROR] "); 346 break; 347 case SimpleLog.LOG_LEVEL_FATAL: 348 buf.append ("[FATAL] "); 349 break; 350 } 351 352 if (showShortName) { 354 if (prefix == null) { 355 prefix = logName.substring (logName.lastIndexOf (".") + 1) + " - "; 357 prefix = prefix.substring (prefix.lastIndexOf ("/") + 1) + "-"; 358 } 359 buf.append (prefix); 360 } else if (showLogName) { 361 buf.append (String.valueOf (logName)).append (" - "); 362 } 363 364 buf.append (String.valueOf (message)); 366 367 if (t != null) { 369 buf.append (" <"); 370 buf.append (t.toString ()); 371 buf.append (">"); 372 t.printStackTrace (); 373 } 374 375 System.err.println (buf.toString ()); 377 } 378 379 384 protected boolean isLevelEnabled (int logLevel) { 385 return (logLevel >= currentLogLevel); 388 } 389 390 391 393 394 397 public final void debug (Object message) { 398 399 if (isLevelEnabled (SimpleLog.LOG_LEVEL_DEBUG)) { 400 log (SimpleLog.LOG_LEVEL_DEBUG, message, null); 401 } 402 } 403 404 407 public final void debug (Object message, Throwable t) { 408 409 if (isLevelEnabled (SimpleLog.LOG_LEVEL_DEBUG)) { 410 log (SimpleLog.LOG_LEVEL_DEBUG, message, t); 411 } 412 } 413 414 417 public final void trace (Object message) { 418 419 if (isLevelEnabled (SimpleLog.LOG_LEVEL_TRACE)) { 420 log (SimpleLog.LOG_LEVEL_TRACE, message, null); 421 } 422 } 423 424 427 public final void trace (Object message, Throwable t) { 428 429 if (isLevelEnabled (SimpleLog.LOG_LEVEL_TRACE)) { 430 log (SimpleLog.LOG_LEVEL_TRACE, message, t); 431 } 432 } 433 434 437 public final void info (Object message) { 438 439 if (isLevelEnabled (SimpleLog.LOG_LEVEL_INFO)) { 440 log (SimpleLog.LOG_LEVEL_INFO, message, null); 441 } 442 } 443 444 447 public final void info (Object message, Throwable t) { 448 449 if (isLevelEnabled (SimpleLog.LOG_LEVEL_INFO)) { 450 log (SimpleLog.LOG_LEVEL_INFO, message, t); 451 } 452 } 453 454 457 public final void warn (Object message) { 458 459 if (isLevelEnabled (SimpleLog.LOG_LEVEL_WARN)) { 460 log (SimpleLog.LOG_LEVEL_WARN, message, null); 461 } 462 } 463 464 467 public final void warn (Object message, Throwable t) { 468 469 if (isLevelEnabled (SimpleLog.LOG_LEVEL_WARN)) { 470 log (SimpleLog.LOG_LEVEL_WARN, message, t); 471 } 472 } 473 474 477 public final void error (Object message) { 478 479 if (isLevelEnabled (SimpleLog.LOG_LEVEL_ERROR)) { 480 log (SimpleLog.LOG_LEVEL_ERROR, message, null); 481 } 482 } 483 484 487 public final void error (Object message, Throwable t) { 488 489 if (isLevelEnabled (SimpleLog.LOG_LEVEL_ERROR)) { 490 log (SimpleLog.LOG_LEVEL_ERROR, message, t); 491 } 492 } 493 494 497 public final void fatal (Object message) { 498 499 if (isLevelEnabled (SimpleLog.LOG_LEVEL_FATAL)) { 500 log (SimpleLog.LOG_LEVEL_FATAL, message, null); 501 } 502 } 503 504 507 public final void fatal (Object message, Throwable t) { 508 509 if (isLevelEnabled (SimpleLog.LOG_LEVEL_FATAL)) { 510 log (SimpleLog.LOG_LEVEL_FATAL, message, t); 511 } 512 } 513 514 521 public final boolean isDebugEnabled () { 522 523 return isLevelEnabled (SimpleLog.LOG_LEVEL_DEBUG); 524 } 525 526 533 public final boolean isErrorEnabled () { 534 535 return isLevelEnabled (SimpleLog.LOG_LEVEL_ERROR); 536 } 537 538 545 public final boolean isFatalEnabled () { 546 547 return isLevelEnabled (SimpleLog.LOG_LEVEL_FATAL); 548 } 549 550 557 public final boolean isInfoEnabled () { 558 559 return isLevelEnabled (SimpleLog.LOG_LEVEL_INFO); 560 } 561 562 569 public final boolean isTraceEnabled () { 570 571 return isLevelEnabled (SimpleLog.LOG_LEVEL_TRACE); 572 } 573 574 581 public final boolean isWarnEnabled () { 582 583 return isLevelEnabled (SimpleLog.LOG_LEVEL_WARN); 584 } 585 } 586 587 588 | Popular Tags |