code: @Override
    protected void visitLogNode(LogNode node) {
  
      if (isComputableAsJsExprsVisitor.execOnChildren(node)) {
        List<Expression> logMsgChunks = genJsExprsVisitor.execOnChildren(node);
  
        jsCodeBuilder.append(WINDOW_CONSOLE_LOG.call(CodeChunkUtils.concatChunks(logMsgChunks)));
      } else {
        // Must build log msg in a local var logMsg_s##.
        String outputVarName = "logMsg_s" + node.getId();
        jsCodeBuilder.pushOutputVar(outputVarName);
  
        visitChildren(node);
  
        jsCodeBuilder.popOutputVar();
  
        jsCodeBuilder.append(WINDOW_CONSOLE_LOG.call(id(outputVarName)));
      }
    }
docs: Example:
  
  <pre>
  {log}Blah {$boo}.{/log}
  </pre>
  
  might generate
  
  <pre>
  window.console.log('Blah ' + opt_data.boo + '.');
  </pre>
  
  <p>If the log msg is not computable as JS exprs, then it will be built in a local var
  logMsg_s##, e.g.
  
  <pre>
  var logMsg_s14 = ...
  window.console.log(logMsg_s14);
  </pre>