diff --git a/src/main/java/elf4j/impl/core/writer/pattern/GroupPattern.java b/src/main/java/elf4j/impl/core/writer/pattern/GroupPattern.java index adc9c29..08126c3 100644 --- a/src/main/java/elf4j/impl/core/writer/pattern/GroupPattern.java +++ b/src/main/java/elf4j/impl/core/writer/pattern/GroupPattern.java @@ -45,7 +45,7 @@ public class GroupPattern implements LogPattern { */ @Nonnull public static GroupPattern from(@NonNull String pattern) { - return new GroupPattern(PatternType.parseAllPatternsOrThrow(pattern)); + return new GroupPattern(PatternType.parsePatternGroup(pattern)); } @Override diff --git a/src/main/java/elf4j/impl/core/writer/pattern/MessageAndExceptionPattern.java b/src/main/java/elf4j/impl/core/writer/pattern/MessageAndExceptionPattern.java index cc89f64..dcdb8fc 100644 --- a/src/main/java/elf4j/impl/core/writer/pattern/MessageAndExceptionPattern.java +++ b/src/main/java/elf4j/impl/core/writer/pattern/MessageAndExceptionPattern.java @@ -61,9 +61,10 @@ public boolean includeCallerThread() { @Override public void render(LogEntry logEntry, StringBuilder logTextBuilder) { logTextBuilder.append(logEntry.getResolvedMessage()); - if (logEntry.getException() == null) { + Throwable t = logEntry.getException(); + if (t == null) { return; } - logTextBuilder.append(System.lineSeparator()).append(StackTraceUtils.stackTraceTextOf(logEntry.getException())); + logTextBuilder.append(System.lineSeparator()).append(StackTraceUtils.stackTraceTextOf(t)); } } diff --git a/src/main/java/elf4j/impl/core/writer/pattern/PatternType.java b/src/main/java/elf4j/impl/core/writer/pattern/PatternType.java index e49303c..3081d38 100644 --- a/src/main/java/elf4j/impl/core/writer/pattern/PatternType.java +++ b/src/main/java/elf4j/impl/core/writer/pattern/PatternType.java @@ -28,19 +28,18 @@ import java.util.ArrayList; import java.util.EnumSet; import java.util.List; -import java.util.Objects; /** * */ -public enum PatternType { +enum PatternType { /** * */ TIMESTAMP { @Override - LogPattern parsePattern(String pattern) { - return this.isTargetTypeOf(pattern) ? TimestampPattern.from(pattern) : null; + LogPattern translate(String pattern) { + return TimestampPattern.from(pattern); } @Override @@ -58,8 +57,8 @@ public boolean isTargetTypeOf(String pattern) { } @Override - LogPattern parsePattern(String pattern) { - return this.isTargetTypeOf(pattern) ? LevelPattern.from(pattern) : null; + LogPattern translate(String pattern) { + return LevelPattern.from(pattern); } }, /** @@ -72,8 +71,8 @@ public boolean isTargetTypeOf(String pattern) { } @Override - LogPattern parsePattern(String pattern) { - return this.isTargetTypeOf(pattern) ? ThreadPattern.from(pattern) : null; + LogPattern translate(String pattern) { + return ThreadPattern.from(pattern); } }, /** @@ -81,13 +80,13 @@ LogPattern parsePattern(String pattern) { */ CLASS { @Override - public boolean isTargetTypeOf(String pattern) { + boolean isTargetTypeOf(String pattern) { return isPatternOfType(this, pattern); } @Override - LogPattern parsePattern(String pattern) { - return this.isTargetTypeOf(pattern) ? ClassPattern.from(pattern) : null; + LogPattern translate(String pattern) { + return ClassPattern.from(pattern); } }, /** @@ -95,13 +94,13 @@ LogPattern parsePattern(String pattern) { */ METHOD { @Override - public boolean isTargetTypeOf(String pattern) { + boolean isTargetTypeOf(String pattern) { return isPatternOfType(this, pattern); } @Override - LogPattern parsePattern(String pattern) { - return this.isTargetTypeOf(pattern) ? MethodPattern.from(pattern) : null; + LogPattern translate(String pattern) { + return MethodPattern.from(pattern); } }, /** @@ -109,13 +108,13 @@ LogPattern parsePattern(String pattern) { */ MESSAGE { @Override - public boolean isTargetTypeOf(String pattern) { + boolean isTargetTypeOf(String pattern) { return isPatternOfType(this, pattern); } @Override - LogPattern parsePattern(String pattern) { - return this.isTargetTypeOf(pattern) ? MessageAndExceptionPattern.from(pattern) : null; + LogPattern translate(String pattern) { + return MessageAndExceptionPattern.from(pattern); } }, /** @@ -123,13 +122,13 @@ LogPattern parsePattern(String pattern) { */ JSON { @Override - public boolean isTargetTypeOf(String pattern) { + boolean isTargetTypeOf(String pattern) { return isPatternOfType(this, pattern); } @Override - LogPattern parsePattern(String pattern) { - return this.isTargetTypeOf(pattern) ? JsonPattern.from(pattern) : null; + LogPattern translate(String pattern) { + return JsonPattern.from(pattern); } }, /** @@ -137,21 +136,22 @@ LogPattern parsePattern(String pattern) { */ VERBATIM { @Override - public boolean isTargetTypeOf(String pattern) { + boolean isTargetTypeOf(String pattern) { return isPatternOfType(this, pattern); } @Override - LogPattern parsePattern(String pattern) { - return this.isTargetTypeOf(pattern) ? VerbatimPattern.from(pattern) : null; + LogPattern translate(String pattern) { + return VerbatimPattern.from(pattern); } }; + private static final EnumSet PREDEFINED_PATTERN_TYPES = EnumSet.complementOf(EnumSet.of(VERBATIM)); /** * @param pattern entire layout pattern text of a writer, including one or more individual pattern segments * @return ordered list of individual patterns forming the entire layout pattern of the writer */ - public static List parseAllPatternsOrThrow(String pattern) { + static List parsePatternGroup(String pattern) { List logPatterns = new ArrayList<>(); int length = pattern.length(); int i = 0; @@ -174,32 +174,32 @@ public static List parseAllPatternsOrThrow(String pattern) { iPattern = pattern.substring(i, iEnd); i = iEnd; } - logPatterns.add(PatternType.parsePatternOrThrow(iPattern)); + logPatterns.add(parsePattern(iPattern)); } return logPatterns; } - private static boolean isPatternOfType(PatternType targetPatternType, String pattern) { - if (targetPatternType == VERBATIM) { - return EnumSet.complementOf(EnumSet.of(VERBATIM)).stream().noneMatch(type -> type.isTargetTypeOf(pattern)); + private static boolean isPatternOfType(PatternType patternType, String pattern) { + if (patternType == VERBATIM) { + return PREDEFINED_PATTERN_TYPES.stream().noneMatch(type -> type.isTargetTypeOf(pattern)); } - return targetPatternType.name().equalsIgnoreCase(pattern.split(":", 2)[0].trim()); + return patternType.name().equalsIgnoreCase(pattern.split(":", 2)[0].trim()); } - private static LogPattern parsePatternOrThrow(String pattern) { + private static LogPattern parsePattern(String pattern) { return EnumSet.allOf(PatternType.class) .stream() - .map(type -> type.parsePattern(pattern)) - .filter(Objects::nonNull) + .filter(type -> type.isTargetTypeOf(pattern)) .findFirst() - .orElseThrow(() -> new IllegalArgumentException("pattern: '" + pattern + "' not parsable")); + .orElseThrow(() -> new IllegalArgumentException("pattern: '" + pattern + "' not parsable")) + .translate(pattern); } /** * @param pattern text configuration of an individual pattern segment * @return true if this pattern type is the target type of the specified pattern text */ - public abstract boolean isTargetTypeOf(String pattern); + abstract boolean isTargetTypeOf(String pattern); - abstract LogPattern parsePattern(String pattern); + abstract LogPattern translate(String pattern); }