Over in this issue we are discussing how to add debug logging
for librsvg.

A popular way to add logging to Rust code is to use the log crate.
This lets you sprinkle simple messages in your code:

error!("something bad happened: {}",foo);debug!("a debug message");

However, the log create is just a facade, and by default the
messages do not get emitted anywhere. The calling code has to set up
a logger. Crates like env_logger let one set up a logger, during
program initialization, that gets configured through an environment
variable.

And this is a problem for librsvg: we are not the program's
initialization! Librsvg is a library; it doesn't have a main()
function. And since most of the calling code is not Rust, we can't
assume that they can call code that can initialize the logging
framework.

Why not use glib's logging stuff?

Currently this is a bit clunky to use from Rust, since glib's
structured logging functions are not bound yet in glib-rs. Maybe it
would be good to bind them and get this over with.

What user experience do we want?

In the past, what has worked well for me to do logging from libraries
is to allow the user to set an environment variable to control the
logging, or to drop a log configuration file in their $HOME. The
former works well when the user is in control of running the program
that will print the logs; the latter is useful when the user is not
directly in control, like for gnome-shell, which gets launched through
a lot of magic during session startup.

For librsvg, it's probably enough to just use an environment
variable. Set RSVG_LOG=parse_errors, run your program, and get
useful output. Push button, receive bacon.

Other options in Rust?

There is a slog crate which looks promising. Instead of using
context-less macros which depend on a single global logger, it
provides logging macros to which you pass a logger object.

For librsvg, this means that the basic RsvgHandle could create its
own logger, based on an environment variable or whatever, and pass it
around to all its child functions for when they need to log something.