Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用默认返回到Python打印的登录包?_Python_Logging - Fatal编程技术网

如何使用默认返回到Python打印的登录包?

如何使用默认返回到Python打印的登录包?,python,logging,Python,Logging,我想将我的包的打印语句更改为使用日志记录。所以我会像这样写我的脚本 import logging logger = logging.getLogger(__name__) def func(): logger.info("Calling func") 推荐哪种方式 但是,许多用户不会初始化日志记录,因此不会看到输出 是否有一种推荐的方法,使不初始化日志记录的用户可以看到信息输出,而那些明确设置日志记录的用户不会被我的软件包篡改其特定配置?作为一般经验法则,模块不应直接配置日志记录(并

我想将我的包的
打印
语句更改为使用
日志记录
。所以我会像这样写我的脚本

import logging
logger = logging.getLogger(__name__)

def func():
    logger.info("Calling func")
推荐哪种方式

但是,许多用户不会初始化日志记录,因此不会看到输出


是否有一种推荐的方法,使不初始化日志记录的用户可以看到
信息
输出,而那些明确设置日志记录的用户不会被我的软件包篡改其特定配置?

作为一般经验法则,模块不应直接配置
日志记录
(并对共享STDOUT/STDERR进行其他未经请求的更改),因为这是模块用户的领域。如果用户想要输出,他应该显式地启用
日志记录
,然后,也只有在那时,您的模块才被允许登录

如果您提供了一个在模块内显式启用日志记录的界面,这样用户就不必显式地更改内部组件的级别/禁用日志记录者(如果他们只对从自己的代码进行日志记录感兴趣),那么就可以获得额外的积分

当然,要在STDOUT/STDERR处理程序尚未初始化时继续使用
logging
,您可以使用
logging.NullHandler
,因此您在模块中需要做的就是:

import logging

logger = logging.getLogger(__name__)
logger.addHandler(logging.NullHandler())  # initialize your logger with a NullHandler


def func():
    logger.info("Calling func")

func()  # (((crickets)))
现在,您可以在整个模块中继续使用
记录器
,直到用户初始化
日志
您的模块不会擅自更改输出,例如:

import your_module

your_module.func()  # (((crickets)))

import logging

logging.root.setLevel(logging.INFO)  
logging.info("Initialized!")  # INFO:root:Initialized!

your_module.func()  # INFO:your_module:Calling func
当然,实际的日志格式、级别和其他设置也应该在用户的领域中,因此,如果他们更改根日志处理程序的格式,那么它也应该由模块记录器继承