logging

日志的主要作用是程序调试、数据分析。 日志有五个级别,代表问题的严重程度

python有个日志相关的logging模块,用法:

输出到屏幕

import logging
logging.warning('Watch out!')  # 输出到屏幕
logging.info('I told you so')  # 不打印

因为logging模块默认的日志级别是warning,所以info级别的日志不会输出到屏幕。也就是说输出的日志级别要高于设置的日志级别才会输出日志

输出到文件

import logging
logging.basicConfig(filename='example.log',level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too'

将在'example.log' 日志文件中看到

DEBUG:root:This message should be go to the log file
INFO:root:So should this
WARNING:root:And this, too

定义日志格式

import logging
logging.warning('%s before you %s', 'Look', 'leap!')

会显示

WARNING:root:Look before you leap!

定义时间

import logging
logging.basicConfig(format='%(asctime)s %(message)s')
logging.warning('is when this event was logged.')

会显示

2010-12-12 11:41:42,612 is when this event was logged.

更多日志格式参考

多个输出目的地 (输出到屏幕和文件)

可以同时输出到文件和屏幕、或输出到多个文件,并且可以设置不同的级别,总之可以弄的很复杂。

一个同时输出日志到文件和控制台的例子

logger = logging.getLogger(__name__)   # 获取logger对象
logger.setLevel(logging.DEBUG)         # 设置全局的日志级别

# 创建基于控制台handler
console = logging.StreamHandler()
console.setLevel(logging.INFO)         # 设置控制台的日志级别

# 创建基于文件handler
fh = logging.FileHandler(log)
fh.setLevel(logging.WARNING)           # 设置日志文件级别

# 定义格式
formatter = logging.Formatter(
    '%(asctime)s  - %(levelname)s - %(lineno)d - %(filename)s - %(message)s')

# 应用格式 console.setFormatter(formatter) fh.setFormatter(formatter)
# 添加到logger logger.addHandler(console) logger.addHandler(fh)

这样日志文件和控制台都有日志:

2017-04-29 22:51:56,235  - ERROR - 30 - database.py - ORA-12170: TNS: 连接超时
2017-04-30 00:10:01,568  - ERROR - 30 - database.py - ORA-12170: TNS:Connect timeout occurred
2017-04-30 00:13:57,726  - ERROR - 30 - database.py - ORA-12170: TNS: 连接超时
2017-04-30 00:15:34,416  - ERROR - 30 - database.py - ORA-12170: TNS:Connect timeout occurred
原文地址:https://www.cnblogs.com/huangweimin/p/6789509.html