Rust's logging system is based on the log crate, which provides a common facade for all things logging. This means that it doesn't actually provide any functionality, just the interface. The implementation is left to other crates, env_logger in our case. This split into facade and implementation is pretty useful, as anyone can create a cool new way of logging stuff which is automatically compatible with any crate.
The choice of logging implementation used should be up to the consumer of your code. If you write a crate, don't use any implementation but simply log all things via the log crate only. Your (or someone else's) executable that uses the crate can then simply initialize their logger of choice[9] in order to actually process the log calls.
The log crate provides the log! macro[11], which accepts a log Level, a message that can be formatted the same way as in println!, and an optional target. You could log stuff like this, but it's more readable...