Python日志记录-如何禁用软件包的日志记录?

用户名

这个问题使我很生气。我只想使用basicConfig进行日志记录,但是模块(uvicorn)也在记录该文件。

例:

2019-11-27 14:44:29,595 - uvicorn - INFO - ('127.0.0.1', 62211) - "GET /consumption/xyz HTTP/1.1" 200

('127.0.0.1', 62211) - "GET /consumption/xyz HTTP/1.1" 200

我不希望出现第二条消息,因为它是重复的...如何禁用该消息?

更新:使用的代码...

formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logging.getLogger("snowflake.connector.network").disabled = True # remove snowflake network logging
logging.getLogger("snowflake.connector.connection").disabled = True
logging.getLogger('snowflake.connector').setLevel(logging.INFO)
logging.getLogger('boto3').setLevel(logging.INFO)
logging.getLogger('botocore').setLevel(logging.CRITICAL)
logging.getLogger('urllib3').setLevel(logging.CRITICAL)
logging.basicConfig(filename=f'{CFG.get("log_path")}',
                    filemode='w',
                    level=logging.DEBUG,
                    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
                    )
rotating = RotatingFileHandler(f'{CFG.get("log_path")}', maxBytes=1024*1024*500, backupCount=4)
logging.getLogger('').addHandler(rotating)

设置access-log = False后登录。我打了几次API:

2019-12-02 10:16:26,635 - uvicorn - WARNING - auto-reload only works when app is passed as an import string.
2019-12-02 10:16:26,656 - uvicorn - INFO - Started server process [20653]
2019-12-02 10:16:26,656 - uvicorn - INFO - Waiting for application startup.
2019-12-02 10:16:26,657 - uvicorn - INFO - Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
2019-12-02 10:16:43,379 - uvicorn - INFO - Shutting down
2019-12-02 10:16:43,479 - uvicorn - INFO - Waiting for application shutdown.
2019-12-02 10:16:43,479 - uvicorn - INFO - Finished server process [20653]
Finished server process [20653]

当access_log = True时记录:

2019-12-02 10:17:44,438 - uvicorn - WARNING - auto-reload only works when app is passed as an import string.
2019-12-02 10:17:44,459 - uvicorn - INFO - Started server process [20791]
2019-12-02 10:17:44,459 - uvicorn - INFO - Waiting for application startup.
2019-12-02 10:17:44,460 - uvicorn - INFO - Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
2019-12-02 10:17:58,571 - uvicorn - INFO - ('127.0.0.1', 55861) - "GET / HTTP/1.1" 200
('127.0.0.1', 55861) - "GET / HTTP/1.1" 200
和D。

logging.basicConfig添加一个Handler然后,您去添加另一个。两者都指向同一个文件。

logging.basicConfig(filename=f'{CFG.get("log_path")}',
                    filemode='w',
                    level=logging.DEBUG,
                    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
                    )
rotating = RotatingFileHandler(f'{CFG.get("log_path")}', maxBytes=1024*1024*500, backupCount=4)
logging.getLogger('').addHandler(rotating)

因此,要查看如何解决此问题,最好查看logging.basicConfig实际执行的操作:

def basicConfig(**kwargs):

    _acquireLock()
    try:
        if len(root.handlers) == 0:
            filename = kwargs.get("filename")
            if filename:
                mode = kwargs.get("filemode", 'a')
                hdlr = FileHandler(filename, mode)
            else:
                stream = kwargs.get("stream")
                hdlr = StreamHandler(stream)
            fs = kwargs.get("format", BASIC_FORMAT)
            dfs = kwargs.get("datefmt", None)
            fmt = Formatter(fs, dfs)
            hdlr.setFormatter(fmt)
            root.addHandler(hdlr)
            level = kwargs.get("level")
            if level is not None:
                root.setLevel(level)
    finally:
        _releaseLock()

内联basicConfig结果为:

root = logging.getLogger('')
if len(root.handlers) == 0:
    filename = f'{CFG.get("log_path")}'
    mode = 'w'
    hdlr = FileHandler(filename, mode)
    fs = '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
    dfs = None
    fmt = Formatter(fs, dfs)
    hdlr.setFormatter(fmt)
    root.addHandler(hdlr)
    root.setLevel(logging.DEBUG)

rotating = RotatingFileHandler(f'{CFG.get("log_path")}', maxBytes=1024*1024*500, backupCount=4)
root.addHandler(rotating)

你看到这个问题了吗?相同的文件设置了Handler两次,为解决这个问题,请将其写为:

root = logging.getLogger('')
if len(root.handlers) == 0:
    filename = f'{CFG.get("log_path")}'
    hdlr = RotatingFileHandler(filename, maxBytes=1024*1024*500, backupCount=4)
    fs = '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
    fmt = Formatter(fs)
    hdlr.setFormatter(fmt)
    root.addHandler(hdlr)
    root.setLevel(logging.DEBUG)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章