(final Properties properties, String writerName)
| 454 | } |
| 455 | |
| 456 | @SuppressWarnings("rawtypes") |
| 457 | private static LogWriterConfig createWriter(final Properties properties, String writerName) { |
| 458 | final String writer = "w." + writerName + '.'; |
| 459 | final String clazz = getProperty(properties, writer + "class"); |
| 460 | final String levelStr = getProperty(properties, writer + "level"); |
| 461 | final String scope = getProperty(properties, writer + "scope"); |
| 462 | |
| 463 | if (clazz == null) { |
| 464 | return null; |
| 465 | } |
| 466 | |
| 467 | final Class<?> cl; |
| 468 | final Constructor constructor; |
| 469 | try { |
| 470 | cl = Class.forName(clazz); |
| 471 | constructor = cl.getDeclaredConstructor(RingQueue.class, SCSequence.class, int.class); |
| 472 | } catch (ClassNotFoundException e) { |
| 473 | throw new LogError("Class not found " + clazz, e); |
| 474 | } catch (NoSuchMethodException e) { |
| 475 | throw new LogError("Constructor(RingQueue, Sequence, int) expected: " + clazz, e); |
| 476 | } |
| 477 | |
| 478 | int level = 0; |
| 479 | if (levelStr != null) { |
| 480 | for (String s : levelStr.split(",")) { |
| 481 | switch (s.toUpperCase()) { |
| 482 | case "DEBUG": |
| 483 | level |= LogLevel.DEBUG; |
| 484 | break; |
| 485 | case "INFO": |
| 486 | level |= LogLevel.INFO; |
| 487 | break; |
| 488 | case "ERROR": |
| 489 | level |= LogLevel.ERROR; |
| 490 | break; |
| 491 | case "CRITICAL": |
| 492 | level |= LogLevel.CRITICAL; |
| 493 | break; |
| 494 | case "ADVISORY": |
| 495 | level |= LogLevel.ADVISORY; |
| 496 | break; |
| 497 | default: |
| 498 | throw new LogError("Unknown level: " + s); |
| 499 | } |
| 500 | } |
| 501 | } |
| 502 | |
| 503 | if (isForcedDebug()) { |
| 504 | level = level | LogLevel.DEBUG; |
| 505 | } |
| 506 | |
| 507 | // enable all LOG levels above the minimum set one |
| 508 | // ((-1 >>> (msb-1)) << msb) | level |
| 509 | final int msb = Numbers.msb(level); |
| 510 | level = (((-1 >>> (msb - 1)) << msb) | level) & LogLevel.MASK; |
| 511 | |
| 512 | return new LogWriterConfig(scope == null ? EMPTY_STR : scope, level, (ring, seq, level1) -> { |
| 513 | try { |
no test coverage detected