<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <div class="moz-cite-prefix">Am 19.01.21 um 02:12 schrieb Ping Chen:<br>
    </div>
    <blockquote type="cite"
      cite="mid:28cfb5cf-36f0-4003-4ca9-57f47ff83e23@gmail.com">
      <blockquote type="cite">    // Create a ConsoleInstance from a
        ConsoleInstanceOptions object.
        <br>
            let logger = console.createInstance({
        <br>
              prefix: "mailnews.smtp",
        <br>
              maxLogLevel: "Warn",
        <br>
              maxLogLevelPref: "mailnews.smtp.loglevel",
        <br>
            });
        <br>
        <br>
            // Logging.
        <br>
            logger.log("Won't show up because Log level is less than
        Warn")
        <br>
            logger.warn("A warning")
        <br>
            logger.error("An error")
        <br>
      </blockquote>
    </blockquote>
    <p><br>
    </p>
    <p>I think this is a nice change, compared to the multitude of other
      inconsistent solutions that we have.</p>
    <p>But one remark to make it even better:<br>
    </p>
    <blockquote type="cite"
      cite="mid:28cfb5cf-36f0-4003-4ca9-57f47ff83e23@gmail.com">
      <blockquote type="cite">
      </blockquote>
      For logging purpose yes. We don't need to print debugging logs to
      normal users. But still when needed, by toggling a pref, the logs
      can be shown.
      <br>
      <br>
      I think raw console.log should generally not be committed.
      <br>
    </blockquote>
    <p><br>
    </p>
    <p>If we're completely banning <code>console.log()</code>, then how
      about this:</p>
    <p>When initing the module, instead of saving <code>logger</code>
      in a variable and using that everywhere, what about allowing code
      to continue to use the standard <code>console.log(str)</code>, <code>console.error(ex)</code>,
      <code>console.warn(str)</code> etc., and redirecting those to the
      logger? That could be as simple as overwriting the <code>console</code>
      object with <code>logger</code>.</p>
    <p>Advantages:</p>
    <ul>
      <li>Using standardized functions (which work in browsers, node.js,
        and XPCOM JS code), and just making them do what we need</li>
      <li>Avoid review roundtrips for patches from contributors</li>
      <li>Avoid changing the entire code code base.</li>
      <li>Avoid having to find a suitable place to store the variable. (<code>this._logger</code>?
        <code>logger</code>? <code>gLogger</code>? etc.).</li>
    </ul>
    <p>Ben<br>
    </p>
    <br>
  </body>
</html>