mirror of
				https://github.com/mozilla/gecko-dev.git
				synced 2025-11-04 02:09:05 +02:00 
			
		
		
		
	Also raise an error on the console if 'maxLogLevelPref' is used when it shouldn't be. Differential Revision: https://phabricator.services.mozilla.com/D208000
		
			
				
	
	
		
			89 lines
		
	
	
	
		
			3.6 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			89 lines
		
	
	
	
		
			3.6 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
# JavaScript Logging
 | 
						|
 | 
						|
This document details logging in JavaScript. For c++ based logging, please see
 | 
						|
the [Gecko Logging document](/xpcom/logging).
 | 
						|
 | 
						|
## Notes About Logging
 | 
						|
 | 
						|
### Logging Ethos
 | 
						|
 | 
						|
The general ethos is to keep the browser console "clean" of logging output by
 | 
						|
default, except in situations where there are errors or potentially warnings.
 | 
						|
 | 
						|
There is also [a test](https://searchfox.org/mozilla-central/source/browser/components/tests/marionette/test_no_errors_clean_profile.py)
 | 
						|
which will fail if there are any unexpected logs on startup.
 | 
						|
 | 
						|
For situations where it is useful to have debug logging available, these are
 | 
						|
generally covered by off-by-default logging which can be enabled by a preference.
 | 
						|
 | 
						|
Also be aware that console logging can have a performance impact even when the
 | 
						|
developer tools are not displayed.
 | 
						|
 | 
						|
### Obsolete Utilities
 | 
						|
 | 
						|
In the tree, there are two modules that should be considered obsolete:
 | 
						|
[Log.sys.mjs](https://searchfox.org/mozilla-central/source/toolkit/modules/Log.sys.mjs)
 | 
						|
and [Console.sys.mjs](https://searchfox.org/mozilla-central/source/toolkit/modules/Console.sys.mjs). Existing uses should be transitioned to use `console.createInstance` as part of
 | 
						|
the [one logger](https://bugzilla.mozilla.org/show_bug.cgi?id=881389) effort.
 | 
						|
 | 
						|
The `console` object is available in all areas of the Firefox code base and
 | 
						|
has better integration into the developer tools than the existing modules.
 | 
						|
 | 
						|
## Logging using the Console Web API
 | 
						|
 | 
						|
The [Console Web API](https://developer.mozilla.org/docs/Web/API/console)
 | 
						|
is available throughout the Firefox code base. It is the best tool to use, as it
 | 
						|
integrates directly with the
 | 
						|
[developer tools](/devtools-user/index), which
 | 
						|
provide detailed logging facilities.
 | 
						|
 | 
						|
By default logs will be output to the browser console, according to the processes
 | 
						|
and filters selected within the console itself.
 | 
						|
 | 
						|
Logs may also be output to stdout via the `devtools.console.stdout.chrome` preference.
 | 
						|
By default, this is set to true for non-official builds, and false for official builds,
 | 
						|
meaning most of the time, developers do not need to change it.
 | 
						|
 | 
						|
### console.createInstance
 | 
						|
 | 
						|
In some cases, it is useful to attribute logging to a particular module or have
 | 
						|
it controlled by a preference. In this case, `console.createInstance` may be used
 | 
						|
to create a specific logging instance.
 | 
						|
 | 
						|
For example:
 | 
						|
 | 
						|
```js
 | 
						|
const lazy = {};
 | 
						|
 | 
						|
ChromeUtils.defineLazyGetter(lazy, "logConsole", () => {
 | 
						|
  return console.createInstance({
 | 
						|
    maxLogLevelPref: "browser.download.loglevel",
 | 
						|
    prefix: "Downloads",
 | 
						|
  });
 | 
						|
});
 | 
						|
```
 | 
						|
 | 
						|
The preference might have a typical default value of `Error`. The available
 | 
						|
levels are listed in [Console.webidl](https://searchfox.org/mozilla-central/rev/593c49fa812ceb4be45fcea7c9e90d15f59edb70/dom/webidl/Console.webidl#205-209).
 | 
						|
 | 
						|
This creates a lazily initialized console instance that can be used as follows:
 | 
						|
 | 
						|
```js
 | 
						|
// Logs by default.
 | 
						|
lazy.logConsole.error("Something bad happened");
 | 
						|
 | 
						|
// Doesn't log unless the preference was changed prior to logging.
 | 
						|
lazy.logConsole.debug("foo", 123)
 | 
						|
```
 | 
						|
 | 
						|
**Note:** Workers are not able to access preferences, and therefore must use
 | 
						|
`maxLogLevel` rather than `maxLogLevelPref`.
 | 
						|
 | 
						|
### Other Options to console.createInstance
 | 
						|
 | 
						|
`console.createInstance` may be passed other options. See
 | 
						|
[`ConsoleInstanceOptions` in the Web IDL for more details](https://searchfox.org/mozilla-central/rev/593c49fa812ceb4be45fcea7c9e90d15f59edb70/dom/webidl/Console.webidl#211-235)
 | 
						|
 | 
						|
The most useful of these is probably `maxLogLevel` which allows manually setting
 | 
						|
the log level, which may be useful for transitioning to `console.createInstance`
 | 
						|
from other logging systems where preferences already exist.
 |