Enter the Log4j version a service is running and this tool tells you whether it's affected by Log4Shell and the follow-on CVEs — and which version to upgrade to. The fixes came in waves: 2.15 partially fixed it, 2.16 disabled message lookups, and 2.17.1 is the version that resolves CVE-2021-44228, 45046 and 45105 together.
The patch timeline
2.0-beta9 – 2.14.1: fully vulnerable to Log4Shell. 2.15.0: still exploitable in some configs (CVE-2021-45046). 2.16.0: JNDI and message lookups disabled, but a DoS remained (CVE-2021-45105). 2.17.1+: all three resolved — the recommended target. Backports exist for older Java (2.12.4 for Java 7, 2.3.2 for Java 6).
Stop-gaps when you can't upgrade
If you genuinely can't patch immediately, the accepted mitigations are to remove the JndiLookup.class from the classpath, or — for older 2.10+ — set log4j2.formatMsgNoLookups=true. These reduce risk but are not a substitute for upgrading to 2.17.1+. The old advice to set log4j2.noFormatMsgLookup alone proved insufficient.