<div dir="ltr"><div class="gmail_extra">On Mon, Dec 18, 2017 at 4:13 PM, Brian Grinstead <span dir="ltr"><<a href="mailto:bgrinstead@mozilla.com" target="_blank">bgrinstead@mozilla.com</a>></span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Baku has been working on a set of patches that will expose the WebIDL console to JSM files. This will have the benefit of a console global being available directly from JSM files. I for one am excited to not accidentally throw an exception calling console.log after forgetting to copy and paste `let { console } = Cu.import("resource://gre/<wbr>modules/Console.jsm", {});` into the top of a jsm file.<br>
<br>
Bug 1425463 is on file to expose the console global in JSM files, and Bug 1425574 is on file to fill the feature gap between them. Here are the main dev-facing features that are currently missing from the WebIDL version:<br>
<br>
1. No way to construct console instances with custom options<br>
2. Doesn’t dump to stdout<br>
3. Doesn’t support the ‘prefix’ option to prepend text in front of all messages<br>
4. Doesn’t support the ‘maxLogLevel’ and ‘maxLogLevelPref’ options<br>
<br>
There are patches in Bug 1425574 to cover items 1-3, so I wanted to get some feedback about (4). I do see this ‘maxLogLevel’ feature is referenced quite a few times in the tree and so I wanted to get an idea of how often the feature is actually used in development <a href="https://searchfox.org/mozilla-central/search?q=maxLogLevel&redirect=true" rel="noreferrer" target="_blank">https://searchfox.org/mozilla-<wbr>central/search?q=maxLogLevel&<wbr>redirect=true</a>. It looks like there are a couple of patterns:<br>
<br>
1) A runtime pref check in a ‘log’ function getter like `maxLogLevel: debug ? "all" : “log”` (i.e. <a href="https://searchfox.org/mozilla-central/source/browser/components/customizableui/CustomizableUI.jsm#167" rel="noreferrer" target="_blank">https://searchfox.org/mozilla-<wbr>central/source/browser/<wbr>components/customizableui/<wbr>CustomizableUI.jsm#167</a>). For this case I believe we could replicate the log_level stuff from console.jsm (<a href="https://searchfox.org/mozilla-central/source/toolkit/modules/Console.jsm#288" rel="noreferrer" target="_blank">https://searchfox.org/<wbr>mozilla-central/source/<wbr>toolkit/modules/Console.jsm#<wbr>288</a>) easily enough in the getter .<br></blockquote><div><br></div><div><div style="font-family:arial,helvetica,sans-serif" class="gmail_default">​A few of these cases would have used maxLogLevelPref if they were written today but were converted to use​ the ternary operator to preserve backwards compatibility for profiles that already had a boolean pref set with custom dump() logging.<br></div></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
2) maxLogLevelPref being set as a way to control which logs are seen by a pref which is presumably something you change in a dev profile but the default pref value prevents any logs from showing up (i.e. dom.push.loglevel / <a href="https://searchfox.org/mozilla-central/source/dom/push/Push.js#19" rel="noreferrer" target="_blank">https://searchfox.org/mozilla-<wbr>central/source/dom/push/Push.<wbr>js#19</a>).<br></blockquote><div><br></div><div style="font-family:arial,helvetica,sans-serif" class="gmail_default">​Or the pref defaults to Warn or Error so Debug logs don't show up​ by default but can be toggled at runtime via the pref.<br></div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
My suspicion is that (2) *is* actually used by firefox devs and is something that we’ll need to continue supporting somehow (possibly in a stripped down version of Console.jsm that you could import if you need to use this feature). But I’d like to confirm that it is used before we do the work to support it. Here are the files where maxLogLevelPref is referenced:<br>
<br>
* browser/components/downloads/<wbr>DownloadsCommon.jsm<br>
* browser/components/migration/<wbr>ESEDBReader.jsm<br>
* browser/components/uitour/<wbr>UITour.jsm<br>
* browser/extensions/<wbr>formautofill/<wbr>FormAutofillUtils.jsm<br>
* browser/extensions/<wbr>formautofill/MasterPassword.<wbr>jsm<br>
* browser/extensions/pocket/<wbr>content/AboutPocket.jsm<br>
* browser/tools/mozscreenshots/<wbr>mozscreenshots/extension/<wbr>Screenshot.jsm<br>
* dom/push/Push.js<br>
* dom/push/PushDB.jsm<br>
* dom/push/PushService.jsm<br>
* dom/push/<wbr>PushServiceAndroidGCM.jsm<br>
* dom/push/PushServiceHttp2.jsm<br>
* dom/push/PushServiceWebSocket.<wbr>jsm<br>
* toolkit/components/extensions/<wbr>ExtensionUtils.jsm<br>
* toolkit/components/payments/<wbr>content/<wbr>paymentDialogFrameScript.js<br>
* toolkit/components/payments/<wbr>paymentUIService.js<br>
<br>
Could you please reply if you work with any of these files and take advantage of this feature in local development?</blockquote><div><br></div><div><div style="font-family:arial,helvetica,sans-serif;display:inline" class="gmail_default">​The point of the maxLogLevelPref feature is to be able to ​</div>​<div style="font-family:arial,helvetica,sans-serif;display:inline" class="gmail_default">​flip a pref to toggle log levels at runtime. This isn't just used for local development, it's also used for collecting logs from bug reporters. Having a live pref allows for gathering logs in some cases which would be hard to reproduce after a restart (e.g. if env. vars were used instead) and flipping prefs is much easier for end users.​</div><div style="font-family:arial,helvetica,sans-serif;display:inline" class="gmail_default"><br></div><div style="font-family:arial,helvetica,sans-serif;display:inline" class="gmail_default"><br></div><div style="font-family:arial,helvetica,sans-serif;display:inline" class="gmail_default">One of the main benefits of Console.jsm over Log.jsm is that it can log JS objects which can be inspected/expanded/referenced in the console and I hope that is preserved with bug 1425574. I hope the log prefix will also continue to be formatted specially as it really helps in scanning logs.<br></div></div></div></div><div class="gmail_extra"><br></div><div class="gmail_extra"><div style="font-family:arial,helvetica,sans-serif" class="gmail_default">​I regularly use this feature with the following files: ​</div><div style="font-family:arial,helvetica,sans-serif" class="gmail_default">
* browser/components/uitour/<wbr>UITour.jsm<br>
* browser/extensions/<wbr>formautofill/<wbr>FormAutofillUtils.jsm<br>
* browser/extensions/<wbr>formautofill/MasterPassword.<wbr>jsm<br>
* browser/tools/mozscreenshots/<wbr>mozscreenshots/extension/<wbr>Screenshot.jsm<br>
* toolkit/components/payments/<wbr>content/<wbr>paymentDialogFrameScript.js<br>
* toolkit/components/payments/<wbr>paymentUIService.js</div></div><div class="gmail_extra"><br></div><div class="gmail_extra"><div style="font-family:arial,helvetica,sans-serif" class="gmail_default">I think the person who added the next most would be Kit with the Push ones.<br></div></div><div class="gmail_extra"><br></div><div class="gmail_extra"><div style="font-family:arial,helvetica,sans-serif" class="gmail_default">​Thanks,</div><div style="font-family:arial,helvetica,sans-serif" class="gmail_default">Matthew</div><div style="font-family:arial,helvetica,sans-serif" class="gmail_default"><br></div><div style="font-family:arial,helvetica,sans-serif" class="gmail_default">P.S. I would be fine with replacing Console.jsm usage with Log.jsm if Log.jsm required much less boilerplate to observe a pref for the log level and supported rich logging of objects out of the box​ (bug 1072687)<br></div></div></div>