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

 

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


作者:liuyuan_jq

2011-03-30

 

 

创建日志对象

 

 

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

设置日志级别

 

 

# 设置日志级别,小于指定级别的信息被忽略,缺省: logging.WARNINGroot_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 levelslog = 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 loggingimport logging.handlersimport sys# Log verbosely# 创建一个日志对象,可以带一个名字,可以缺省root_logger = logging.getLogger('')# 设置日志级别,小于指定级别的信息被忽略,缺省: logging.WARNINGroot_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 levelslog = 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 loggerdef log_exception(exc_type, exc_value, traceback): logging.getLogger(__name__).error(exc_value)sys.excepthook = log_exception# Send exceptions to the logger automaticallyraise 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################################################################################ 

 

 


 

你可能感兴趣的:(exception,python,File,command,logging,library)