簡體   English   中英

記錄不記錄所有腳本

[英]Logging not logging all scripts

我有一個由多個包構成的項目。 其中一些是類,其他只有方法。 要登錄,我的主文件中有這個:

import logging
from logging.config import fileConfig

logging.getLogger('boto3').setLevel(logging.CRITICAL)
logging.getLogger('botocore').setLevel(logging.CRITICAL)
logging.getLogger('s3transfer').setLevel(logging.CRITICAL)

p = os.path.dirname(os.path.realpath(__file__))
fileConfig(f'{p}/logging.ini', defaults={'log_filename': "project.log"})

其中logging.ini定義為:

[loggers]
keys=root

[handlers]
keys=fileHandler

[formatters]
keys=formatter

[logger_root]
level=DEBUG
handlers=fileHandler

[handler_fileHandler]
class=handlers.TimedRotatingFileHandler
level=DEBUG
suffix="%Y-%m-%d.log"
formatter=formatter
args=('%(log_filename)s','midnight',1,5)

[formatter_formatter]
format=%(asctime)s %(name)-12s %(levelname)-8s %(message)s
datefmt=

在我的主文件中,我初始化了一個名為 Pipeline 的類,它導入了多個腳本並在其初始化中具有:

self.logger = logging.getLogger(__name__)

在其他不是類的模塊中,我只是這樣做:

logger = logging.getLogger(__name__)

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

我不明白的是為什么對於“簡單”模塊,實際上沒有記錄日志。 但是,如果我注釋上一行,並且只執行logging.info(...) ,我會使用根鍵為它們獲取日志:

2020-03-17 16:35:36,072 core.pipeline INFO     _generate_trajectories_heat_map() called.
2020-03-17 16:35:36,337 root         INFO     Drawing image...
2020-03-17 16:35:37,178 root         INFO     Drawing velocities of vehicles...

我正在努力尋找我所缺少的東西。 一個最小的例子可以在這里找到:

https://drive.google.com/open?id=1bfGnikaCng_4N1rR05RYG2G2RcvsQoBP

如果你運行main.py ,只會記錄Pipeline類。 如果您將mypackage.py從它的內容更改為:

import logging

logger = logging.getLogger(__name__)

def method():
    logging.info("Logging method from package.")

一切都會被記錄下來。

文檔

fileConfig()函數采用默認參數disable_existing_loggers ,出於向后兼容性的原因,該參數默認為True 這可能是也可能不是您想要的,因為它會導致在fileConfig()調用之前存在的任何記錄器被禁用,除非它們(或祖先)在配置中明確命名。 有關更多信息,請參閱參考文檔,並根據需要為此參數指定False

所以,這一行:

fileConfig(f'{p}/logging.ini', defaults={'log_filename': "mylog.log"},
       disable_existing_loggers=False)

將解決問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM