调用thrift出现No handlers could be found for logger "thrift.transport.TSocket"
1.问题
使用thrift版本为0.10,在0.8没有这个问题
其中ncTAgent是代码中封装的thrift接口的结构,在thrift服务端没有启动的时候,应该拋错为连接不到。但是拋错的堆栈输出之前,还有一句日志异常错误。这是不期望出现的
>>> from thrift.transport.TSocket import TSocket
>>> from thrift.transport.TTransport import TBufferedTransport
>>> from thrift.protocol.TBinaryProtocol import TBinaryProtocol
>>> from Agent import ncTAgent
>>> socket = TSocket('127.0.0.1', 9202)
>>> transport = TBufferedTransport(socket)
>>> protocol = TBinaryProtocol(transport)
>>> client = ncTAgent.Client(protocol)
>>> conn = transport.open()
No handlers could be found for logger "thrift.transport.TSocket"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib64/python2.7/site-packages/thrift/transport/TTransport.py", line 152, in open
return self.__trans.open()
File "/usr/lib64/python2.7/site-packages/thrift/transport/TSocket.py", line 113, in open
raise TTransportException(TTransportException.NOT_OPEN, msg)
thrift.transport.TTransport.TTransportException: Could not connect to any of [('127.0.0.1', 9999)]
2.原因
拋错信息有thrift.transport.TSocket,所以查看源码中对应位置,有以下代码
import logging
...
logger = logging.getLogger(__name__)
class TSocketBase(TTransportBase):
def _resolveAddr(self):
...
def close(self):
...
class TSocket(TSocketBase):
"""Socket implementation of TTransport base."""
...
def open(self):
if self.handle:
raise TTransportException(TTransportException.ALREADY_OPEN)
try:
addrs = self._resolveAddr()
except socket.gaierror:
msg = 'failed to resolve sockaddr for ' + str(self._address)
logger.exception(msg)
raise TTransportException(TTransportException.NOT_OPEN, msg)
在上述代码中,倒数第二行中使用logger输出了一个异常信息。定位到问题在此处
继续验证logger,使用thrift源码中打印日志的方式,直接打印一个异常信息字符串
>>> import logging
>>> logger = logging.getLogger(__name__)
>>> logger.exception('test')
No handlers could be found for logger "__main__"
可以看到直接使用logger会出现没有handler错误,其中__main__是logging绑定的模块
所以问题原因为thrift中打印日志没有绑定handler
3.解决
python官方logging.handler文档https://docs.python.org/2/library/logging.handlers.html#module-logging.handlers
python中使用logging打印日志需要绑定handler用于向不同的输出端打log。在thrifit中没有绑定handler故出现了No handler问题。
从源码中解决这个问题,需要在初始化logging之后绑定一个handler
...
# 源码中初始化logger
logger = logging.getLogger(__name__)
# 绑定一个空handler
logger.addHandler(logging.NullHandler())
...
调用thrift出现No handlers could be found for logger "thrift.transport.TSocket"的更多相关文章
- apscheduler 执行报错No handlers could be found for logger "apscheduler.executors.default
执行报错如下: No handlers could be found for logger "apscheduler.executors.default 解决: 加入日志,查看具体报错,载根 ...
- 造成thrift 编译构建项目失败的原因之一:thrift环境变量没设置
由于重装了系统和IDEA工具,打开原项目时使用install 构建使用thrift 协议的项目时失败.下面是说说我遇到的问题 看下图,就是构建时控制台输出的日志,因为是乱码,当时没重视,就先去检查po ...
- No handlers could be found for logger "keystoneauth.identity.generic.base"
一般是因为发现了多个keystone的url造成的.
- No handlers could be found for logger “apscheduler.executors.default”?
Call logging.basicConfig() before instantiating the scheduler. That lets you see what the real probl ...
- zerorpc使用时报错:No handlers could be found for logger "zerorpc.channel"
问题如题:安装方法参考 http://www.cnblogs.com/shengulong/p/7887586.html ,安装完后,使用时出现如题的错误 解决办法: 1.zerorpc本身依赖很多三 ...
- thrift的使用及遇到的问题
centos 系统安装官方文档:http://thrift.apache.org/docs/install/centos 一.按该文档安装出现了一系列的问题,记录如下: 1.安装thrift时./bo ...
- python thrift 实现 单端口多服务的过程
Thrift 是一种接口描述语言和二进制通信协议.以前也没接触过,最近有个项目需要建立自动化测试,这个项目之间的微服务都是通过 Thrift 进行通信的,然后写自动化脚本之前研究了一下. 需要定义一个 ...
- python ssh弱口令爆破多线程脚本及遇到的一些错误与问题
练习写了个SSH弱口令爆破多线程脚本,遇到的问题 1.一开始想import pexpect 中的pxssh 然而却一直该有错误, ImportError: cannot import name spa ...
- ssh爆破脚本
前些天,基友发我一个ssh爆破工具,看起来很吊的样子.然后我就无聊自己写了个py脚本的. 单线程:慢成狗----- #coding:utf-8 #author:jwong import threadi ...
随机推荐
- Quartz.Net系列(十一):System.Timers.Timer+WindowsService实现定时任务
1.创建WindowsService项目 2.配置项目 3.AddInstaller(添加安装程序) 4.修改ServiceName(服务名称).StartType(启动类型).Description ...
- 记一次开发CefSharp做浏览器时Shopify绑定不上Paypal问题
问题:CefSharp做浏览器时Shopify绑定不上Paypal. shopify绑定Paypal的流程大概是如下图所示 步骤1 步骤2 步骤3 步骤4 出现问题大概是在绑定最后一步,并没有如愿的返 ...
- 牛客网Java工程师能力评估
感觉很奇怪,出的题做完之后感觉自己没学过Java一样,不过凭借一些做题的技巧和一些记忆,正确率百分之50,排名前百分之30多,记录一下这次的题目,方便我以后进行二次复习吧 1.下面有关JVM内存,说法 ...
- 随笔java面试基础
转:http://blog.csdn.net/wenwen360360/article/details/54969418 Application ―Java应用程序”是可以独立运行的Java程序.由J ...
- Mobilenet V1
目录 1. Depth Separable Convolution 2. 网络结构 3. 宽度因子和分辨率因子 4. 代码实现 参考博客: https://cuijiahua.com/blog/201 ...
- 利用CloudFlare自动DDNS
注意要 仅限 DNS 获取咱的Key https://dash.cloudflare.com/profile 先在控制面板找到咱的目前IP,然后到Cloudflare中新建一个A记录,如:ddns.y ...
- matplotlib常见图表绘制——极坐标图-雷达图、极轴图
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:斑点鱼 极坐标轴 调用subplot()创建子图时通过设置proje ...
- MySQL数据库---表的操作
存储引擎 表就是文件,表的存储引擎就是文件的存储格式,即数据的组织存储方式. 字段类型 1.整数类型 整数类型:TINYINT SMALLINT MEDIUMINT INT BIGINT 作用:存储年 ...
- 汇总我在IDEA中使用Maven导包遇到的问题
看吐了吗?我是真吐了 真正遇到这些问题的朋友看到这,是不是有种找到知音的感觉,别怕,你不是在一个人战斗,苦逼的日子里,还有个我陪你一起苦逼,吐了吐了,这问题不知道耗费了我多久的时间,百度好多也解决不了 ...
- 16 . Go之网络编程
互联网的本质 两台计算机之间的通信与两个人打电话原理是一样的. # 1. 首先要通过各种物理连接介质连接 # 2. 找准确对方计算机(准确到软件)的位置 # 3. 通过统一的标准(一般子协议)进行数据 ...