簡體   English   中英

Python:如何使用 dictConfig 為庫正確配置日志記錄?

[英]Python: How to properly configure logging for a library with dictConfig?

我有一個具有這種結構的項目文件夾:

.
├── myapp.py
└── mypackage
    ├── __init__.py
    └── mymodule.py

現在我想按照文檔( 為庫配置日志記錄)中的描述為mypackage配置日志記錄,所以我在__init__.py的頂級記錄器中添加了一個NullHandler

import logging
logging.getLogger(__name__).addHandler(logging.NullHandler())

然后在mymodule.py中生成一個記錄器實例並使用它:

import logging
logger=logging.getLogger(__name__)

def myfunc():
    logger.warning('logging from mymodule.py')

myapp.py ,我像這樣配置記錄器:

import logging
import logging.config
import mypackage.mymodule as mm

if __name__ == '__main__':

    LOGGING = {'version': 1}
    console_handler = {'class': 'logging.StreamHandler'}
    LOGGING['handlers'] = {'console_handler': console_handler}
    root_logger = {'handlers': ['console_handler']}
    LOGGING['loggers'] = {'': root_logger}
    
    logging.config.dictConfig(LOGGING)
    
    applogger = logging.getLogger(__name__)
    applogger.warning('logging from myapp.py')
    
    mm.myfunc()

因為我正在向根記錄器 ( '' ) 添加處理程序,所以我現在希望看到兩條消息( myapp.py中的一條消息和myfunc中的一條消息),但我只看到:

$ python -m myapp
logging from myapp.py

我究竟做錯了什么?

您錯過了logging.config.dictConfig()方法禁用現有記錄器,除非您告訴它不要這樣做。 請參閱Dict Schema 詳細信息部分

disable_existing_loggers - 是否要禁用任何現有的非根記錄器。 此設置反映了fileConfig()中同名的參數。 如果不存在,則此參數默認為True 如果 incremental 為True ,則忽略此值。

(大膽強調我的)。

您的圖書館記錄器被禁用:

(Pdb) logging.getLogger("mypackage.mymodule").disabled
False
(Pdb) n
> /.../myapp.py(16)<module>()
-> applogger = logging.getLogger(__name__)
(Pdb) logging.getLogger("mypackage.mymodule").disabled
True

明確將其設置為False ,或將incremental設置為True ,例如:

    LOGGING = {'version': 1, 'disable_existing_loggers': False}

暫無
暫無

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

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