-
Notifications
You must be signed in to change notification settings - Fork 0
Proposal for logging
-
There are two logging primitives
logandlog_err. Both allow a variety of types to be given. -
log_erroutput is always printed. This is typically used right before afail, or in case of other serious problems. -
logis a conditional logging statement. Its output is suppressed by default, but can be turned on using theRUST_LOGenvironment variable. -
RUST_LOGtakes a comma-separated list of directives. A directive is, for now, a module name prefix, for examplestd::io. The 'main' program will live undermain, unless an explicit crate name is given in the crate file. -
In the runtime, the
LOGandLOG_ERR, (orDLOG_[ERR]if no task pointer is available) serve a similar role aslogandlog_err. They explicitly set their own 'module'. These modules live underrt, for example::rt::comm,::rt::upcall(see rust_log.h for a list). -
Logging (when muffled) is really really cheap in rustc now.
-
Logging will be done through a
fmt!-like syntax extension, which (somehow) expands to a special form that handles the module-check wiring and such. The syntax extension will handle stringification, so the runtime logger will only deal with strings anymore. -
There will be more log levels: 0 error, 1 warning, 2 note, 3 debug. The default log level will be 1 (show warnings and errors). The
RUST_LOGdirectives will supportmodule=2syntax to set specific log levels. If no=Xis given, the level for that module is set to 3. -
There will be an API (though a library call) to restrict logging to a single domain (or maybe task). (Maybe also a set of domains, if those become referenceable somehow.)
-
There will also be an API that allows you to pass in your on
RUST_LOG-style string to reset the per-module logging levels at runtime.