扭曲日志

8 投票
2 回答
2491 浏览
提问于 2025-04-16 02:50

我在我的twisted反应器下运行着三个进程:Orbited、WSGI(运行django)和Twisted本身。

我现在使用的是

log.startLogging(sys.stdout)

当所有的日志都指向同一个地方时,信息就会太多,显得很拥挤。

我从WSGI得到的一行日志是这样的:

2010-08-16 02:21:12-0500 [-] 127.0.0.1 - - [16/Aug/2010:07:21:11 +0000] "GET /statics/js/monitor_rooms.js HTTP/1.1" 304 - "http://localhost:11111/chat/monitor_rooms" "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.8) Gecko/20100723 Ubuntu/10.04 (lucid) Firefox/3.6.8"

时间基本上重复了两次。我觉得我应该使用自己的格式化工具,但不幸的是,我在twisted的文档中找不到相关信息(那里没有关于日志记录的内容)。

  1. 处理来自三个来源的日志,最好的方法是什么?
  2. 我应该传递什么参数给twisted.log中的哪个函数,以设置我自己的格式化工具(startLogging没有答案)?
  3. 有没有比我建议的更好的解决方案?(我在设置日志记录器方面经验不多。)

2 个回答

1

嘿,我正好在考虑这个问题。我想到的解决办法是做一个独立的Twisted应用程序,它可以记录通过套接字接收到的消息。你可以把Python的日志设置成发送到一个套接字,同时也可以把Twisted的日志设置成发送到Python的日志。这样一来,所有的日志消息就可以发送到一个单独的进程里(然后这个进程再用Python的日志把它们记录到磁盘上)。

我有一些初步的概念代码,可以在这个链接找到:http://www.acooke.org/cute/APythonLog0.html

现在缺少的主要是能标明每条消息来自哪个来源。如果要加这个功能,我还不太确定最佳的方法(一个办法是让服务在三个不同的端口上运行,每个端口用不同的前缀)。

顺便问一下,Orbited的情况怎么样?这是我接下来要关注的事情……

11

你可以使用 system 这个参数来定制 twisted.python.log.msg 的日志信息。

假设你已经有了:

log.msg("Service ready for eBusiness!", system="enterprise")

那么你会看到类似这样的日志输出:

2010-08-16 02:21:12-0500 [enterprise] Service ready for eBusiness!

接着,你可以让每个服务在它们的 log.msglog.err 调用中添加 system="wsgi/orbited/..."

我在上次使用 Twisted 时,翻找源码时发现了 这个链接

撰写回答