Took me a while, but it looks like this works:

import ch.qos.logback.classic.encoder.PatternLayoutEncoder
import ch.qos.logback.classic.jul.LevelChangePropagator
import ch.qos.logback.core.ConsoleAppender

import static ch.qos.logback.classic.Level.INFO

context = new LevelChangePropagator()
context.resetJUL = true

appender("STDOUT", ConsoleAppender) {
 encoder(PatternLayoutEncoder) {
   pattern = "%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"
 }
}
root(INFO, ["STDOUT"])