python学习笔记 day29 logging模块
1. logging配置方式--basicConfig
import logging logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(filename)s [line:%(lineno)d] %(levelname)s %(message)s', datefmt="%a %d %b %Y:%M:%S", filename='test.log', filemode='w') logging.debug("debug message") logging.info("info message") logging.warning("warning message") logging.error("error message") logging.critical("critical message")
运行结果(test.log文件中会记录log信息):
如果我们想在控制台输出上述信息,可以这样:
import logging logging.basicConfig(level=logging.DEBUG, # DEBUG以上的级别都会打印 format='%(asctime)s %(filename)s [line:%(lineno)d] %(levelname)s %(message)s', # 设置格式 datefmt="%a %d %b %Y:%M:%S") # asctime的格式 logging.debug("debug message") logging.info("info message") logging.warning("warning message") logging.error("error message") logging.critical("critical message")
运行结果:
如果我们想打印中文的日志信息,如果是吧日志写入文件,则会乱码:
import logging logging.basicConfig(level=logging.DEBUG, # DEBUG 以上的信息都会打印(debug info warning error critical ) format='%(asctime)s %(filename)s [line:%(lineno)d] %(levelname)s %(message)s', # 设置格式 datefmt='%a %d %b %Y:%M %S', # 设置日期格式 filename='test1.log', # 往test.log文件中写入日志信息 filemode='w') try: # 如果想要把错误信息以日志的形式写入文件中,则事先必须知道是什么类型的错误,才能进行捕捉 message=int(input(">>>")) # 当用户输入非数字的内容,写入文件时 就会乱码 except ValueError: logging.error("您输入的格式有误,必须输入数字!")
运行结果:
但是如果想打印的日志信息包含中文,输出在控制台就没事:
import logging logging.basicConfig(level=logging.DEBUG, # DEBUG 以上的信息都会打印(debug info warning error critical ) format='%(asctime)s %(filename)s [line:%(lineno)d] %(levelname)s %(message)s', # 设置格式 datefmt='%a %d %b %Y:%M %S') # 设置日期格式 # filename='test1.log', # 往test.log文件中写入日志信息 # filemode='w') try: # 如果想要把错误信息以日志的形式写入文件中,则事先必须知道是什么类型的错误,才能进行捕捉 message=int(input(">>>")) # 当用户输入非数字的内容,写入文件时 就会乱码 except ValueError: logging.error("您输入的格式有误,必须输入数字!")
运行结果:
basic Config 有两个问题:
1. 日志信息不能同时在文件和控制台输出;
2. 往文件中输入带有中文的日志信息时,会出现乱码问题;
2. logging的配置方式----getLogger
import logging logger=logging.getLogger() fh=logging.FileHandler("test.log",'w',encoding='utf-8') # 可以设置文件操作符 ,默认往文件中写的方式时 a 追加 ch=logging.StreamHandler() # 可以往控制台输出日志信息 formatter=logging.Formatter("%(asctime)s %(filename)s %(levelname)s %(message)s") fh.setFormatter(formatter) # 文件操作符绑定格式 ch.setFormatter(formatter) logger.setLevel(logging.DEBUG) # logger对象默认设置WARNING 才会显示 我们可以通过logger.setLevel()设置级别(一定要对logger对象设置!而不是fh 文件操作符) logger.addHandler(fh) # logger 对象绑定文件按操作符 logger.addHandler(ch) logging.debug("debug message(即使想输出中文的日志信息,文件中也不会出现乱码)") logging.info("info message") logging.warning("warning message") logging.error("error message") logging.critical("critical message")
文件中的日志信息:
控制台的日志信息:
1. logger对象这种配置方式解决了上述basicConfig配置方式 往文件中输入日志信息中文乱码的情况;
2.日志信息 可以同时往文件和控制台输出;
talk is cheap,show me the code