首页 > 解决方案 > Python日志记录将所有级别的日志写入文件

问题描述

import logging

def set_logging():
    logging.basicConfig(
        format='%(asctime)s %(levelname)s %(message)s',
        level=logging.INFO,
        datefmt='%m/%d/%Y %I:%M:%S %p'
        )
    logger = logging.getLogger('simple_example')
    fl = logging.FileHandler("myapp.log")
    fl.setLevel(logging.INFO)
    logger.addHandler(fl)
    return logger

if __name__ == "__main__":
    logger = set_logging()
    logger.info('infoooo')
    logger.error('erorrrr')

Output:
/home/admin# python logging.py
09/08/2019 02:40:36 PM INFO infoooo
09/08/2019 02:40:36 PM ERROR erorrrr
/home/admin# cat myapp.log
infoooo
erorrrr

如果我在上面的代码中注释掉 logging.basicConfig() 行,在控制台中看不到输出,并且只有“errrrr”消息被写入文件。我可以在上面的代码中更改什么以将所有级别的日志写入文件而不向控制台写入任何内容?

标签: pythonlogging

解决方案


您可以使用logger.propagate = False禁用控制台日志记录。

import logging

def set_logging():
    logging.basicConfig(
        format='%(asctime)s %(levelname)s %(message)s',
        level=logging.INFO,
        datefmt='%m/%d/%Y %I:%M:%S %p'
        )
    logger = logging.getLogger('simple_example')
    logger.propagate = False
    fl = logging.FileHandler("myapp.log")
    fl.setLevel(logging.INFO)
    logger.addHandler(fl)
    return logger

if __name__ == "__main__":
    logger = set_logging()
    logger.info('infoooo')
    logger.error('erorrrr')

推荐阅读