当前位置: 首页 > 后端技术 > Python

日志采集遇到打印堆栈换行符的问题

时间:2023-03-26 01:50:24 Python

问题描述和Loki的promtail、阿里云的logtail类似,默认的日志采集方式是按行采集,即把每一行看成一个独立的日志。一般没问题。但是有些不适合需要打印完整栈异常的场景。异常栈:解决方案JSON序列化解决方案是什么?我们可以把日志序列化成json,把完整的日志封装成json,像这样:{"text":"2022-01-2107:42:34.191|ERROR|services:compare:229-1validationerrorforParseResultVO\nclip_result\n值不是有效的字典(类型=type_error.dict)\n回溯(最近调用最后):\n\n,ParseResultVO的验证错误\nclip_result\n值不是有效的字典(类型=type_error.dict)\n回溯(最后一次调用):\n\n,ParseResultVO的验证错误\nclip_result\n值不是有效的字典(类型=type_error.dict)\n回溯(最近一次调用):\n\n,验证ParseResultVO错误\nclip_result\n值不是有效的字典(类型=type_error.dict)\n回溯(最近一次调用):\n\n,“记录”:{“经过”:{“repr”:“0:00:16.725738","seconds":16.725738},"exception":{"type":"ValidationError","value":"ParseResultVO\nclip_result\n的1个验证错误值不是有效的字典(典型值e=type_error.dict)","traceback":true},"extra":{},"file":{"name":"services.py","path":"/code/./services.py"},"function":"compare","level":{"icon":"\u274c","name":"ERROR","no":40},"line":229,"message":“ParseResultVO\nclip_result\n值的1个验证错误不是有效的字典(type=type_error.dict)”,“模块”:“服务”,“名称”:“服务”,“过程”:{“id”:1,"name":"MainProcess"},"thread":{"id":140684147231552,"name":"GreenThread-24"},"time":{"repr":"2022-01-2107:42:34.191365+00:00","timestamp":1642750954.191365}}}但是这样做最大的问题是我们丢失了栈的二维信息,变成了一维平面,很不爽,很费力!!!OK第一种正则表达式的另一种方式:我们判断每一行开头的格式,只有以特定格式开头的行才会被认为是新日志的开头!一般来说,日志的开头开始无线th一个时间戳,你可以写一个正则表达式来判断!当然,您也可以使用定界符。在阿里云SLS的demo中,先选择全正则模式,关闭单线模式。选择一些有代表性的日志,复制到“日志样本”框中。点击AutoGenerate,会生成行首对应的正则表达式,最终效果会不错:参考文章:使用完全正则模式收集日志