Loguru 简单如打印,灵活如日志记录

Loguru Simple as printing, flexible as logging

简单的日志记录解决方案,适用于您的数据科学项目

作者图片

最初发表于2023年7月17日,网址为 https://mathdatasimplified.com。

在数据科学项目中为什么要使用日志记录?

数据科学家经常使用print函数来调试他们的代码。然而,随着print语句数量的增加,由于缺乏行号或函数名称,很难确定输出来自哪里。

def encode_data(data: list):    print("编码数据")    data_map = {'a': 1, 'b': 2, 'c': 3}    print(f"数据映射: {data_map}")    return [data_map[num] for num in data]def add_one(data: list):    print("加一")    return [num + 1 for num in data]def process_data(data: list):    print("处理数据")    data = encode_data(data)    print(f"编码后的数据: {data}")    data = add_one(data)    print(f"加一后的数据: {data}")process_data(['a', 'a', 'c'])

输出:

处理数据编码数据数据映射: {'a': 1, 'b': 2, 'c': 3}编码后的数据: [1, 1, 3]加一加一后的数据: [2, 2, 4]

将代码投入生产时,手动逐个删除所有调试行可能是一项繁琐且容易出错的任务。

def encode_data(data: list):    print("编码数据")    data_map = {'a': 1, 'b': 2, 'c': 3}    return [data_map[num] for num in data]def add_one(data: list):    print("加一")    return [num + 1 for num in data]def process_data(data: list):    print("处理数据")    data = encode_data(data)    data = add_one(data)process_data(['a', 'a', 'c'])

日志记录通过允许数据科学家为其输出指定不同的级别(调试、信息、警告、错误)提供了完美的解决方案。

def encode_data(data: list):    logger.info("编码数据")    data_map = {'a': 1, 'b': 2, 'c': 3}    logger.debug(f"数据映射: {data_map}")    return [data_map[num] for num in data]def add_one(data: list):    logger.info("加一")    return [num + 1 for num in data]def process_data(data: list):    logger.info("处理数据")    data = encode_data(data)    logger.debug(f"编码后的数据: {data}")    data = add_one(data)...