/** * Decodes the given line and returns the corresponding rule. * * @throws IllegalArgumentException if a rule has an invalid level. */ @Pure public static @Nonnull LoggingRule decode(@Nonnull String line) throws IllegalArgumentException { final @Nonnull @NonNullableElements String[] tokens = line.split(";", 4); final @Nonnull Level threshold = Level.valueOf(tokens[0].trim().toUpperCase()); final @Nullable String callerPrefix = getNonEmpty(tokens, 1); final @Nullable String threadPrefix = getNonEmpty(tokens, 2); final @Nullable String messageRegex = getNonEmpty(tokens, 3); return new LoggingRule(threshold, callerPrefix, threadPrefix, messageRegex); }