python中log模块的配置

基础配置

import logging
from logging.handlers import RotatingFileHandler

logger = logging.getLogger('')
handler = RotatingFileHandler('info.log', maxBytes=100 * 1024 * 1024, backupCount=10)
formatter = logging.Formatter('%(asctime)-12s [%(name)s] [%(levelname)s] %(message)s')
handler.setFormatter(formatter)
handler.setLevel(logging.INFO)
logger.addHandler(handler)
logger.setLevel(logging.INFO)

for _ in range(10):
    logger.info('Hello, world!')

logging.getLogger("123").warning("hello ironman")

他打出的log就是:

2018-09-21 11:15:34,454 [root] [INFO] Hello, world!
2018-09-21 11:15:34,454 [root] [INFO] Hello, world!
2018-09-21 11:15:34,455 [root] [INFO] Hello, world!
2018-09-21 11:15:34,455 [root] [INFO] Hello, world!
2018-09-21 11:15:34,455 [root] [INFO] Hello, world!
2018-09-21 11:15:34,455 [root] [INFO] Hello, world!
2018-09-21 11:15:34,455 [root] [INFO] Hello, world!
2018-09-21 11:15:34,455 [root] [INFO] Hello, world!
2018-09-21 11:15:34,455 [root] [INFO] Hello, world!
2018-09-21 11:15:34,455 [root] [INFO] Hello, world!
2018-09-21 11:15:34,455 [123] [WARNING] hello ironman

logger的理解

  • 获取logger的时候不传入名称,默认获取到root的logger。

  • 如果设置的是root的logger的handler,那么获取的子log都可以使用同一个配置

    比如上面的例子中让给root配置输出到文件的handler,其他的子log(这里的123)也输出到文件了,如果我们设置handler的时候只对123这个logger设置,而没有设置root的的handler,那么再获取一个234的logger,那么234就会默认输出到控制台。

  • 同一个logger名称,在不同模块中获取,是可以得到相同的实例的,所以不用在模块间传递logger。

你可能感兴趣的:(python中log模块的配置)