Pyhton3 log unicode error



我把我的烧瓶服务器日志送到了logstash。我使用了以下代码。

import logging, logging.handlers
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
format = logging.Formatter('%(asctime)-s %(levelname)s %(thread)d --- [%(name)s] %(module)s.%(funcName)s :             %(message)s')
command_line = logging.StreamHandler()
command_line.setLevel(logging.DEBUG)
command_line.setFormatter(format)
logger.addHandler(command_line)
logs = logging.handlers.DatagramHandler('localhost', 5000)
logs.setLevel(logging.DEBUG)
logs.setFormatter(format)
logger.addHandler(logs)

但是在 logstash 和 kibana 仪表板消息中,将 Unicode 字符作为 follwong

\u0000\u0000\u0002\xF3}q\u0000(X\v\u0000\u0000\u0000processNameq\u0001X\v\u0000\u0000\u0000MainProcessq\u0002X\u0000\u0000\u0000stack_infoq\u0003NX\a\u0000\u0000\u0000createdq\u0004GA\xD6ET\x86u\xE4mX\\u0000\u0000\u0000threadNameq\u0005X\u0000\u0000\u0000MainThreadq\u0006X\u0006\u0000\u0000\u0000moduleq\aX\t\u0000\u0000\u0000_internalq\bX\b\u0000\u0000\u0000pathnameq\tXc\u0000\u0000\u0000

\u0000/Library/Frameworks/Python.. 框架/Versions/3.4/lib/python3.4/site-packages/werkzeug/_internal.pyqX\t\u0000\u0000\u0000levelnameq\vX\u0004\u0000\u0000\u0000INFOq\fX\u000F\u0000\u0000\u0000relativeCreatedq\rG@\xA8\x9C\xD3y\x80\u0000\u0000X\u0006\u0000\u0000\u0000\u000\u000\u0 000threadq\u000EL140736587924416LX\b\u0000\u0000\u0000funcNameq\u000FX\u0004\u0000\u0000\u0000_logq\u0010X\u0003\u0000\u0000\u0000msgq\u0011X;\u0000\u0000\u0000 * 在 http://127.0.0.1:5005/上运行(按 CTRL+C 退出)q\u0012X\b\u0000\u0000\u0000exc_textq\u0013NX\u0005\u0000\u0000\u0000msecsq\u0014G@\x8AP\x899\u0000\u0000\u0000X\a\u0000\u0000\u0000asctimeq\u0015X\u0017\u0000\u0000\u00002017-05-12 11:41:37,842q\u0016X\a\u0000\u0000\u0000processq\u0017M\xE3,X\b\u0000\u0000\u0000exc_infoq\u0018NX\u0004\u0000\u0000\u0000nameq\u0019X\b\u0000\u0000\u0000werkzeugq\u001AX\u0006\u0000\u0000\u0000linenoq\eKWX\b\u0000\u0000\u0000文件名q\u001CX\f\u0000\u0000\u0000_internal.pyq\u001DX\u0004\u0000\u0000\u0000argsq\u001ENX\a\u0000\u0000\u0000消息q\u001FX;\u0000\u0000\u0000 * 运行在 http://127.0.0.1:5005/(按 CTRL+C 退出)q X\a\u0000\u0000\u0000\u0000levelnoq!K\u0014u.

如何解决此问题?

您可以使用以下库替换日志处理程序:

https://github.com/vklochan/python-logstash

所以你的代码可以像这样重写:

import logging, logstash
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
command_line = logstash.TCPLogstashHandler('localhost', 5000, version=1)
command_line.setLevel(logging.DEBUG)
logger.addHandler(command_line)
logs = logstash.LogstashHandler('localhost', 5000, version=1)
logs.setLevel(logging.DEBUG)
logger.addHandler(logs)

我发现这个解决方案在代码开始时对我非常有帮助:

import sys
sys.stdout.reconfigure(encoding="utf-8")
sys.stderr.reconfigure(encoding="utf-8")

最新更新