Skip to content

Commit 88d7499

Browse files
committed
Update docs on log expressions.
1 parent 9c267d8 commit 88d7499

File tree

1 file changed

+45
-1
lines changed

1 file changed

+45
-1
lines changed

doc/rust.texi

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3046,7 +3046,51 @@ Executing a @code{log} expression may, depending on runtime configuration,
30463046
cause a value to be appended to an internal diagnostic logging buffer provided
30473047
by the runtime or emitted to a system console. Log expressions are enabled or
30483048
disabled dynamically at run-time on a per-task and per-item
3049-
basis. @xref{Ref.Run.Log}.
3049+
basis. @xref{Ref.Run.Log}.
3050+
3051+
Each @code{log} expression must be provided with a @emph{level} argument in
3052+
addition to the value to log. The logging level is a @code{u32} value, where
3053+
lower levels indicate more-urgent levels of logging. By default, the lowest
3054+
four logging levels (@code{0_u32 ... 3_u32}) are predefined as the constants
3055+
@code{error}, @code{warn}, @code{info} and @code{debug} in the @code{core}
3056+
library.
3057+
3058+
Additionally, the macros @code{#error}, @code{#warn}, @code{#info} and
3059+
@code{#debug} are defined in the default syntax-extension namespace. These
3060+
expand into calls to the logging facility composed with calls to the
3061+
@code{#fmt} string formatting syntax-extension.
3062+
3063+
The following examples all produce the same output, logged at the @code{error}
3064+
logging level:
3065+
3066+
@example
3067+
// Full version, logging a value.
3068+
log(core::error, "file not found: " + filename);
3069+
3070+
// Log-level abbreviated, since core::* is imported by default.
3071+
log(error, "file not found: " + filename);
3072+
3073+
// Formatting the message using a format-string and #fmt
3074+
log(error, #fmt("file not found: %s", filename));
3075+
3076+
// Using the #error macro, that expands to the previous call.
3077+
#error("file not found: %s", filename);
3078+
@end example
3079+
3080+
A @code{log} expression is @emph{not evaluated} when logging at the specified
3081+
logging-level, module or task is disabled at runtime. This makes inactive
3082+
@code{log} expressions very cheap; they should be used extensively in Rust
3083+
code, as diagnostic aids, as they add little overhead beyond a single
3084+
integer-compare and branch at runtime.
3085+
3086+
Logging is presently implemented as a language built-in feature, as it makes
3087+
use of compiler-provided logic for allocating the associated per-module
3088+
logging-control structures visible to the runtime, and lazily evaluating
3089+
arguments. In the future, as more of the supporting compiler-provided logic is
3090+
moved into libraries, logging is likely to move to a component of the core
3091+
library. It is best to use the macro forms of logging (@emph{#error},
3092+
@emph{#debug}, etc.) to minimize disruption to code using the logging facility
3093+
when it is changed.
30503094

30513095
@example
30523096
@end example

0 commit comments

Comments
 (0)