Avoid allocation of String during formatting. #19
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The format function is now passed a
&mut std::io::Write
trait objectand is responsible for outputting the formatted message to it. Format
functions can take care (by using the
std::fmt
macros) to avoid heapallocations during formatting/outputting of log messages, and the
default format function takes advantage of this.
Alternatives considered:
fmt::Arguments
(from a call toformat_args!()
. Unfortunately I couldn't find a way to make thiswork with the lifetime parameter on
fmt::Arguments
.fern
'sFormatCallback
:https://docs.rs/fern/0.4.2/fern/struct.FormatCallback.html rather
than giving it the
&mut Write
. This would be more future proof, butI worry it introduces unnecessary abstraction into
env_logger
,which generally tries to keep things simple.
... but I don't think either of those are better.
Some open questions:
Builder::format()
be renamed?people to give a
Fn(&Record) -> String
still? (Should we makeupgrades easier or encourage people to rethink their format functions
and whether they heap allocate?)
Fixes #3.