| Only compile-time constants may be passed to `log(String)`; use one of the |
| formatting `log` methods with a constant format string if at all possible. |
| |
| Some common fixes include: |
| |
| - If the argument is a call to `String.format()`, just unwrap that call: |
| `log(String.format("format %s", arg))` becomes `log("format %s", arg)`. |
| - If the argument is `obj.toString()`, remove the `toString()` so that you're |
| calling `log(Object)` instead. It's equivalent to `log("%s", obj)`. |
| - If the argument is a parameter, add `@CompileTimeConstant` to that parameter |
| if possible. |
| - If the argument is an effectively final local variable that is initialized |
| to a constant value, either explicitly add `final` to that variable or, if |
| it's only used in this log statement, inline the constant value. |
| - If the argument is a string concatenation with literal and variable parts, |
| use the equivalent formatting. Instead of `log("foo " + bar + " baz")`, |
| write `log("foo %s baz", bar)`. |
| - If the argument is `exception.toString()` or `exception.getMessage()`, |
| consider using `withCause(exception).log()` (with no separate log message) |
| instead. |
| |
| If none of these work, the easiest workaround is to use `"%s"` as a format |
| string, i.e. replace `log(expr)` with `log("%s", expr)`. |