Chinaunix首页 | 论坛 | 博客
  • 博客访问: 45011
  • 博文数量: 9
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 100
  • 用 户 组: 普通用户
  • 注册时间: 2013-12-12 17:58
个人简介

熬着熬着,让时间熬成想要的那个自己,一个美丽的人。

文章分类

全部博文(9)

文章存档

2016年(1)

2014年(7)

2013年(1)

分类: Python/Ruby

2014-02-12 14:29:47


Twisted有自己的logging系统,我们已经通过twistd看到了底层。这个系统不仅可以跟Twisted特定的概念,比如说Failures融合,也能很好的兼容python的标准库logging库。

基础的内置应用Logging

给你的Twisted的应用增加logging的最简单的方法就是引入import twisted.python.log,开始记录到一个文件或是输出。如果你想要,通过Python标准的logging模块也可以记录特定log级别的事件。比如说,Example 7-1增加了一个logging把我们第2章的echo server记录到一个文件中。

log.startLogging一旦被调用就会开始记录。之后信息被log.msg或者log.err来记录下来。Log.msg是用来记录字符串,log.err是记录异常或错误。默认的logging的格式似乎输出像这个echo server的启动监听一条信息后关闭。

想要输出log,用sys.stdout调用startLogging,如Example 7-2.

除非当你触发log.msg或者log.err记录信息,通常默认的情况是logging库会记录输出,(比如打印出statements),也会跟踪未被抓取的异常,也会监听记录Twisted模块提交的事件。这就是为什么我们在之前的记录里面看到各种EchoFactory事件。

 

Twisted有很多方便的类可供于定制你自己的log文件管理。其中一个类就是twisted.python.logfile.LogFile,可以人工调用或者需要一个特定的记录类型。Example7-3展示了两个特性。

随着log_rotation.py的运行,信息被记录在了/tmp/test.log下。如果log被人工分开或者rotateLegenth到达上限,现存的log数量就会增加(比如/tmp/test.log.1变成/tmp/test.log.2/tmp/test.log变成了/tmp/test.log.1),最后第一个信息会放在数最大的log里面,/tmp/test.log.2,最后一个信息是放到/tmp/test.log里面。

因为按日期来划分log是更为常见的方式,Twisted也提供了DailyLogFile类来按日期的每天自动分成一个log文件。

Twistd Logging

如第6章节我们看到的,Twisted应用可以用twistd命令来运行Twisted的默认logging,输出到twistd.log里,如果daemonized或者没有输出。

Twistd的内置logging可以通过命令行参数来设置:设定一个log文件--logfile(用-stdout),传递--sysloglog来记录到syslog而不是一个log文件中。

更进一步的设置,比如更改log的格式(默认是时间戳,比如2012-08-20 22:08:34-040),我们会需要改写自己的LogObserver

自定义Loggers

举一个例子,假如我们需要一个Logger来记录输出并把错误信息用红色标识如何做呢?Example 7-4演示了如何用子类FileLogObserver来重写emit方法实现。

我们要用我们所定制的logger,唯一的事情就是用log.addObserver注册一个ColorizedLogObserver的实例。

我们也可以用ColorizedLogObserver作为一个定制loggertwistd应用,通过一个log observer工厂(比如就是实例LogObserveremit方法),通过--logger命令参数来传递。例如,为了运行第6章我们的echo_server.tac的彩色logging输出,我们可以用如下命令行:

Twistd -ny echo_server.tac --logger=log_colorizer.logger --logfile=-

末尾的连字号--logfile=-是定义logging输出 -n是表示没有daemonize

Logging的关键点和注意事项

Twistedlogging需要注意以下几点:

l log.startLogginglog记录到文件里,直接保存或者用简单的类比如DailyLogFile

l 事件由log.errlog.msg来记录,默认情况下,log.startlogging会重定向输出stdoutstderrlog

l log.addObserver注册自定义logger

l 当你自己编写自定义log observer时,不要阻塞,不然你整个事件循环就会阻塞。Observer必须在线程安全范围内,如果用于多线程的程序中

l twistd运行的应用程序已经自动能记录logLogging可以通过--logfile--syslog--logger来定制。

阅读(1407) | 评论(0) | 转发(0) |
0

上一篇:第6章 web

下一篇:第8章 Databases

给主人留下些什么吧!~~