Source code

Revision control

Copy as Markdown

Other Tools

# Logging
## Rust code
Make sure to use the logging macros from the `tracing_support` crate (`tracing_support::debug!`, `tracing_support::info!`, etc).
`error_support` also contains a copy of the same macros, which can be a more convenient import for components that already depend on `error_support`.
## Forwarding logs to the browser console
Rust logs can be forwarded to the JavaScript browser console using the `toolkit.rust-components.logging.crates` pref.
This pref stores a comma-separated list of items, where each item is a logging target and an optional logging level.
Each item in the comma separated list can be:
* A tracing level (`error`, `warn`, `info`, `debug`, `trace`).
This will forward all events with that level or greater.
* A target plus tracing level (e.g. `logins:warn`)
This will forward all events for that target with that level or greater.
"target" here means crate name unless the crate specifically sets a target, which is rare.
* A bare target (e.g. `logins`).
This will forward all events for that target that are `debug` or higher.
For example, `logins,autofill:warn,error,suggest` would forward:
- Logins logs at the debug level
- Autofill logs at the warning level
- Suggest logs at the debug level
- All other logs at the error level.
## Error reporting
Errors from the error reporter have level `error` so they will be forwarded to the browser console by default.
Add the `app-services-error-reporter` target to get breadcrumbs forwarded as well.
## setupLoggerForTarget
An alternative logging mechanism is `setupLoggerForTarget`.
This allows you to connect tracing events to the `Log.sys.mjs` logger.
The main reason to do this is to connect to an existing logger like the Sync logger.
```
// At the top of your JS module
ChromeUtils.defineESModuleGetters(lazy, {
setupLoggerForTarget: "resource://gre/modules/AppServicesTracing.sys.mjs",
});
// In your initialization code
lazy.setupLoggerForTarget("tabs", "Sync.Engine.Tabs");
```