1、logging
记录程序日志信息可以很方便的了解程序的运行情况,可以分析用户的操作行为等信息方便开发人员检查bug
logging日志等级:
DEBUG:程序调试bug时使用
INFO:程序正常运行时使用
WARNING:程序未按预期运行时使用,但并不是错误,如:用户登录密码错误
ERROR:程序出错误时使用,如:IO操作失败
CRITICAL:特别严重的问题,导致程序不能再继续运行时使用
默认的是WARNING等级,当在WARNING或WARNING之上等级的才记录日志信息。
日志等级从低到高的顺序是: DEBUG < INFO < WARNING < ERROR < CRITICAL
2、logging 包中记录日志的方式有两种
输出到控制台
import logging
#创建日志处理对象
logger = logging.getLogger()
#设置日志级别
logger.setLevel("DEBUG")
#创建控制台处理器
console_handler = logging.StreamHandler()
#设置控制台等级
console_handler.setLevel("DEBUG") #控制台级别比日志级别高
#日志器添加控制台处理器
logger.addHandler(console_handler)
if __name__ == "__main__"
logging.warning("this is a warning")
logging.info("this is a info")
logging.debug("this is a debug")
logging.error("this is a error")
保存到日志文件
import logging
#创建日志处理对象
logger = logging.getLogger()
#设置日志级别
logger.setLevel(level="DEBUG")
#创建文件日志处理器
file_handler = logging.FileHandler("./log.log",mode='a',encoding="utf8")
#设置文件日志等级
file_handler.setLevel("ERROR")
#添加到日志器
logger.addHandler(file_handler)
if __name__ == '__main__':
logging.warning("this is a warning")
logging.info("this is a info")
logging.debug("this is a debug")
logging.error("this is a error")
输出到控制台和保存到日志文件
import logging
logger = logging.getLogger("Time")
logger.setLevel("DEBUG")
console_handler = logging.StreamHandler()
file_handler = logging.FileHandler("./log1.log",mode="a",encoding="utf8")
fmt1 = logging.Formatter(fmt="%(name)s ===> %(message)s ===> %(asctime)s ")
fmt2 = logging.Formatter(fmt="%(name)s ===> %(asctime)s ===> %(message)s ")
console_handler.setFormatter(fmt1)
file_handler.setFormatter(fmt2)
logger.addHandler(console_handler)
logger.addHandler(file_handler)
if __name__ == '__main__':
logger.warning("this is a warning")
logger.info("this is a info")
logger.debug("this is a debug")
logger.error("this is a error")
level: 表示设置的日志等级
format: 表示日志的输出格式, 参数说明:
%(levelname)s: 打印日志级别名称
%(filename)s: 打印当前执行程序名
%(lineno)d: 打印日志的当前行号
%(asctime)s: 打印日志的时间
%(message)s: 打印日志信息
3、log封装
import logging
class Logger():
def __init__(self,name,level="DEBUG"):
self.log = logging.getLogger(name)
self.log.setLevel(level=level)
#设置控制台格式
def set_console_format(self):
fmt = logging.Formatter("%(name)s ===> %(message)s ===> %(asctime)s ")
return fmt
#设置控制台控制器
def set_console_handler(self,level="DEBUG"):
console_handler = logging.StreamHandler()
console_handler.setFormatter(self.set_console_format())
console_handler.setLevel(level=level)
return console_handler
#设置文件输出格式
def set_file_format(self):
fmt = logging.Formatter("%(name)s ===> %(asctime)s ===> %(message)s ")
return fmt
#设置文件控制器
def set_file_handler(self,path="./log2.log",level="DEBUG"):
file_handler = logging.FileHandler(path,mode="a",encoding="utf8")
file_handler.setFormatter(self.set_file_format())
file_handler.setLevel(level=level)
return file_handler
#获取日志对象
def get_log(self):
self.log.addHandler(self.set_console_handler())
self.log.addHandler(self.set_file_handler())
return self.log
if __name__ == '__main__':
log = Logger("Time")
logger = log.get_log()
logger.warning("this is a warning")
logger.info("this is a info")
logger.debug("this is a debug")
logger.error("this is a error")