基础配置
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。