所以在我们的机器上,我们注意到了一些奇怪的事情。我们的服务日志正常,但这些消息似乎被分组到特定大小的包中。例如,我们的服务的一条命令在日志中只生成一行。另一个命令会生成大约5行代码。
使用journalctl -u服务-f时,只有在有足够多的行时才会显示单行,而在调用该命令时,始终会显示5行的消息。考虑这个例子:
我调用了4次short命令,并且没有任何内容出现在journalctl中。然后,我调用较长的命令,短命令的所有4个条目以及新的较长命令立即出现。然而,它们基本上都有完全相同的时间戳(考虑到写入速度),即使我发送调用它们的时间间隔是几秒!
[712708.862606] <hostname> <custom_service>[1020]: keys finished
[712708.902052] <hostname> <custom_service>[1020]: keys finished
[712708.902409] <hostname> <custom_service>[1020]: keys finished
[712708.902717] <hostname> <custom_service>[1020]: keys finished
[712708.903025] <hostname> <custom_service>[1020]: ERROR:JSONRPCTCP:Error calling handler db.keys
[712708.903377] <hostname> <custom_service>[1020]: ERROR:JSONRPCTCP:Request: {"jsonrpc": "2.0", "method": "db.keys", "id": "9fc6e420-4d6a-4654-a439-5c89fb4839a4"}
[712708.903730] <hostname> <custom_service>[1020]: ERROR:JSONRPCTCP:Traceback (most recent call last):
[712708.904100] <hostname> <custom_service>[1020]: File "/opt/<product>/lib/python2.7/site-packages/<service>/server.py", line 321, in parse_call
[712708.904417] <hostname> <custom_service>[1020]: response = handler(*params, **kwargs)
[712708.904729] <hostname> <custom_service>[1020]: TypeError: keys() takes at least 2 arguments (1 given)这对于调试来说很棘手,因为您不能真正依赖于消息在实际发生时显示出来。这里我漏掉了什么?有没有办法强制这些日志消息在它们实际发生时出现在journalctl _ log中?
发布于 2018-06-20 21:28:34
它最终成为了真正的python服务。Python通常以缓冲模式运行,该模式将日志消息分批发送到日志。使用-u,您可以将python设置为无缓冲,这在很大程度上解决了这个问题。
https://stackoverflow.com/questions/50948223
复制相似问题