• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

详解python logging日志传输

python 搞代码 4年前 (2022-01-09) 13次浏览 已收录 0个评论

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的构造方法需要两个参数:消息的格式字符串和日期字符串,这两个参数都是可选的
    本文来源gaodai.ma#com搞##代!^码@网*

与log4j类似,logger,handler和日志消息的调用可以有具体的日志级别(Level),只有在日志消息的级别大于logger和handler的级别。

import logging
logging.basicConfig(level=logging.DEBUG,
  format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
  datefmt='%a, %d %b %Y %H:%M:%S',
  filename='myapp.log',
  filemode='w')
#################################################################################################
#定义一个StreamHandler,将INFO级别或更高的日志信息打印到标准错误,并将其添加到当前的日志处理对象#
console = logging.StreamHandler()
console.setLevel(logging.INFO)
formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s')
console.setFormatter(formatter)
logging.getLogger('').addHandler(console)
#################################################################################################
logging.debug('This is debug message')
logging.info('This is info message')
logging.warning('This is warning message')
 
屏幕上打印:
root : INFO This is info message
root : WARNING This is warning message
./myapp.log文件中内容为:
Sun, 24 May 2009 21:48:54 demo2.py[line:11] DEBUG This is debug message
Sun, 24 May 2009 21:48:54 demo2.py[line:12] INFO This is info message
Sun, 24 May 2009 21:48:54 demo2.py[line:13] WARNING This is warning message

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:详解python logging日志传输

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址