我注意到,当我调用另一个函数时,它仍然可以访问记录器,即使它没有被传递。例如,以下文件总是写入testlogger.log
:
import logging
from datetime import datetime
def printHello():
print('Hello')
logger.info('printed hello')
printGoodbye()
def printGoodbye():
print('Goodbye')
logger.info('printed goodbye')
if __name__ == "__main__":
logger = logging.getLogger(__name__)
FORMAT = '%(name)s - %(levelname)s - %(message)s'
logging.basicConfig(filename='testlogger.log', level=logging.DEBUG, format=FORMAT)
logger.info(datetime.now().strftime('%H:%M %d-%m-%Y.log'))
logger.info('About to call function printHello')
printHello()
logger.info('Now exiting')
应该这样做吗?另外,我正在进行的项目被分为几个模块,完成后,这些模块将互相调用。每个模块是否应该有一个单独的日志文件?如果是这样的话,是否约定只是以创建日志文件的脚本的名称命名?你知道吗
最好的方法是遵循Python logging documentation的建议:
这样做将使您能够对日志进行相对细粒度的控制。默认情况下(使用
logging.basicConfig
),每个模块的日志记录都将以相同的方式工作:它将处于同一级别,并转到同一位置,但如果需要,现在可以为特定模块打开或关闭日志记录,或者为一个模块打开高级别日志记录。请参见Python logging to multiple handlers, at different log levels?以获取如何执行该操作的示例。你知道吗跨函数访问
logger
变量的原因是,当您在顶层为它赋值时,会创建一个“全局”变量(它不是真正的全局变量,它有模块作用域)。更好的方法是在脚本顶部自己显式创建记录器:相关问题 更多 >
编程相关推荐