Python logging模块

logger是一个树结构,默认有个根root,其他logger都是其上的枝桠
一、简单使用

import logging
logging.debug('debug message')
logging.info('info message')
logging.warning('warn message')
logging.error('error message')
logging.critical('critical message')

屏幕上打印:
WARNING:root:warn message
ERROR:root:error message
CRITICAL:root:critical message

默认情况下,logging模块将日志打印到了标准输出中,且只显示了大于等于WARNING级别的日志,这说明默认的日志级别设置为WARNING(日志级别等级CRITICAL > ERROR > WARNING > INFO > DEBUG > NOTSET),默认的日志格式为日志级别:Logger名称:用户输出消息。
二、通过logging.basicConfig函数对日志的输出格式及方式做相关配置

import logging
logging.basicConfig(level=logging.INFO,
                    format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
                    datefmt='%a, %d %b %Y %H:%M:%S',
                    filename='D:/test.log',
                    filemode='w')
logging.debug('debug message')
logging.info('info message')
logging.warning('warning message')
logging.error('error message')
logging.critical('critical message')

查看D:/test.log的内容为:
Mon, 18 Dec 2017 18:51:18 test.py[line:8] INFO info message
Mon, 18 Dec 2017 18:51:18 test.py[line:9] WARNING warning message
Mon, 18 Dec 2017 18:51:18 test.py[line:10] ERROR error message
Mon, 18 Dec 2017 18:51:18 test.py[line:11] CRITICAL critical message

logging.basicConfig函数各参数:
filename: 指定日志文件名
filemode: 和file函数意义相同,指定日志文件的打开模式,’w’或’a’
format: 指定输出的格式和内容,format可以输出很多有用信息,如上例所示:
%(levelno)s: 打印日志级别的数值
%(levelname)s: 打印日志级别名称
%(pathname)s: 打印当前执行程序的路径,其实就是sys.argv[0]
%(filename)s: 打印当前执行程序名
%(funcName)s: 打印日志的当前函数
%(lineno)d: 打印日志的当前行号
%(asctime)s: 打印日志的时间
%(thread)d: 打印线程ID
%(threadName)s: 打印线程名称
%(process)d: 打印进程ID
%(message)s: 打印日志信息
datefmt: 指定时间格式,同time.strftime()
level: 设置日志级别,默认为logging.WARNING
stream: 指定将日志的输出流,可以指定输出到sys.stderr,sys.stdout或者文件,默认输出到sys.stderr,当stream和filename同时指定时,stream被忽略

三、handler 将日志同时输出到指定位置
1、将日志输出到屏幕

import logging
logger = logging.getLogger('test')
logger.addHandler(logging.StreamHandler())  # 添加StreamHandler
logger.setLevel(logging.INFO)  # 输出所有大于INFO级别的log
logger.info('info message message.')
logger.debug('debug message.')  # 不输出

屏幕上打印:
info message message.

2、将日志输出到文件

import logging
logger = logging.getLogger('test')
logger.addHandler(logging.StreamHandler())
logger.addHandler(logging.FileHandler('D:/test1.log'))  # 再添一个FileHandler
logger.setLevel(logging.INFO)  # 输出所有大于INFO级别的log
logger.info('info  message.')
logger.debug('debug message.')  # 不输出

把日志同时输出到屏幕和日志文件中:
info  message.

3、设定日志输出级别

import logging
logger = logging.getLogger('test')
logger.setLevel(logging.INFO)  # 输出所有大于INFO级别的log
fmt = logging.Formatter('%(name)s - %(levelname)s - %(asctime)s - %(message)s')
# 添加StreamHandler,并设置级别为WARNING
stream_hdl = logging.StreamHandler()
stream_hdl.setLevel(logging.WARNING)
stream_hdl.setFormatter(fmt)
logger.addHandler(stream_hdl)
# 添加FileHandler,并设置级别为DEBUG
file_hdl = logging.FileHandler('D:/test2.log')
file_hdl.setLevel(logging.DEBUG)
file_hdl.setFormatter(fmt)
logger.addHandler(file_hdl)

logger.info('info  message.')
logger.debug('debug message.')

屏幕不输出日志
日志文件test2输出日志:
test - INFO - 2017-12-18 19:30:17,813 - info  message.

StreamHandler级别(WARNING)>log级别(info),在屏幕只输出>=WARNING日志
FileHandler级别(DEBUG)< log级别(info),在日志文件只输出>=INFO的日志

四、日志备份

import logging
from logging.handlers import RotatingFileHandler
logger = logging.getLogger('test')
logger.setLevel(logging.INFO)  # 输出所有大于INFO级别的log
fmt = logging.Formatter('%(name)s - %(levelname)s - %(asctime)s - %(message)s')
file_hdl = RotatingFileHandler('D:/test3.log', maxBytes=10*1024*1024,backupCount=5) #最多备份5个日志文件,每个日志文件最大10M
file_hdl.setLevel(logging.DEBUG)
file_hdl.setFormatter(fmt)
logger.addHandler(file_hdl)

logger.info('info  message.')
logger.debug('debug message.')

五、通过logging.config模块配置日志
logging.config配置文件如下:

[loggers]  
keys=root,simpleExample  

[handlers]  
keys=consoleHandler  

[formatters]  
keys=simpleFormatter  

[logger_root]  
level=DEBUG  
handlers=consoleHandler  

[logger_simpleExample]  
level=DEBUG  
handlers=consoleHandler  
qualname=simpleExample  
propagate=0  

[handler_consoleHandler]  
class=StreamHandler  
level=DEBUG  
formatter=simpleFormatter  
args=(sys.stdout,)  

[formatter_simpleFormatter]  
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s  
datefmt=  

程序读取配置文件:

import logging
import logging.config

logging.config.fileConfig("D:/logging.conf")  # 采用配置文件

# create logger
logger = logging.getLogger("simpleExample")

# "application" code
logger.debug("debug message")
logger.info("info message")
logger.warning("warn message")
logger.error("error message")
logger.critical("critical message")

在屏幕输出:
2017-12-18 19:52:44,533 - simpleExample - DEBUG - debug message
2017-12-18 19:52:44,534 - simpleExample - INFO - info message
2017-12-18 19:52:44,534 - simpleExample - WARNING - warn message
2017-12-18 19:52:44,534 - simpleExample - ERROR - error message
2017-12-18 19:52:44,534 - simpleExample - CRITICAL - critical message
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值