Logging¶
We want to use the python logging module as much as possible to traceback errors and document the pipeline processes.
Furthermore, we want to configure each logger with the RichHandler, which prettyfies the output with rich.
Usage Guide¶
For logging inside a package should be done without any further configuration:
Logging at a top-level can and should be further configured:
Code is untested!
import logging
from rich.logging import RichHandler
console_handler = RichHandler(rich_tracebacks=True)
console_handler.setLevel(logging.INFO)
console_handler.setFormatter(logging.Formatter("%(message)s", datefmt="[%X]"))
file_handler = logging.FileHandler("app.log")
file_handler.setLevel(logging.DEBUG)
file_handler.setFormatter(logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s"))
logging.basicConfig(handlers=[console_handler, file_handler])
Supressing Arrays¶
When printing or logging large numpy arrays a lot of numbers get truncated, however the array still takes a lot of space. Using lovely_numpy and lovely_tensor can help here:
import numyp as np
import torch
import xarray as xr
from lovely_numpy import lo
from lovely_tensors import monkey_patch
monkey_patch()
xr.set_options(display_expand_data=False)
a = np.zeros((8, 1024, 1024))
la = lo(a)
da = xr.DataArray(a)
t = torch.tensor(a)
logger.warning(la)
logger.warning(da)
logger.warning(t)