importloggingimportosfrom logging importhandlersclassJsonFilter(logging.Filter):#此处定义字段的默认值,如果打印信息时不设置对应字段,则为默认值
#服务服务名或者服务主机
server = ""
#访问ip
ip = ""
#访问资源路径
sourceurl = ""
#访问方式
method = ""
#访问设备
devices = ""
#访问协议
Protocols = ""
#访问结果的HTTP状态码
result_Httpstatus = ""
#访问结果的状态码
result_status = ""
#访问结果的msg信息
result_msg = ""
#访问结果的数据大小
result_msgsize = ""
deffilter(self, record):
record.server=self.server
record.ip=self.ip
record.sourceurl=self.sourceurl
record.method=self.method
record.devices=self.devices
record.Protocols=self.Protocols
record.result_Httpstatus=self.result_Httpstatus
record.result_status=self.result_status
record.result_msg=self.result_msg
record.result_msgsize=self.result_msgsizereturnTrueclassCommonLog(object):"""日志记录"""
def __init__(self, logger, logname='Access_log'):
self.logname= os.path.join("D:\python protest\protest", '%s' %logname)
self.logger=logger
self.logger.setLevel(logging.INFO)
self.logger.propagate=False
self.filter_=JsonFilter()
self.logger.addFilter(self.filter_)
self.formatter= logging.Formatter("time:%(asctime)s - levelname:%(levelname)s - server:%(server)s - ip:%(ip)s - sourceurl:%(sourceurl)s - method:%(method)s - devices:%(devices)s - Protocols:%(Protocols)s - result_Httpstatus:%(result_Httpstatus)s - result_status:%(result_status)s - result_msg:%(result_msg)s - result_msgsize:%(result_msgsize)s")defconsole(self, level, message):#创建一个FileHandler,用于写到本地
fh = logging.handlers.TimedRotatingFileHandler(self.logname, when='MIDNIGHT', interval=1, encoding='utf-8')
fh.suffix= '%Y-%m-%d.log'fh.setLevel(logging.INFO)
fh.setFormatter(self.formatter)
self.logger.addHandler(fh)#创建一个StreamHandler,用于输出到控制台
ch =logging.StreamHandler()
ch.setLevel(logging.INFO)
ch.setFormatter(self.formatter)
self.logger.addHandler(ch)if level == 'info':
self.logger.info(message)elif level == 'debug':
self.logger.debug(message)elif level == 'warning':
self.logger.warning(message)elif level == 'error':
self.logger.error(message)#这两行代码是为了避免日志输出重复问题
self.logger.removeHandler(ch)
self.logger.removeHandler(fh)#关闭打开的文件
fh.close()defdebug(self, message):
self.console('debug', message)definfo(self, message):
self.console('info', message)defwarning(self, message):
self.console('warning', message)deferror(self, message):
self.console('error', message)if __name__ == '__main__':
logger=logging.getLogger()
log=CommonLog(logger)
log.filter_.server= '127.0.0.1:8100'log.filter_.ip= '127.0.0.1'log.filter_.sourceurl= 'http://127.0.0.1:8100/test'log.filter_.method= 'Get'log.filter_.devices= 'Chrome'log.filter_.Protocols= 'HTTP'log.filter_.result_Httpstatus= '200'log.filter_.result_status= '1001'log.filter_.result_msg= '增加成功'log.filter_.result_msgsize= '4296'log.info("")