001/* 002 * This is free and unencumbered software released into the public domain. 003 * 004 * Please see https://github.com/binkley/binkley/blob/master/LICENSE.md. 005 */ 006 007package hm.binkley.util.logging; 008 009import org.slf4j.Logger; 010import org.slf4j.Marker; 011 012/** 013 * {@code Level} inverts calls to SLF4J providing an object for methods corresponding to each 014 * logging level. 015 * 016 * @author <a href="mailto:binkley@alumni.rice.edu">B. K. Oxley (binkley)</a> 017 */ 018public enum Level { 019 /** All log calls are ignored. */ 020 NONE { 021 @Override 022 public boolean isEnabled(final Logger logger) { 023 return false; 024 } 025 026 @Override 027 public void log(final Logger logger, final String msg) { 028 } 029 030 @Override 031 public void log(final Logger logger, final String format, final Object arg) { 032 } 033 034 @Override 035 public void log(final Logger logger, final String format, final Object arg1, 036 final Object arg2) { 037 } 038 039 @Override 040 public void log(final Logger logger, final String format, final Object... arguments) { 041 } 042 043 @Override 044 public void log(final Logger logger, final String msg, final Throwable t) { 045 } 046 047 @Override 048 public boolean isEnabled(final Logger logger, final Marker marker) { 049 return false; 050 } 051 052 @Override 053 public void log(final Logger logger, final Marker marker, final String msg) { 054 } 055 056 @Override 057 public void log(final Logger logger, final Marker marker, final String format, 058 final Object arg) { 059 } 060 061 @Override 062 public void log(final Logger logger, final Marker marker, final String format, 063 final Object arg1, final Object arg2) { 064 } 065 066 @Override 067 public void log(final Logger logger, final Marker marker, final String format, 068 final Object... argArray) { 069 } 070 071 @Override 072 public void log(final Logger logger, final Marker marker, final String msg, 073 final Throwable t) { 074 } 075 }, 076 /** All log calls are at the TRACE level. */ 077 TRACE { 078 @Override 079 public boolean isEnabled(final Logger logger) { 080 return logger.isTraceEnabled(); 081 } 082 083 @Override 084 public void log(final Logger logger, final String msg) { 085 logger.trace(msg); 086 } 087 088 @Override 089 public void log(final Logger logger, final String format, final Object arg) { 090 logger.trace(format, arg); 091 } 092 093 @Override 094 public void log(final Logger logger, final String format, final Object arg1, 095 final Object arg2) { 096 logger.trace(format, arg1, arg2); 097 } 098 099 @Override 100 public void log(final Logger logger, final String format, final Object... arguments) { 101 logger.trace(format, arguments); 102 } 103 104 @Override 105 public void log(final Logger logger, final String msg, final Throwable t) { 106 logger.trace(msg, t); 107 } 108 109 @Override 110 public boolean isEnabled(final Logger logger, final Marker marker) { 111 return logger.isTraceEnabled(marker); 112 } 113 114 @Override 115 public void log(final Logger logger, final Marker marker, final String msg) { 116 logger.trace(marker, msg); 117 } 118 119 @Override 120 public void log(final Logger logger, final Marker marker, final String format, 121 final Object arg) { 122 logger.trace(marker, format, arg); 123 } 124 125 @Override 126 public void log(final Logger logger, final Marker marker, final String format, 127 final Object arg1, final Object arg2) { 128 logger.trace(marker, format, arg1, arg2); 129 } 130 131 @Override 132 public void log(final Logger logger, final Marker marker, final String format, 133 final Object... argArray) { 134 logger.trace(marker, format, argArray); 135 } 136 137 @Override 138 public void log(final Logger logger, final Marker marker, final String msg, 139 final Throwable t) { 140 logger.trace(marker, msg, t); 141 } 142 }, 143 /** All log calls are at the DEBUG level. */ 144 DEBUG { 145 @Override 146 public boolean isEnabled(final Logger logger) { 147 return logger.isDebugEnabled(); 148 } 149 150 @Override 151 public void log(final Logger logger, final String msg) { 152 logger.debug(msg); 153 } 154 155 @Override 156 public void log(final Logger logger, final String format, final Object arg) { 157 logger.debug(format, arg); 158 } 159 160 @Override 161 public void log(final Logger logger, final String format, final Object arg1, 162 final Object arg2) { 163 logger.debug(format, arg1, arg2); 164 } 165 166 @Override 167 public void log(final Logger logger, final String format, final Object... arguments) { 168 logger.debug(format, arguments); 169 } 170 171 @Override 172 public void log(final Logger logger, final String msg, final Throwable t) { 173 logger.debug(msg, t); 174 } 175 176 @Override 177 public boolean isEnabled(final Logger logger, final Marker marker) { 178 return logger.isDebugEnabled(marker); 179 } 180 181 @Override 182 public void log(final Logger logger, final Marker marker, final String msg) { 183 logger.debug(marker, msg); 184 } 185 186 @Override 187 public void log(final Logger logger, final Marker marker, final String format, 188 final Object arg) { 189 logger.debug(marker, format, arg); 190 } 191 192 @Override 193 public void log(final Logger logger, final Marker marker, final String format, 194 final Object arg1, final Object arg2) { 195 logger.debug(marker, format, arg1, arg2); 196 } 197 198 @Override 199 public void log(final Logger logger, final Marker marker, final String format, 200 final Object... argArray) { 201 logger.debug(marker, format, argArray); 202 } 203 204 @Override 205 public void log(final Logger logger, final Marker marker, final String msg, 206 final Throwable t) { 207 logger.debug(marker, msg, t); 208 } 209 }, 210 /** All log calls are at the INFO level. */ 211 INFO { 212 @Override 213 public boolean isEnabled(final Logger logger) { 214 return logger.isInfoEnabled(); 215 } 216 217 @Override 218 public void log(final Logger logger, final String msg) { 219 logger.info(msg); 220 } 221 222 @Override 223 public void log(final Logger logger, final String format, final Object arg) { 224 logger.info(format, arg); 225 } 226 227 @Override 228 public void log(final Logger logger, final String format, final Object arg1, 229 final Object arg2) { 230 logger.info(format, arg1, arg2); 231 } 232 233 @Override 234 public void log(final Logger logger, final String format, final Object... arguments) { 235 logger.info(format, arguments); 236 } 237 238 @Override 239 public void log(final Logger logger, final String msg, final Throwable t) { 240 logger.info(msg, t); 241 } 242 243 @Override 244 public boolean isEnabled(final Logger logger, final Marker marker) { 245 return logger.isInfoEnabled(marker); 246 } 247 248 @Override 249 public void log(final Logger logger, final Marker marker, final String msg) { 250 logger.info(marker, msg); 251 } 252 253 @Override 254 public void log(final Logger logger, final Marker marker, final String format, 255 final Object arg) { 256 logger.info(marker, format, arg); 257 } 258 259 @Override 260 public void log(final Logger logger, final Marker marker, final String format, 261 final Object arg1, final Object arg2) { 262 logger.info(marker, format, arg1, arg2); 263 } 264 265 @Override 266 public void log(final Logger logger, final Marker marker, final String format, 267 final Object... argArray) { 268 logger.info(marker, format, argArray); 269 } 270 271 @Override 272 public void log(final Logger logger, final Marker marker, final String msg, 273 final Throwable t) { 274 logger.info(marker, msg, t); 275 } 276 }, 277 /** All log calls are at the WARN level. */ 278 WARN { 279 @Override 280 public boolean isEnabled(final Logger logger) { 281 return logger.isWarnEnabled(); 282 } 283 284 @Override 285 public void log(final Logger logger, final String msg) { 286 logger.warn(msg); 287 } 288 289 @Override 290 public void log(final Logger logger, final String format, final Object arg) { 291 logger.warn(format, arg); 292 } 293 294 @Override 295 public void log(final Logger logger, final String format, final Object arg1, 296 final Object arg2) { 297 logger.warn(format, arg1, arg2); 298 } 299 300 @Override 301 public void log(final Logger logger, final String format, final Object... arguments) { 302 logger.warn(format, arguments); 303 } 304 305 @Override 306 public void log(final Logger logger, final String msg, final Throwable t) { 307 logger.warn(msg, t); 308 } 309 310 @Override 311 public boolean isEnabled(final Logger logger, final Marker marker) { 312 return logger.isWarnEnabled(marker); 313 } 314 315 @Override 316 public void log(final Logger logger, final Marker marker, final String msg) { 317 logger.warn(marker, msg); 318 } 319 320 @Override 321 public void log(final Logger logger, final Marker marker, final String format, 322 final Object arg) { 323 logger.warn(marker, format, arg); 324 } 325 326 @Override 327 public void log(final Logger logger, final Marker marker, final String format, 328 final Object arg1, final Object arg2) { 329 logger.warn(marker, format, arg1, arg2); 330 } 331 332 @Override 333 public void log(final Logger logger, final Marker marker, final String format, 334 final Object... argArray) { 335 logger.warn(marker, format, argArray); 336 } 337 338 @Override 339 public void log(final Logger logger, final Marker marker, final String msg, 340 final Throwable t) { 341 logger.warn(marker, msg, t); 342 } 343 }, 344 /** All log calls are at the ERROR level. */ 345 ERROR { 346 @Override 347 public boolean isEnabled(final Logger logger) { 348 return logger.isErrorEnabled(); 349 } 350 351 @Override 352 public void log(final Logger logger, final String msg) { 353 logger.error(msg); 354 } 355 356 @Override 357 public void log(final Logger logger, final String format, final Object arg) { 358 logger.error(format, arg); 359 } 360 361 @Override 362 public void log(final Logger logger, final String format, final Object arg1, 363 final Object arg2) { 364 logger.error(format, arg1, arg2); 365 } 366 367 @Override 368 public void log(final Logger logger, final String format, final Object... arguments) { 369 logger.error(format, arguments); 370 } 371 372 @Override 373 public void log(final Logger logger, final String msg, final Throwable t) { 374 logger.error(msg, t); 375 } 376 377 @Override 378 public boolean isEnabled(final Logger logger, final Marker marker) { 379 return logger.isErrorEnabled(marker); 380 } 381 382 @Override 383 public void log(final Logger logger, final Marker marker, final String msg) { 384 logger.error(marker, msg); 385 } 386 387 @Override 388 public void log(final Logger logger, final Marker marker, final String format, 389 final Object arg) { 390 logger.error(marker, format, arg); 391 } 392 393 @Override 394 public void log(final Logger logger, final Marker marker, final String format, 395 final Object arg1, final Object arg2) { 396 logger.error(marker, format, arg1, arg2); 397 } 398 399 @Override 400 public void log(final Logger logger, final Marker marker, final String format, 401 final Object... argArray) { 402 logger.error(marker, format, argArray); 403 } 404 405 @Override 406 public void log(final Logger logger, final Marker marker, final String msg, 407 final Throwable t) { 408 logger.error(marker, msg, t); 409 } 410 }; 411 412 /** 413 * Is the logger instance enabled for this level? 414 * 415 * @return True if this Logger is enabled for this level, false otherwise. 416 */ 417 public abstract boolean isEnabled(final Logger logger); 418 419 /** 420 * Log a message at this level. 421 * 422 * @param msg the message string to be logged 423 */ 424 public abstract void log(final Logger logger, String msg); 425 426 /** 427 * Log a message at this level according to the specified format and argument. <p/> <p>This form 428 * avoids superfluous object creation when the logger is disabled for this level. </p> 429 * 430 * @param format the format string 431 * @param arg the argument 432 */ 433 public abstract void log(final Logger logger, String format, Object arg); 434 435 /** 436 * Log a message at this level according to the specified format and arguments. <p/> <p>This 437 * form avoids superfluous object creation when the logger is disabled for this level. </p> 438 * 439 * @param format the format string 440 * @param arg1 the first argument 441 * @param arg2 the second argument 442 */ 443 public abstract void log(final Logger logger, String format, Object arg1, Object arg2); 444 445 /** 446 * Log a message at this level according to the specified format and arguments. <p/> <p>This 447 * form avoids superfluous string concatenation when the logger is disabled for this level. 448 * However, this variant incurs the hidden (and relatively small) cost of creating an {@code 449 * Object[]} before invoking the method, even if this logger is disabled for this level. The 450 * variants taking {@link #log(Logger, String, Object) one} and {@link #log(Logger, String, 451 * Object, Object) two} arguments exist solely in order to avoid this hidden cost.</p> 452 * 453 * @param format the format string 454 * @param arguments a list of 3 or more arguments 455 */ 456 public abstract void log(final Logger logger, String format, Object... arguments); 457 458 /** 459 * Log an exception (throwable) at this level with an accompanying message. 460 * 461 * @param msg the message accompanying the exception 462 * @param t the exception (throwable) to log 463 */ 464 public abstract void log(final Logger logger, String msg, Throwable t); 465 466 /** 467 * Similar to {@link #isEnabled(Logger)} method except that the marker data is also taken into 468 * account. 469 * 470 * @param marker The marker data to take into consideration 471 * 472 * @return True if this Logger is enabled for this level, false otherwise. 473 */ 474 public abstract boolean isEnabled(final Logger logger, Marker marker); 475 476 /** 477 * Log a message with the specific Marker at this level. 478 * 479 * @param marker the marker data specific to this log statement 480 * @param msg the message string to be logged 481 */ 482 public abstract void log(final Logger logger, Marker marker, String msg); 483 484 /** 485 * This method is similar to {@link #log(Logger, String, Object)} method except that the marker 486 * data is also taken into consideration. 487 * 488 * @param marker the marker data specific to this log statement 489 * @param format the format string 490 * @param arg the argument 491 */ 492 public abstract void log(final Logger logger, Marker marker, String format, Object arg); 493 494 /** 495 * This method is similar to {@link #log(Logger, String, Object, Object)} method except that the 496 * marker data is also taken into consideration. 497 * 498 * @param marker the marker data specific to this log statement 499 * @param format the format string 500 * @param arg1 the first argument 501 * @param arg2 the second argument 502 */ 503 public abstract void log(final Logger logger, Marker marker, String format, Object arg1, 504 Object arg2); 505 506 /** 507 * This method is similar to {@link #log(Logger, String, Object...)} method except that the 508 * marker data is also taken into consideration. 509 * 510 * @param marker the marker data specific to this log statement 511 * @param format the format string 512 * @param argArray an array of arguments 513 */ 514 public abstract void log(final Logger logger, Marker marker, String format, Object... argArray); 515 516 /** 517 * This method is similar to {@link #log(Logger, String, Throwable)} method except that the 518 * marker data is also taken into consideration. 519 * 520 * @param marker the marker data specific to this log statement 521 * @param msg the message accompanying the exception 522 * @param t the exception (throwable) to log 523 */ 524 public abstract void log(final Logger logger, Marker marker, String msg, Throwable t); 525}