python 日志模块logging
程序员文章站
2022-07-14 23:11:29
...
Python日志级别
import logging
logging.info("Start print log")
logging.debug("Do something")
logging.warning("Something maybe fail.")
logging.info("Finish")
logging.critical("asd")
python日志级别主要分为5个级别。可以通过logging.basicConfig()更改默认日志的配置
其中:
filename : 写入的文件名
filemode :打开文件方式
format : 指定handler使用的日志显示格式
datefmt: 指定日期时间格式
stream : 指定日志写入文件还是在控制台输出
定制自定义日志对象
import logging
logger=logging.getLogger("NAME") 、
"""log对象是树形结构
NAME是对象名,相同的对象名指向一个对象,可以通过
NAME.son的形式给NAME添加子树对象
不传递名字时候,log的对象是根节点
注意:当父节点在输出时,子节点也会输出,此时log会输出父亲节点的输出和自己的输出,
出现重复输出的现象"""
logger.setLevel("DEBUG")
fm=logging.Formatter("%s(asctime) %s(messages)") #设置日志打印格式
fh=logging.FileHandler("lianxian.txt") #写入到文件的对象
fh.setFormatter(fm) #设置写入文件对象的输出格式
ch=logging.StreamHandler() #在屏幕打印的对象
ch.setFormatter(fm) #屏幕打印的对象的输出格式
logger.addHandler(ch) #将写入文件和打印屏幕的对象都加入logger
logger.addHandler(fh)
多次实例化对象出现日志重复输出解决方法
def my_log():
logger = logging.getLogger('mysql')
# 判断logger是否已经添加过handler,是则直接返回logger对象,否则执行handler设定以及addHandler(ch)
if not logger.handlers:
ch = logging.StreamHandler()
ch.setLevel(logging.ERROR)
fmt = logging.Formatter('%(asctime)s - %(message)s')
ch.setFormatter(fmt)
logger.addHandler(ch)
return logger
判断handler是否已经存在,存在则直接返回对象
上一篇: python编码问题