Mar*_*kes 9 logging python-2.7
对于我在Python(2.7)中的第一个日志记录实验,我正在创建一个基本的日志记录模块,它将快速创建一个记录器(因此我不必为每个模块/类配置它).
我想要做的是创建一个记录器,在控制台上显示所有级别INFO和更高级别的消息,并将所有DEBUG级别信息移动到文本文件.
到目前为止,我已经创建了一个记录器,可以打印INFO并打印到控制台,并将每条日志消息打印到文本文件中.但是,我不想在我的文本文件中包含所有INFO和更高版本的消息.
我制作了一个Python小提琴,它可以保存我的代码.
我使用了教程中的以下调试消息:
log.debug('All systems operational')
log.info('Airspeed 300 knots')
log.warn('Low on fuel')
log.error('No fuel. Trying to glide.')
log.critical('Glide attempt failed. About to crash.')
Run Code Online (Sandbox Code Playgroud)
哪个在控制台上产生:
[INFO] root: Airspeed 300 knots
[WARNING] root: Low on fuel
[ERROR] root: No fuel. Trying to glide.
[CRITICAL] root: Glide attempt failed. About to crash.
Run Code Online (Sandbox Code Playgroud)
在我的debug_log.txt文件中:
2013-06-14 14:51:46,963:DEBUG:root:All systems operational
2013-06-14 14:51:46,964:INFO:root:Airspeed 300 knots
2013-06-14 14:51:46,964:WARNING:root:Low on fuel
2013-06-14 14:51:46,964:ERROR:root:No fuel. Trying to glide.
2013-06-14 14:51:46,964:CRITICAL:root:Glide attempt failed. About to crash.
Run Code Online (Sandbox Code Playgroud)
在上面的块中,后四行不应该在文件中.我正在努力做什么,我将如何获得理想的结果?
zmo*_*zmo 11
您必须创建自己的处理程序对象.
从文档中:位于核心日志记录包中的FileHandler类将日志记录输出发送到磁盘文件.它继承了StreamHandler的输出功能.所以这里的想法是扩展FileHandler类,并在emit()方法中过滤掉record不在logging.DEBUG关卡中的所有对象.
我没有测试过这个,但我认为它可以做到这一点:
from logging import FileHandler, DEBUG
log = logging.getLogger('foo')
class DebugFileHandler(FileHandler):
def __init__(self, filename, mode='a', encoding=None, delay=False)
FileHandler.__init__(self, filename, mode, encoding, delay)
def emit(self, record):
if not record.levelno == DEBUG:
return
FileHandler.emit(self, record)
log.addHandler(DebugFileHandler())
Run Code Online (Sandbox Code Playgroud)
当然,您必须将此代码调整为您的代码.而且,说实话,这record.level是一个疯狂的猜测,但我认为这是有道理的:-)而且,我做对了!
在此示例中,处理程序仅适用于foo记录器.您可能希望为主处理程序激活它,或者仅为某些特定处理程序激活它,如您所愿.
| 归档时间: |
|
| 查看次数: |
5928 次 |
| 最近记录: |