Logging
Instead of using print
statements for logging, we use the built-in logging
module.
Here is an example usage:
import logging
log = logging.getLogger(__name__) # Get a logger bound to the module name.
# This line is usually placed under the import statements at the top of the file.
log.trace("This is a trace log.")
log.warning("BEEP! This is a warning.")
log.critical("It is about to go down!")
Print statements should be avoided when possible. Our projects currently defines logging levels as follows, from lowest to highest severity:
- TRACE: These events should be used to provide a verbose trace of every step of a complex process. This is essentially the
logging
equivalent of sprinklingprint
statements throughout the code. - Note: This is a PyDis-implemented logging level. It may not be available on every project.
- DEBUG: These events should add context to what's happening in a development setup to make it easier to follow what's going while workig on a project. This is in the same vein as TRACE logging but at a much lower level of verbosity.
- INFO: These events are normal and don't need direct attention but are worth keeping track of in production, like checking which cogs were loaded during a start-up.
- WARNING: These events are out of the ordinary and should be fixed, but can cause a failure.
- ERROR: These events can cause a failure in a specific part of the application and require urgent attention.
- CRITICAL: These events can cause the whole application to fail and require immediate intervention.
Any logging above the INFO level will trigger a Sentry issue and alert the Core Developer team.