///Meblog///

About Meblog

logging日志的使用

📅 2026-2-6

刚开始写代码时只是为了完成一些简单的数学题目,如果要检查代码运行情况和变量的值是否正确就直接用print函数直接打印出来。

在做大创项目中,代码量开始增加,一个数据处理文件就需要几百行,如果使用print函数对每个处理步骤中的代码进行检查特别难格式化输出。开始尝试使用logging日志的形式对程序的运行进行及时的检查。

相比于print

1.统一配置,便于更改与维护

import logging 

logging.basicConfig(
    # 编写日志配置
)
logger = logging.getLogger(__name__)

2.统一控制日志等级

level=logging.XXX(DEBUG,INFO,WARNING,ERROR,CRITICAL)

3.在配置中统一格式化

format='%(asctime)s - %(levelname)s - %(message)s', # 设置日志前缀,时间 - 级别 - 内容

不需要在每个日志中都进行一次格式化。

4.自定义输出地址

handlers=[
        logging.StreamHandler() # 输出到控制台,调试中检查运行情况
        logging.FileHandler('app.log') # 输出到文件,运行后检查结果

    ]

实际运用

对于在数据处理中的一个步骤分别使用print和logging。

以下是使用print:

print("--- 开始数据预处理 (Print模式) ---")

X = np.expand_dims(X, axis=1)
print(f"添加通道维度:{X.shape}")

y_tensor = torch.tensor(y, dtype=torch.long)
y_onehot = F.one_hot(y_tensor, num_classes=4)  
print(f"对标签进行独热编码:{y_onehot.shape}")

X_tensor = torch.tensor(X, dtype=torch.float32)
print(f"转化为张量完毕:{X_tensor.shape}")

以下使用logging:

logger.info("--- 开始数据预处理 (Logging模式) ---")

X = np.expand_dims(X, axis=1) # 在第1维添加通道维度
logger.info(f"添加通道维度:{X.shape}")

y_tensor = torch.tensor(y, dtype=torch.long)
y_onehot = F.one_hot(y_tensor, num_classes=4)  
logger.info(f"对标签进行独热编码:{y_onehot.shape}")

X_tensor = torch.tensor(X, dtype=torch.float32)
logger.info(f"转化为张量完毕:{X_tensor.shape}")

可以看到两种方法的代码相差不大,然而在输出结果上:

--- 开始数据预处理 (Print模式) ---
添加通道维度:(32, 1, 28, 28)
对标签进行独热编码:torch.Size([32, 4])
转化为张量完毕:torch.Size([32, 1, 28, 28])
11:30:05 - INFO - --- 开始数据预处理 (Logging模式) ---
11:30:05 - INFO - 添加通道维度:(32, 1, 28, 28)
11:30:05 - INFO - 对标签进行独热编码:torch.Size([32, 4])
11:30:06 - INFO - 转化为张量完毕:torch.Size([32, 1, 28, 28])

print模式的输出结果相较于日志缺少很多关键信息,例如时间节点,日志级别,日志信息的来源,以及日志信息的内容。

这使得调试和排查漏洞时更难精确定位程序问题。

返回文章列表

Next

Home