blob: b88a090d19a2c93710d266fe4222c18bacc70f34 [file] [log] [blame] [view]
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)`.