Python-Logstash 在 Pyramid 应用程序中发送过多条目

标签 python pyramid

使用Logstash记录日志并记录用户何时执行某些操作。不幸的是,它似乎为每个“操作”或错误发送多个条目,而不是每个操作或错误发送一个条目。例如,如果用户提交表单,我会将其设置为记录他们已提交的信息。有时它会为此记录 1 个日志条目,有时会记录 5 个、3 个或 2 个。这是非常不一致的。登录到同一服务器的其他工具和应用程序不会执行此操作。这是我设置logstash的地方:

class LogStashExp(object):
    @staticmethod
    def log(exc, request, servfrom, erlevel, email):
        if str(request.url).startswith('http://localhost'):
            host = 'localhost'
        else:
             host = '*******'
        prlogger = logging.getLogger(str(servfrom))
        prlogger.setLevel(logging.INFO)
        prlogger.addHandler(logstash.LogstashHandler(host, 6123, version=1))
        extra = {
            'email': email
        }
        if erlevel == "warn":
            prlogger.warning(exc, extra=extra)
        elif erlevel == "error":
            prlogger.error(exc, extra=extra)
        elif erlevel == "info":
            prlogger.info(exc, extra=extra)
        else:
            prlogger.error(exc)

我在想要记录某些内容的地方使用它。

LogStashExp.log("message", request, servfrom='application', erlevel='info', email=email)

想法?

最佳答案

Python logging 具有全局状态。

    prlogger = logging.getLogger(str(servfrom))
    prlogger.setLevel(logging.INFO)
    prlogger.addHandler(logstash.LogstashHandler(host, 6123, version=1))

第一次执行此代码时,它会创建一个记录器。第二次执行此代码时,它会返回相同的记录器。每次执行代码时,都会将新的日志记录处理程序添加到现有记录器中。

我认为如果您想动态创建记录器,您应该在继续添加新处理程序之前检查它是否有任何处理程序。

关于Python-Logstash 在 Pyramid 应用程序中发送过多条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29853342/

相关文章:

python - 发布数据以使用ajax查看

python - Pyramid 本地化: not created . pot文件

python - 如何在 PasteDeploy ini 文件中包含第三方记录器格式化程序?

python - 如何将列表列表中的值分配给键以在python中创建字典

python - 从 Python 获取对外部服务的 API 调用的详细信息

python - 曲线拟合为指数

python - 使用来自 CSV 的输入从 Python 运行动态查询

pythonic 模块组织 - 如何引用根目录中的文件?

python - Pyramid 授权被绕过

python - 如何使用 SQLAlchemy 在模型中进行表单验证?