#coding:utf-8
import logging
def log():
#创建logger,如果参数为空则返回root logger
logger = logging.getLogger() #定义一个logger(日志器提供应用程序提供接口)
logger.setLevel(logging.ERROR ) #设置logger日志等级
# 判断logger是否已经添加过handler,是则直接返回logger对象,否则执行handler设定以及addHandler(ch)
if not logger.handlers:
#创建handler(日志处理器)将logger创建的日志按照自身定义的formatter格式输出到指定地方
fh = logging.FileHandler("D:\\workspace\\thinksns\\result\\log\\test.log",encoding="utf-8") #将日志消息发送到磁盘文件,默认情况下文件大小会无限增长
ch = logging.StreamHandler() #将日志消息发送到输出到Stream,如std.out, std.err或任何file-like对象。
#设置输出日志格式
formatter = logging.Formatter(
fmt="%(asctime)s %(levelname)s %(filename)s%(funcName)s %(message)s", #指定消息格式化字符串,如果不指定该参数则默认使用message的原始值
datefmt="%Y/%m/%d %X" #指定日期格式字符串,如果不指定该参数则默认使用"%Y-%m-%d %H:%M:%S"
)
#将formatter定义的格式加载到handler
fh.setFormatter(formatter)
ch.setFormatter(formatter)
#为logger添加的日志处理器,
logger.addHandler(fh)
logger.addHandler(ch)
return logger
如果去掉if not logger.handlers:语句,我们日志将会重复输出2次,所以在日志使用前,加以判断有就直接返回logger,没有就创建后返回