详解python logging日志传输

2020-07-01 18:00 来源:易采站长站 作者:王冬梅 点击: 评论:

A-A+

原标题:详解python logging日志传输

1.生成日志并通过http传输出去(通过HTTPHandler方式):

#生成并发送日志
import logging
from logging.handlers import HTTPHandler
import logging.config

def save():
  logger = logging.getLogger(__name__)
  # 生成一个log实例,如果括号为空则返回root logger
  hh = HTTPHandler(host='127.0.0.1:5000', url='/log', method='POST')
  #用HTTPHandler直接发送日志,而并不是写文件再传文件。
  logger.setLevel(logging.INFO)
  #设置日志最低输出级别为info
  logger.addHandler(hh)
  #添加Handler对象给记录器(为logger添加的日志处理器,可以自定义日志处理器让其输出到其他地方)
  logger.info('存入600元') # 输出日志,内容为‘存入600元'
save()

2.用flask接收传过来的日志:

#flask接收日志
from flask import Flask,request
app = Flask(__name__)



@app.route('/log',methods=['POST'])
def say_hello():
  #查看传过来的数据格式:
  print(request.mimetype)
  #HTTPHandler传过来的是个form表单
  print(request.form.to_dict())
  return '<h1>Hello, Flask!</h1>'


if __name__ == '__main__':
  app.run()


输出:
#这是传过来的数据格式,是个form表单
application/x-www-form-urlencoded 

#这是form.to_dict解析出来的内容(直接解析成了字典)
{'name': '__main__', 'msg': '存入600元', 'args': '()', 'levelname': 'INFO', 'levelno': '20', 'pathname': 'C:/Users/huawei/Desktop/code/log/send_log.py', 
'filename': 'send_log.py', 'module': 'send_log', 'exc_info': 'None', 'exc_text': 'None', 'stack_info': 'None', 'lineno': '15', 
'funcName': 'save', 'created': '1593581146.172768', 'msecs': '172.76811599731445', 'relativeCreated': '176.5270233154297',
 'thread': '13904', 'threadName': 'MainThread', 'processName': 'MainProcess', 'process': '3656'}

3.logging模块介绍

       Python的logging模块提供了通用的日志系统,熟练使用logging模块可以方便开发者开发第三方模块或者是自己的Python应用。同样这个模块提供不同的日志级别,并可以采用不同的方式记录日志,比如文件,HTTP、GET/POST,SMTP,Socket等,甚至可以自己实现具体的日志记录方式。下文我将主要介绍如何使用文件方式记录log。

1.基本概念:

logging模块包括logger,handler,filter,formatter这四个基本概念。

logging模块与log4j的机制是一样的,只是具体的实现细节不同。模块提供logger,handler,filter,formatter。

logger:提供日志接口,供应用代码使用。logger最长用的操作有两类:配置和发送日志消息。可以通过logging.getLogger(name)获取logger对象,如果不指定name则返回root对象,多次使用相同的name调用getLogger方法返回同一个logger对象。 handler:将日志记录(log record)发送到合适的目的地(destination),比如文件,socket等。一个logger对象可以通过addHandler方法添加0到多个handler,每个handler又可以定义不同日志级别,以实现日志分级过滤显示。 filter:提供一种优雅的方式决定一个日志记录是否发送到handler。 formatter:指定日志记录输出的具体格式。formatter的构造方法需要两个参数:消息的格式字符串和日期字符串,这两个参数都是可选的。

【易采站长站编辑:秋军】