Logging#
Each plugin object has a _log attribute, which behaves like a logger from
the standard Python logging module but is provided by beets' BeetsLogger
class. The logger is set up to PEP 3101, str.format-style string formatting.
So you can write logging calls like this:
self._log.debug("Processing {0.title} by {0.artist}", item)
For especially noisy diagnostics, plugins can use
self._log.extra_debug(...). These messages are logged at DEBUG level
only when beets is run with verbosity level 3 or higher, such as -vvv.
When beets is in verbose mode, plugin messages are prefixed with the plugin name to make them easier to see.
Which messages will be logged depends on the logging level and the action performed:
Inside import stages and event handlers, the default is
WARNINGmessages and above.Everywhere else, the default is
INFOor above.
The verbosity can be increased with --verbose (-v) flags: each flags
lowers the level by a notch. That means that, with a single -v flag, event
handlers won't have their DEBUG messages displayed, but command functions
(for example) will. With -vv on the command line, DEBUG messages will be
displayed everywhere.
This addresses a common pattern where plugins need to use the same code for a command and an import stage, but the command needs to print more messages than the import stage. (For example, you'll want to log "found lyrics for this song" when you're run explicitly as a command, but you don't want to noisily interrupt the importer interface when running automatically.)