#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,没有就创建后返回