in project/nanoeval/nanoeval/library_config.py [0:0]
def setup_logging(self) -> None:
# Set up structlog according to https://www.structlog.org/en/stable/standard-library.html
# Basically, we convert structlogs to logging-style record and then process them using
# structlog formatters into json for humio, and console for stdout
structlog.configure(
processors=[
# Prepare event dict for `ProcessorFormatter`.
structlog.stdlib.ProcessorFormatter.wrap_for_formatter,
],
logger_factory=structlog.stdlib.LoggerFactory(),
)
# Remove all StreamHandlers from the root logger
for handler in logging.getLogger().handlers:
if isinstance(handler, logging.StreamHandler):
logging.getLogger().removeHandler(handler)
handler = logging.StreamHandler()
# Use OUR `ProcessorFormatter` to format all `logging` entries to stdout.
handler.setFormatter(
structlog.stdlib.ProcessorFormatter(
processors=[
structlog.stdlib.ProcessorFormatter.remove_processors_meta,
structlog.contextvars.merge_contextvars,
structlog.processors.add_log_level,
structlog.processors.MaybeTimeStamper(fmt="iso"),
functools.partial(
_remove_all_fields_except,
["timestamp", "level", "event", "component", "exc_info"],
),
structlog.dev.ConsoleRenderer(),
],
# logger -> structlog transforms
foreign_pre_chain=[
structlog.stdlib.add_logger_name,
partial(_rename_field, "logger", "component"),
partial(_rename_field, "logger_name", "component"),
partial(_rename_field, "log", "event"),
structlog.stdlib.ExtraAdder(),
],
)
)
handler.addFilter(PrintOrWarningFilter())
root_logger = logging.getLogger()
root_logger.addHandler(handler)
root_logger.setLevel(logging.INFO)