InfoQServerless 架构下如何实现日志的实时输出?( 五 )

printurl = os.environ.get("real_time_log_url")cid = os.environ.get("real_time_log_id")ifurl and cid and os.environ.get("real_time_log_id",None):retmsg = {"coid": cid,"data":" ".join([str(eveObject)foreveObjectinargs])}urllib.request.urlopen(urllib.request.Request(url=url,data=http://news.hoteastday.com/a/json.dumps(retmsg).encode("utf-8")))logging进行额外的处理 , 将文件中的defwarning(msg, *args, **kwargs):Log a message with severity 'WARNING' on the root logger. If the logger hasno handlers, call basicConfig to add a console handler with a pre-definedformat."""realTimeLogs("WARNING %s %s"%(str(msg)," ".join([str(eveObject)foreveObjectinargs])))iflen(root.handlers) ==0:上报逻辑:
defrealTimeLogs(data):ifurlandcidandos.environ.get("real_time_log_id",None):retmsg = {"coid": cid,"data": data}urllib.request.urlopen(urllib.request.Request(url=url,))封装成工具

  • 将重写部分封装成客户端工具
  • 将线上函数部分封装成 Component
封装成工具后的整体使用流程:
安装部署实时日志组件 , 新建项目 , 并且建立serverless.yaml通过sls --debugDEBUG ─ Setting tagsforfunctionPythonRealTimeLogs_CleanupDEBUG ─ Creating triggerforfunctionDEBUG ─ DeployedfunctionPythonRealTimeLogs_Cleanup successfulPythonLogs:websocket: ws://service-laabz6zm-1256773370.gz.apigw.tencentcs.com/test/python_real_time_logs26s ? PythonLogs ?donescflogset-w ws://service-laabz6zm-1256773370.gz.apigw.tencentcs.com/test/python_real_time_logsDFOUNDERLIU-MB0:~ dfounderliu$ scflogset-w ws://service-laabz6zm-1256773370.gz.apigw.tencentcs.com/test/python_real_time_logs设置成功region: ap-guangzhou函数的初始化与部署在项目中使用该组件的方法很简单 。
  • 创建一个文件夹 , 并进入
mkdir scflogs &&cdscflogs
  • 初始化项目
scfloginit -l python
  • 创建index.py文件以及serverless.yaml文件:
vimindex.py内容是:
fromlogsimport*defmain_handler(event, context):print("event is: ", event)time.sleep(1)logging.debug("this is debug_msg")time.sleep(1)logging.info("this is info_msg")time.sleep(1)logging.warning("this is warning_msg")time.sleep(1)logging.error("this is error_msg")time.sleep(1)logging.critical("this is critical_msg")time.sleep(1)print("context is: ", event)


推荐阅读