flowable/flowable-engine · error · FlowableIllegalArgumentException

Illegal value for history-level:

Error message

Illegal value for history-level: 

What it means

Guard in HistoryLevel.getHistoryLevelForKey: the configured history level string (flowable.history-level or process engine config) does not match any known level key (none, activity, audit, full), so the engine cannot determine what to record.

Solutions

  1. Set history-level to one of none, activity, audit or full
  2. Check for typos or legacy values like 'default' in configuration files
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/history/HistoryLevel.java:47 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11). Data as JSON: /api/errors/ced1fd3aa17a10f2. Report an issue: GitHub.

Appendix: source

Thrown at modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/history/HistoryLevel.java:47

    private HistoryLevel(String key) {
        this.key = key;
    }

    /**
     * @param key
     *            string representation of level
     * @return {@link HistoryLevel} for the given key
     * @throws FlowableException
     *             when passed in key doesn't correspond to existing level
     */
    public static HistoryLevel getHistoryLevelForKey(String key) {
        for (HistoryLevel level : values()) {
            if (level.key.equalsIgnoreCase(key)) {
                return level;
            }
        }
        throw new FlowableIllegalArgumentException("Illegal value for history-level: " + key);
    }

    /**
     * String representation of this history-level.
     */
    public String getKey() {
        return key;
    }

    /**
     * Checks if the given level is the same as, or higher in order than the level this method is executed on.
     */
    public boolean isAtLeast(HistoryLevel level) {
        // Comparing enums actually compares the location of values declared in the enum
        return this.compareTo(level) >= 0;
    }
}

View on GitHub (pinned to d6d39ce1c6)