logger对象
logging.basicConfig()(用默认日志格式(Formatter)微日志系统建立一个默认的
流处理器(StreamHandler),设置基础配置(如日志级别等)并加到root logger(根Logger)
中)这几个logging模块级别的函数,另外还有一个模块级别的函数式logging.getLogger([name])
(返回一个logger对象,如果没有指定名字将返回root logger)
logger=logging.getLogger()
#建两个对象
#向文件发送日志
fh=logging.FileHandler("test_log")#他得知道把内容发送到哪个文件中去所以括号里写上名字
#向屏幕发送日志
ch=logging.StreamHandler()
#这个也是一个对象,
fm=logging.Formatter("%(asctime)s %(message)s")
#让fh和ch都吃一下fm,目的是两种都有这种格式
fh.setFormatter(fm)
ch.setFormatter(fm)
#建完对象,需要拿到两个对象的功能
logger.addHandler(fh)
logger.addHandler(ch)
logger.setLevel("DEBUG")
logging.debug('debug message')
logging.info("info message")
logging.warning("warning message")
logging.error("error message")
logging.critical("critical message")
结果:文件和控制台都可以看到
优点:
可以通过更改fh和ch灵活的对日志信息的显示进行操作。
了解:
当想创建两个logger时,要注意两个logger的名字如果相同修改后面的logger时,会将两个一同修改
logger1=logging.getLogger('mylogger')
logger1.setLevel(logging.DEBUG)
logger2=logging.getLogger('mylogger')
logger2.setLevel(logging.INFO)
fh=logging.FileHandler("test_log")
ch=logging.StreamHandler()
fm=logging.Formatter("%(asctime)s %(message)s")
fh.setFormatter(fm)
ch.setFormatter(fm)
logger1.addHandler(fh)
logger1.addHandler(ch)
logger2.addHandler(fh)
logger2.addHandler(ch)
logger1.debug('logger1 debug message')
logger1.info("logger1 info message")
logger1.warning("logger1 warning message")
logger1.error("logger1 error message")
logger1.critical("logger1 critical message")
logger2.debug('logger2 debug message')
logger2.info("logger2 info message")
logger2.warning("logger2 warning message")
logger2.error("logger2 error message")
logger2.critical("logger2 critical message")
结果:
2020-03-15 12:40:11,811 logger1 info message
2020-03-15 12:40:11,811 logger1 warning message
2020-03-15 12:40:11,811 logger1 error message
2020-03-15 12:40:11,812 logger1 critical message
2020-03-15 12:40:11,812 logger2 info message
2020-03-15 12:40:11,812 logger2 warning message
2020-03-15 12:40:11,812 logger2 error message
2020-03-15 12:40:11,812 logger2 critical message