【问题标题】:twisted python logging issue / confusion?扭曲的 python 日志记录问题/混乱?
【发布时间】:2014-12-25 11:31:50
【问题描述】:

我有一个基于 http://twistedmatrix.com/documents/current/_downloads/emailserver.tac 的 SMTP 服务器

这包含“custom_esmtp.py”,其中包含扭曲的 smtp.py 中发现的一些类的重载版本 - 它本身包含在内以允许没有重载版本的类。

默认情况下,上述三个文件中都没有 log.startLogging 行。但是,我确实得到了一些基本的日志输出到标准输出:

> # twistd -ny mailserver.tac
2014-10-29 15:35:53+0000 [-] Log opened.
2014-10-29 15:35:53+0000 [-] twistd 14.0.0 (/usr/bin/python 2.6.6) starting up.
2014-10-29 15:35:53+0000 [-] reactor class: twisted.internet.epollreactor.EPollReactor.
2014-10-29 15:35:53+0000 [-] ConsoleSMTPFactory starting on 25
2014-10-29 15:35:53+0000 [-] Starting factory <__builtin__.ConsoleSMTPFactory instance at 0x31d67a0>
2014-10-29 15:35:55+0000 [mySMTP,0,127.0.0.1] Receiving myESMTP message for delivery: from=user1@nonpurdomain1.mta.test to=['user1@prefix-subject.domain.reg.test']

我认为这是某种标准级别的扭曲日志记录 - 但有待更正。

但是,如果我添加:

> log.startLogging(sys.stdout)

到 emailserver.tac 的主要方法(当然还有所需的导入语句)- 然后我收到大量的日志条目,这些条目似乎只是空日志行的日期/时间戳:

[-] 2014-10-29 15:15:20+0000 [-] 2014-10-29 15:15:20+0000 [-] 2014-10-29 15:15:20+0000 [-] 2014-10-29 15:15:20+0000 [-] 2014-10-29 15:15:20+0000 [-] 2014-10-29 15:15:20+0000 [-] 2014-10-29 15:15:20+0000 [-] 2014-10-29 15:15:20+0000 [-] 2014-10-29 15:15:20+0000 [-] 2014-10-29 15:15:20+0000 

谁能提供原因/发生了什么? [-] 的意义是什么 - 我假设没有连接的客户端......但是当有时,它在哪里变成显示的 3 个值 - 第二个值是什么?

有点迷失在这里,并希望了解此日志记录的工作原理,因此我可以对其进行调整以满足我们的要求。

谢谢!

【问题讨论】:

    标签: python logging twisted


    【解决方案1】:

    你可以试试这样的:

    log.discardLogs()
    log.startLogging(sys.stdout)
    

    首先,twistd runner 在其内部调用 log.startLogging(...)。 第二件事是每次调用 log.startLogging(...) 时,它都会将初始消息写入打开的日志流。

    因为你在调试模式下运行twistd (-n),所以twistd 的调用与你所做的log.startLogging(sys.stdout) 完全相同。因此,当 log.startLogging(...) 被调用两次时,第二次调用会尝试写入同样由第一个记录器写入的初始消息,并且您所看到的效果就会发生。

    但是,您实际上并不需要调用 log.startLogging(...),您应该使用一个 twistd 选项:

    -l, --logfile=   log to a specified file, - for stdout
    --logger=        A fully-qualified name to a log observer factory to use
                       for the initial log observer. Takes precedence over
                       --logfile and --syslog (when available).
    

    当你使用twistd时,你也没有机会从你的日志中删除前三个字符串。

    2014-10-29 15:35:53+0000 [-] Log opened.
    2014-10-29 15:35:53+0000 [-] twistd 14.0.0 (/usr/bin/python 2.6.6) starting up.
    2014-10-29 15:35:53+0000 [-] reactor class: twisted.internet.epollreactor.EPollReactor.
    

    但是工厂输出可以通过设置协议噪声属性来静音:

    ConsoleSMTPFactory.protocol.noisy = False
    

    我希望它对您有所帮助,并让您对扭曲的日志记录有所了解。

    【讨论】:

      猜你喜欢
      • 2011-06-19
      • 1970-01-01
      • 1970-01-01
      • 2011-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-05
      • 1970-01-01
      相关资源
      最近更新 更多