_logReport(report) {
    // Determine log level depending on whether any check failed
    const log =
      report.report.state == CheckState.success ? s => logger.info(s) : s => logger.warn(s);

    // Declare output
    const indent = '   ';
    let output = '';
    let checksCount = 0;
    let failedChecksCount = 0;
    let skippedCheckCount = 0;

    // Traverse all groups and checks for compose output
    for (const group of report.report.groups) {
      output += `\n- ${group.name}`;

      for (const check of group.checks) {
        checksCount++;
        output += `\n${indent}${this._getLogIconForState(check.state)} ${check.title}`;

        if (check.state == CheckState.fail) {
          failedChecksCount++;
          output += `\n${indent}${indent}Warning: ${check.warning}`;
          output += ` ${check.solution}`;
        } else if (check.state == CheckState.none) {
          skippedCheckCount++;
          output += `\n${indent}${indent}Test did not execute, this is likely an internal server issue, please report.`;
        }
      }
    }

    output =
      `\n###################################` +
      `\n#                                 #` +
      `\n#   Parse Server Security Check   #` +
      `\n#                                 #` +
      `\n###################################` +
      `\n` +
      `\n${
        failedChecksCount > 0 ? 'Warning: ' : ''
      }${failedChecksCount} weak security setting(s) found${failedChecksCount > 0 ? '!' : ''}` +
      `\n${checksCount} check(s) executed` +
      `\n${skippedCheckCount} check(s) skipped` +
      `\n` +
      `${output}`;

    // Write log
    log(output);
  }
Logs the security check report.
@param {Object} report The report to log.