【问题标题】:Twisted: disable logging of Twisted-framework classesTwisted:禁用 Twisted 框架类的日志记录
【发布时间】:2023-03-27 15:03:01
【问题描述】:

我的基于 Twisted 的客户端循环发送 UDP 数据包。 因此,我使用的是 DatagramProtocol 类。 这是来源:

#!/usr/bin/python
# -*- coding: utf-8 -*-
from twisted.application.service import Service
from twisted.internet import reactor
from twisted.internet.task import LoopingCall
from twisted.internet.protocol import DatagramProtocol
from twisted.python import log
import logging

class HeartbeatClient(Service):
    def __init__(self, host, port, data, beat_period):
        self.ip = host
        self.port = int(port)
        self.data = data
        self.beat = int(beat_period)

    def startService(self):
        self._call = LoopingCall(self._heartbeat)
        self._call.start(self.beat)

    def stopService(self):
        self._call.stop()

    def _heartbeat(self):
        protocol = DatagramProtocol()
        protocol.noisy = False
        port = reactor.listenUDP(0, protocol)
        port.write(self.data, (self.ip, self.port))
        port.stopListening()

现在,当我使用 twistd 运行此客户端时,我会从 Twisted 类(即 DatagramProtocol 类)永久获取日志消息:

2011-09-11 18:39:25+0200 [-] (Port 55681 Closed)
2011-09-11 18:39:30+0200 [-] twisted.internet.protocol.DatagramProtocol starting on 44903
2011-09-11 18:39:30+0200 [-] (Port 44903 Closed)
2011-09-11 18:39:35+0200 [-] twisted.internet.protocol.DatagramProtocol starting on 50044
2011-09-11 18:39:35+0200 [-] (Port 50044 Closed)
2011-09-11 18:39:40+0200 [-] twisted.internet.protocol.DatagramProtocol starting on 37450

由于这些日志消息正在污染我的“自己的”日志,我想知道是否可以禁用这些日志消息。 如您所见,我已经通过调用protocol.noisy = False 减少了日志数量,但我仍然收到其他日志消息。此外,g = protocol.ClientFactory().noisy = False 命令也无济于事。

是否可以以通用方式禁用所有 Twisted 内部类的日志记录 - 对于所有模块?也许通过使用一些 Twisted-logging 配置?

【问题讨论】:

标签: python logging twisted twistd


【解决方案1】:

Twisted 的日志记录非常幼稚。但是,没有理由必须这样做,因为twisted.python.log 功能非常丰富,并且能够提供您(和其他人)感兴趣的选择性报告。

日志事件只是任意键和值的字典。默认观察者知道带有'message' 键的字典。或许正因为如此,Twisted 本身发出的大多数日志消息除了提供与此键相关联的人类可读字符串外,不会尝试做任何事情(此外,许多发出的消息是在 current之前添加的> 扭曲的日志系统,作为消费者的旧的、更原始的系统也是如此)。

不久前,这个问题困扰着有人被提示提交a ticket 并开始着手解决the UDP part of the problem 的问题。问题已基本解决,但仍有一些工作要做。

尝试的解决方案是记录传达相同信息的结构化消息,但没有消息,因此默认观察者不会记录。这避免了默认情况下出现在日志中的消息,但允许对这些事件特别感兴趣的观察者观察它们并根据需要处理它们。

这张票已经有一段时间没有动过了。有人可能很容易拿起补丁并在完成的最后一步完成。

【讨论】:

    猜你喜欢
    • 2011-01-30
    • 2018-08-03
    • 1970-01-01
    • 1970-01-01
    • 2020-05-24
    • 2019-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多