我有两个文件名“parent”和“child”。没有类,只有两个带有函数和if __name__ == "__main__"
语句的文件。它们的主要函数中的两个文件都有一个函数,该函数使用TimedRotatingFileHandler
创建一个logger = logging.getLogger('MyLogger')
的记录器对象,然后返回记录器。该功能如下所示:
def setupLogFile():
LOG_FILE_NAME = "/path/to/pyrpc.log"
logHandler = TimedRotatingFileHandler(LOG_FILE_NAME, when="midnight")
logFormatter = logging.Formatter('%(asctime)s |%(levelname)s|: %(message)s')
logHandler.setFormatter(logFormatter)
logger = logging.getLogger('MyLogger')
logger.addHandler(logHandler)
logger.setLevel(logging.INFO)
return logger
两个文件中的许多功能都包含诸如
之类的调用logger.info("log something important")
让我们调用其中一个函数“funcA()”。我的问题是,如果父导入子,然后父母的某个地方有一行运行
child.funcA()
如何使“logger.info(”log something important“)”funcA()中的行知道使用在父主函数中创建的记录器对象?
现在我收到以下错误
Traceback (most recent call last):
File "testblockadder.py", line 57, in <module>
testInitialDBData(topBlockHeight)
File "testblockadder.py", line 33, in testInitialDBData
testpyrpc.testBlock(block, blkHeight)
File "/path/to/pyrpc.py", line 46, in testBlock
logger.info("log something important")
NameError: global name 'logger' is not defined
我已阅读过使用
在模块级别声明记录器的内容logger = logging.getLogger(__name__)
但似乎总是使用logging.basicConfig()
,我相当肯定这意味着每次都必须登录到同一个文件。在父日志中专门运行的函数与funcA()的文件不同。如果我在父级中运行的任何代码都记录到同一个日志文件中,那就没关系,但是我需要该文件中的日志才能说出该日志被调用的文件(即它是来自父项还是子项) )。
编辑:我已设法使用此SO帖子difference in logging mechanism: API and application(python)中的提示来获取我需要的日志记录。但是我对这种类型的设置有一个挥之不去的问题。我已使用basicConfig
设置formatter
和记录位置。有没有办法更改StreamHandler
为我设置的默认basicConfig
而不是TimedRotatingFileHandler
?这样我就不会将所有内容都记录到一个文件中。