PyCon 2011 - Hidden Treasures of the Python Standard Library - logoging日志处理

本作品采用知识共享署名-非商业性使用-相同方式共享 3.0 Unported许可协议进行许可。允许非商业转载,但应注明作者及出处。


作者:liuyuan_jq

2011-03-30


创建日志对象


# 创建一个日志对象,可以带一个名字,可以缺省 root_logger = logging.getLogger('')

设置日志级别


# 设置日志级别,小于指定级别的信息被忽略,缺省: logging.WARNING root_logger.setLevel(logging.DEBUG)

创建控制台日志处理器


# 创建一个Handler日志处理器 console = logging.StreamHandler(sys.stderr) console_format = '%(message)s' # 创建一个日志格式器,规范日志的输出格式,缺省为:%(messages)s # 将格式器绑定到处理器上 console.setFormatter(logging.Formatter(console_format)) # 设置控制台显示级别 console.setLevel(logging.INFO) # TODO: command line switch # 将处理器绑定到日志对象上 root_logger.addHandler(console)

创建文件日志处理器


# RotatingFileHandler 发送信息到磁盘文件,并且限制最大的日志文件大小,并适时轮徇 file_handler = logging.handlers.RotatingFileHandler( 'logging_example.log', # use a full path ) file_format = '%(asctime)s %(levelname)6s %(name)s %(message)s' file_handler.setFormatter(logging.Formatter(file_format)) file_handler.setLevel(logging.DEBUG) root_logger.addHandler(file_handler)

发送日志


################################################################################ # 返回一个logger,可以指定名字,如果没有指定名字则返回根logger。 # 指定的名字典型的为以点分隔的分层次的名字。 # 选择一个恰当的名字,让别人知道,谁在输出日志。 # 所有使用相同名字调用这个函数都会返回相同的logger实例。 #这意味着logger实例不需要在应用中到处传递。 ################################################################################ # Log sample messages with different levels log = logging.getLogger(__name__) log.info('on the console and in the file') log.debug('only in the file') log.error('simple error message')

运行结果


################################################################################ # 结果 # logging_example.log # 2011-03-30 10:17:40,104 INFO __main__ on the console and in the file # 2011-03-30 10:17:40,105 DEBUG __main__ only in the file # 2011-03-30 10:17:40,105 ERROR __main__ simple error message # 2011-03-30 10:17:40,106 ERROR __main__ failure message # console # on the console and in the file # simple error message # failure message ################################################################################

完整代码


#!/usr/bin/env python # encoding: utf-8 """Sending log output to a file and the console at the same time. """ import logging import logging.handlers import sys # Log verbosely # 创建一个日志对象,可以带一个名字,可以缺省 root_logger = logging.getLogger('') # 设置日志级别,小于指定级别的信息被忽略,缺省: logging.WARNING root_logger.setLevel(logging.DEBUG) ################################################################################ # Set up console output to stderr # 创建一个Handler日志处理器 console = logging.StreamHandler(sys.stderr) console_format = '%(message)s' # 创建一个日志格式器,规范日志的输出格式,缺省为:%(messages)s # 将格式器绑定到处理器上 console.setFormatter(logging.Formatter(console_format)) # 设置控制台显示级别 console.setLevel(logging.INFO) # TODO: command line switch # 将处理器绑定到日志对象上 root_logger.addHandler(console) ################################################################################ # Include debug messages when logging to a file # RotatingFileHandler 发送信息到磁盘文件,并且限制最大的日志文件大小,并适时轮徇 file_handler = logging.handlers.RotatingFileHandler( 'logging_example.log', # use a full path ) file_format = '%(asctime)s %(levelname)6s %(name)s %(message)s' file_handler.setFormatter(logging.Formatter(file_format)) file_handler.setLevel(logging.DEBUG) root_logger.addHandler(file_handler) ################################################################################ # 返回一个logger,可以指定名字,如果没有指定名字则返回根logger。 # 指定的名字典型的为以点分隔的分层次的名字。 # 选择一个恰当的名字,让别人知道,谁在输出日志。 # 所有使用相同名字调用这个函数都会返回相同的logger实例。 #这意味着logger实例不需要在应用中到处传递。 ################################################################################ # Log sample messages with different levels log = logging.getLogger(__name__) log.info('on the console and in the file') log.debug('only in the file') log.error('simple error message') # Replace excepthook with logger def log_exception(exc_type, exc_value, traceback): logging.getLogger(__name__).error(exc_value) sys.excepthook = log_exception # Send exceptions to the logger automatically raise RuntimeError('failure message') ################################################################################ # 结果 # logging_example.log # 2011-03-30 10:17:40,104 INFO __main__ on the console and in the file # 2011-03-30 10:17:40,105 DEBUG __main__ only in the file # 2011-03-30 10:17:40,105 ERROR __main__ simple error message # 2011-03-30 10:17:40,106 ERROR __main__ failure message # console # on the console and in the file # simple error message # failure message ################################################################################


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值