使用python的日志包,如何使用相同的Logger写入不同的日志文件

时间:2014-07-01 22:14:12

标签: python python-2.7 logging

我有两个文件名“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?这样我就不会将所有内容都记录到一个文件中。

0 个答案:

没有答案