PaddlePaddle / Paddle

PArallel Distributed Deep LEarning: Machine Learning Framework from Industrial Practice (『飞桨』核心框架,深度学习&机器学习高性能单机、分布式训练和跨平台部署)
http://www.paddlepaddle.org/
Apache License 2.0
22.11k stars 5.55k forks source link

Abuses of logging.getLogger("root") harm unrelated innocent logger use. 滥用root logger影响所有logger的使用 #63529

Open zyckk4 opened 5 months ago

zyckk4 commented 5 months ago

bug描述 Describe the Bug

Abuses of logging.getLogger("root") can lead to duplicate log output of innocent loggers. 滥用root logger完全不合理,会导致用户使用自己的logger时重复输出。

Sample code 示例代码

import logging
import paddle

logger = logging.getLogger(__name__)
sh = logging.StreamHandler()
logger.addHandler(sh)
logger.setLevel(logging.INFO)
logger.info('123')

Output 运行结果

123
INFO 2024-04-15 15:21:31,389 test2.py:9] 123

The second line outputs due to the import of paddle, which makes no sense. U may consider using logging.getLogger(__name__) or logging.getLogger(__package__) or something like that to manage ur logger usage. At least, don't abuse root logger.

第二行就因为导入了paddle而被输出,太离谱。应当考虑使用logging.getLogger(__name__)logging.getLogger(__package__)管理项目里使用的logger,起码不要滥用root logger。

其他补充信息 Additional Supplementary Information

No response

cyber-pioneer commented 5 months ago
image

示例代码未能复现,请补充一下更具体的复现条件

zyckk4 commented 5 months ago

@cyber-pioneer 使用的paddlepaddle==2.6.1,cpu和gpu版,python3.9.16和3.12.2,windows和debian下,都分别试过,会重复输出

另一个更直接的代码说明:

import logging
print(logging.root.handlers)
import paddle
print(logging.root.handlers)

输出结果

[]
[<StreamHandler <stderr> (NOTSET)>]
zyckk4 commented 5 months ago

@cyber-pioneer 测了一下python3.8不会,3.9.0就会有问题了,你是用的3.8吗

mookixiao commented 2 months ago

同样的问题,提了新的issue https://github.com/PaddlePaddle/Paddle/issues/66420