private void initLogMessageInfo(
      Info info,
      final String fqcn,
      final Level level,
      final Marker marker,
      final Message message,
      final Throwable thrown) {
    info.translator.setValues(
        this,
        getName(),
        marker,
        fqcn,
        level,
        message, //
        // don't construct ThrowableProxy until required
        thrown, //

        // config properties are taken care of in the EventHandler
        // thread in the #actualAsyncLog method

        // needs shallow copy to be fast (LOG4J2-154)
        ThreadContext.getImmutableContext(), //

        // needs shallow copy to be fast (LOG4J2-154)
        ThreadContext.getImmutableStack(), //

        // Thread.currentThread().getName(), //
        // info.cachedThreadName, //
        info.threadName(), //

        // location: very expensive operation. LOG4J2-153:
        // Only include if "includeLocation=true" is specified,
        // exclude if not specified or if "false" was specified.
        calcLocationIfRequested(fqcn),

        // System.currentTimeMillis());
        // CoarseCachedClock: 20% faster than system clock, 16ms gaps
        // CachedClock: 10% faster than system clock, smaller gaps
        // LOG4J2-744 avoid calling clock altogether if message has the timestamp
        eventTimeMillis(message), //
        nanoClock.nanoTime() //
        );
  }