Dart programs on Fuchsia generally write log messages with the lib.logging
package, consuming and
initializing it through the fuchsia_logger
package.
See the language agnostic logging docs for more information about recording and viewing logs.
The necessary packages can be included with an addtion to deps
in BUILD.gn
:
deps = [
"//sdk/dart/fuchsia_logger",
]
The fuchsia_logger
package also provides Dart's lib.logging
.
See Dart: Overview for more information about building Dart within Fuchsia.
Ensure that your component has the required capabilities to log by including the following in your component manifest:
- {.cmx}
{
"include": [
"syslog/client.shard.cmx"
],
...
}
- {.cml}
{
include: [
"syslog/client.shard.cml"
],
...
}
The syslog library will fallback to stderr
if the LogSink
connection fails.
In your main function, call the setupLogger()
function to initialize logging:
import 'package:fuchsia_logger/logger.dart';
main() {
// process name will be used if no name is provided here
setupLogger(name: 'my-component');
}
By default only messages with INFO
severity or higher are printed. Severity level can be adjusted
by providing the level
parameter in the setupLogger()
call.
For example, to make all log messages appear in ffx log
:
setupLogger(name: 'noisy-component', level: Level.ALL);
The log
object is a Logger instance.
import 'package:fuchsia_logger/logger.dart';
log.finest('quietest'); // maps to TRACE
log.finer('also quietest'); // maps to TRACE also
log.fine('quiet'); // maps to DEBUG
log.info('hello world!'); // maps to INFO
log.warning('uhhh'); // maps to WARN
log.severe('oh no!'); // maps to ERROR
log.shout('this is fatal.'); // maps to FATAL
print
goes to standard out (stdout
).
See stdout
& stderr
in the language-agnostic logging docs for details on the routing of stdio
streams in the system.