Pyhton3 log unicode error

时间:2017-05-12 06:17:24

标签: python logging unicode logstash

我将我的烧瓶服务器日志发送到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仪表板中,mesage有unicode字符,如下所示

  

\ u0000的\ u0000的\ U0002 \ XF3} q \ u0000的(X符\ v \ u0000的\ u0000的\ u0000processNameq \ u0001X符\ v \ u0000的\ u0000的\ u0000MainProcessq \ u0002X \ n \ u0000的\ u0000的\ u0000stack_infoq \ u0003NX \一个\ u0000的\ u0000的\ u0000createdq \ u0004GA \ xD6ET \ x86u \ xE4mX \ n \ u0000的\ u0000的\ u0000threadNameq \ u0005X \ n \ u0000的\ u0000的\ u0000MainThreadq \ u0006X \ u0006 \ u0000的\ u0000的\ u0000moduleq \ AX \吨\ u0000的\ u0000的\ u0000_internalq \ BX \ b \ u0000的符\ u0000 \ u0000pathnameq \ TXC符\ u0000 \ u0000的符\ u0000 /库/框架/ Python.framework /版本/ 3.4 / lib中/ python3.4 /站点包/ WERKZEUG / _internal.pyq \ NX \吨\ u0000的\ u0000的\ u0000levelnameq \ VX \ U0004 \ u0000的\ u0000的\ u0000INFOq \ FX \ u000F \ u0000的\ u0000的\ u0000relativeCreatedq \了rG @ \ xA8 \ x9C \ xD3y \ X80 \ u0000的\ u0000X \ u0006 \ u0000的\ u0000的\ u0000threadq \ u000EL140736587924416L \ NX \ 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 \一个\ u0000的\ u0000的\ u0000asctimeq \ u0015X \ u0017 \ u0000的\ u0000的\ u00002017-05-12   11:41:37,842q \ u0016X \一个\ 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的\ u0000filenameq \ u001CX \˚F\ u0000的\ u0000的\ u0000_internal.pyq \ u001DX \ U0004 \ u0000的\ u0000的\ u0000argsq \ u001ENX \一个\ u0000的\ u0000的\ u0000messageq \ u001FX; \ u0000的\ u0000的\ u0000的   *在http://127.0.0.1:5005/上运行(按CTRL + C退出)q X \ a \ u0000 \ u0000 \ u0000levelnoq!K \ u0014u。

如何解决此问题?

1 个答案:

答案 0 :(得分:0)

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

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)