【问题标题】:Connecting to gremlin server from python API duplicates log messages从 python API 连接到 gremlin 服务器会重复日志消息
【发布时间】:2019-04-18 14:12:21
【问题描述】:

连接到 Gremlin 服务器后,我的所有日​​志消息都重复了。我正在使用以下代码进行连接。

graph = anonymous_traversal.traversal().withRemote(DriverRemoteConnection("ws://localhost:8182/gremlin", "g"))

我猜 gremlin-python API 以某种方式启用了根记录器,但我找不到它在哪里。也许我忽略了一些设置。非常欢迎任何解决此问题的建议。

这是我用来复制此问题的完整示例代码。

import logging

from gremlin_python.driver.driver_remote_connection import DriverRemoteConnection
from gremlin_python.process import anonymous_traversal

我曾经将此作为脚本的主要入口点进行测试。

if __name__ == '__main__':

设置我的本地记录器实例

    logger = logging.getLogger(__name__)
    logger.setLevel(logging.getLevelName('DEBUG'))

    log_format = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')

    log_file_handler = logging.FileHandler('foo.log', mode='w')
    log_file_handler.setFormatter(log_format)
    log_file_handler.setLevel(logging.DEBUG)
    logger.addHandler(log_file_handler)

    console_log_handler = logging.StreamHandler()
    console_log_handler.setLevel(logging.getLevelName('INFO'))
    console_log_handler.setFormatter(log_format)
    logger.addHandler(console_log_handler)

并在连接建立之前发送一些消息进行日志记录。

    logger.debug("foo")
    logger.info("foo")
    logger.warning("and")
    logger.error("foo again")

注释/取消注释以下行以在没有 gremlin 连接的情况下进行测试

    graph = anonymous_traversal.traversal().withRemote(DriverRemoteConnection("ws://localhost:8182/gremlin", "g"))

最后,在连接后发送更多消息。

    logger.debug("after foo")
    logger.info("after foo")
    logger.warning("after and")
    logger.error("after foo again")

结果是这样的。

2019-04-18 16:09:57,746 - INFO - foo
2019-04-18 16:09:57,746 - WARNING - and
2019-04-18 16:09:57,746 - ERROR - foo again
DEBUG:__main__:after foo
2019-04-18 16:09:59,107 - INFO - after foo
INFO:__main__:after foo
2019-04-18 16:09:59,107 - WARNING - after and
WARNING:__main__:after and
2019-04-18 16:09:59,108 - ERROR - after foo again
ERROR:__main__:after foo again

我认为 gremlin 应该使用自己的记录器,并且不应该对其他记录器实例的工作造成任何副作用。

【问题讨论】:

    标签: python-3.x logging gremlin tinkerpop3


    【解决方案1】:

    我找到了一个非常简单的解决方法。不好看。

    def non_root_logger():
        for handler in logging.root.handlers:
            logging.root.removeHandler(handler)
        return logging.getLogger(__name__)
    

    【讨论】:

      猜你喜欢
      • 2021-03-30
      • 2012-07-29
      • 1970-01-01
      • 1970-01-01
      • 2018-02-13
      • 2022-06-30
      • 2016-10-05
      • 1970-01-01
      • 2013-06-28
      相关资源
      最近更新 更多