Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用日志模块发送日志时遇到问题_Python_Logging - Fatal编程技术网

Python 使用日志模块发送日志时遇到问题

Python 使用日志模块发送日志时遇到问题,python,logging,Python,Logging,我有两个http服务器,它们使用日志模块相互通信 serverA = SocketServer.TCPServer(("", 8888), myHandler) serverB = SocketServer.TCPServer(("", 7777), myHandler) 第一个serverA向serverB发送GET请求: logger = logging.getLogger('cs') logger.setLevel(logging.DEBUG) logger.addHandler(HTT

我有两个http服务器,它们使用日志模块相互通信

serverA = SocketServer.TCPServer(("", 8888), myHandler)
serverB = SocketServer.TCPServer(("", 7777), myHandler)
第一个serverA向serverB发送GET请求:

logger = logging.getLogger('cs')
logger.setLevel(logging.DEBUG)
logger.addHandler(HTTPHandler("localhost:7777", "/"))
logger.warning('log from serverA')  
然后,serverB用POST消息回答:

class myHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        logger = logging.getLogger('mach')
        logger.setLevel(logging.DEBUG)
        logger.addHandler(HTTPHandler("localhost:8888", "/",method='POST'))
        print "1111"
        logger.critical('POST from 7777')
        print "2222"
        return
在调试它时,我看到“1111”被打印出来,但“2222”没有打印出来,而且在serverA的do_POST方法中,第一行是打印命令,没有打印出来。 然而,当我用wireshark检查它时,我看到一个tcp数据包去了8888端口,它是my POST msg


那么,如果我在serverA中看不到它,会发生什么呢?

两台服务器之间出现死锁。以下是场景:

  • 服务器A向服务器B发送GET请求并阻止等待响应,即,在收到响应(或发生错误)之前,以下消息不会返回:

  • 服务器B在
    do_GET()
    中从服务器A接收GET请求,但不发送回复。相反,它将POST请求发送回服务器a,然后服务器B阻止等待服务器a的响应:

    logger.critical('POST from 7777')
    
  • 这两个服务器都是单线程的,并且都在等待另一个服务器的响应时被阻塞,因此出现死锁


您已经编写了关于do\u POST方法的内容,但代码中没有此方法(仅do\u GET)。是的,但serverB的myHandler中有一个do\u POST函数。不管怎样,我试着将一个GET从B发送到a,而不是POST-仍然卡住-在服务器a中看不到第一个打印。。所以,POSTTry通过命令行发送POST请求来测试HTTP服务器是否工作并没有问题:$curl-v-d“Postfrom7777”。您应该在终端中打印服务器打印的消息。
logger.critical('POST from 7777')