Python内置模块logging用法实例分析


Posted in Python onFebruary 12, 2018

本文实例讲述了Python内置模块logging用法。分享给大家供大家参考,具体如下:

1、将日志直接输出到屏幕

import logging
logging.debug('This is debug message')
logging.info('This is info message')
logging.warning('This is warning message')
# 默认情况下,logging将日志打印到屏幕,日志级别为WARNING;
#output====================================
# WARNING:root:This is warning message

2.通过logging.basicConfig函数对日志的输出格式及方式做相关配置

import logging
logging.basicConfig(level=logging.DEBUG,
        format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
        datefmt='%a, %d %b %Y %H:%M:%S',
        filename='myapp.log',
        filemode='w')
logging.debug('This is debug message')
logging.info('This is info message')
logging.warning('This is warning message')
#./myapp.log文件中内容为:
#Sun, 24 May 2009 21:48:54 demo2.py[line:11] DEBUG This is debug message
#Sun, 24 May 2009 21:48:54 demo2.py[line:12] INFO This is info message
#Sun, 24 May 2009 21:48:54 demo2.py[line:13] WARNING This is warning message

logging.basicConfig参数:

#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被忽略

3、将日志同时输出到多个Handler

先定义一个住handler,并使用addHander()添加到主handler,实现日志输出到多个handler.

a、同时输出到文件和屏幕

import logging
#设置一个basicConfig只能输出到一个Handler
logging.basicConfig(level=logging.DEBUG,
        format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
        datefmt='%a, %d %b %Y %H:%M:%S',
        filename='myapp.log',
        filemode='w')
#定义一个StreamHandler,将INFO级别或更高的日志信息打印到标准错误,并将其添加到当前的日志处理对象#
console = logging.StreamHandler()
console.setLevel(logging.INFO)
formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s')
console.setFormatter(formatter)
logging.getLogger('').addHandler(console)
#输出到文件的log级别为debug,输出到stream的log级别为info
logging.debug('This is debug message')
logging.info('This is info message')
logging.warning('This is warning message')

b、添加一个handler:输出到文件,并根据文件大小滚动存储

在a的基础上添加一个handler

from logging.handlers import RotatingFileHandler
#定义一个RotatingFileHandler,最多备份5个日志文件,每个日志文件最大10M
Rthandler = RotatingFileHandler('myapp.log', maxBytes=10*1024*1024,backupCount=5)
Rthandler.setLevel(logging.INFO)
formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s')
Rthandler.setFormatter(formatter)
logging.getLogger('').addHandler(Rthandler)

logging几种Handler类型:

logging.StreamHandler(默认):     日志输出到流,可以是sys.stderr、sys.stdout或者文件
logging.FileHandler:             日志输出到文件
logging.handlers.RotatingFileHandler    日志输出到文件,基于文件大小滚动存储日志
logging.handlers.TimedRotatingFileHandler    日志输出到文件,基于时间周期滚动存储日志
logging.handlers.SocketHandler:     远程输出日志到TCP/IP sockets
logging.handlers.DatagramHandler:      远程输出日志到UDP sockets
logging.handlers.SMTPHandler:          远程输出日志到邮件地址
logging.handlers.SysLogHandler:     日志输出到syslog
logging.handlers.NTEventLogHandler: 远程输出日志到Windows NT/2000/XP的事件日志
logging.handlers.MemoryHandler:     日志输出到内存中的制定buffer
logging.handlers.HTTPHandler:         通过"GET"或"POST"远程输出到HTTP服务器

4、通过配置文件配置logger

a、定义配置文件logger.conf

#logger.conf
###############################################
[loggers]
keys=root,example01,example02
[logger_root]
level=DEBUG
handlers=hand01,hand02
[logger_example01]
handlers=hand01,hand02
qualname=example01
propagate=0
[logger_example02]
handlers=hand01,hand03
qualname=example02
propagate=0
###############################################
[handlers]
keys=hand01,hand02,hand03
[handler_hand01]
class=StreamHandler
level=INFO
formatter=form02
args=(sys.stderr,)
[handler_hand02]
class=FileHandler
level=DEBUG
formatter=form01
args=('myapp.log', 'a')
[handler_hand03]
class=handlers.RotatingFileHandler
level=INFO
formatter=form02
args=('myapp.log', 'a', 10*1024*1024, 5)
###############################################
[formatters]
keys=form01,form02
[formatter_form01]
format=%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s
datefmt=%a, %d %b %Y %H:%M:%S
[formatter_form02]
format=%(name)-12s: %(levelname)-8s %(message)s
datefmt=

b、logging.config获取配置

import logging
import logging.config
logging.config.fileConfig("logger.conf")
logger = logging.getLogger("example01")
logger.debug('This is debug message')
logger.info('This is info message')
logger.warning('This is warning message')
import logging
import logging.config
logging.config.fileConfig("logger.conf")
logger = logging.getLogger("example02")
logger.debug('This is debug message')
logger.info('This is info message')
logger.warning('This is warning message')

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python使用三角迭代计算圆周率PI的方法
Mar 20 Python
解密Python中的描述符(descriptor)
Jun 03 Python
python实现的系统实用log类实例
Jun 30 Python
Python的爬虫框架scrapy用21行代码写一个爬虫
Apr 24 Python
python记录程序运行时间的三种方法
Jul 14 Python
详解Django中间件执行顺序
Jul 16 Python
使用python Telnet远程登录执行程序的方法
Jan 26 Python
Python3.5迭代器与生成器用法实例分析
Apr 30 Python
python爬取Ajax动态加载网页过程解析
Sep 05 Python
K最近邻算法(KNN)---sklearn+python实现方式
Feb 24 Python
使用Python文件读写,自定义分隔符(custom delimiter)
Jul 05 Python
Python日志打印里logging.getLogger源码分析详解
Jan 17 Python
Request的中断和ErrorHandler实例解析
Feb 12 #Python
Python实现Kmeans聚类算法
Jun 10 #Python
Python request设置HTTPS代理代码解析
Feb 12 #Python
python实现聚类算法原理
Feb 12 #Python
python web.py开发httpserver解决跨域问题实例解析
Feb 12 #Python
python生成tensorflow输入输出的图像格式的方法
Feb 12 #Python
Flask解决跨域的问题示例代码
Feb 12 #Python
You might like
针对初学PHP者的疑难问答(2)
2006/10/09 PHP
深入解析php中的foreach问题
2013/06/30 PHP
实现PHP搜索加分页
2016/10/12 PHP
php 猴子摘桃的算法
2017/06/20 PHP
css图片自适应大小
2007/11/28 Javascript
jquery 3D球状导航的文章分类
2010/07/06 Javascript
JavaScript快速检测浏览器对CSS3特性的支持情况
2012/09/26 Javascript
关于textarea提交的内容无法换行的解决办法
2013/04/09 Javascript
浅谈js的setInterval事件
2014/12/05 Javascript
jQuery超精致图片轮播幻灯片特效代码分享
2015/09/10 Javascript
jQuery实现ctrl+enter(回车)提交表单
2015/10/19 Javascript
javascript中的 object 和 function小结
2016/08/14 Javascript
详解AngularJs ui-router 路由的简单介绍
2017/04/26 Javascript
用最简单的方法判断JavaScript中this的指向(推荐)
2017/09/04 Javascript
怎样使你的 JavaScript 代码简单易读(推荐)
2019/04/16 Javascript
小程序实现图片移动缩放效果
2020/05/26 Javascript
使用Python脚本实现批量网站存活检测遇到问题及解决方法
2016/10/11 Python
python 3.5下xadmin的使用及修复源码bug
2017/05/10 Python
PyQt5每天必学之创建窗口居中效果
2018/04/19 Python
Python根据欧拉角求旋转矩阵的实例
2019/01/28 Python
Python向excel中写入数据的方法
2019/05/05 Python
Python 使用folium绘制leaflet地图的实现方法
2019/07/05 Python
python对绑定事件的鼠标、按键的判断实例
2019/07/17 Python
Python使用import导入本地脚本及导入模块的技巧总结
2019/08/07 Python
python调用HEG工具批量处理MODIS数据的方法及注意事项
2020/02/18 Python
Timberland法国官网:购买靴子、鞋子、衣服、夹克和配饰
2019/11/30 全球购物
Booking.com德国:预订最好的酒店和住宿
2020/02/16 全球购物
英国最大的在线照明商店:Litecraft
2020/08/31 全球购物
我的applet原先好好的, 一放到web server就会有问题,为什么?
2016/05/10 面试题
如何唤起类中的一个方法
2013/11/29 面试题
shell变量的作用空间是什么
2013/08/17 面试题
2015年度培训工作总结范文
2015/04/02 职场文书
小组组名及励志口号
2015/12/24 职场文书
机关干部作风整顿心得体会
2016/01/22 职场文书
导游词之张家界
2019/10/31 职场文书
python爬取网页版QQ空间,生成各类图表
2021/06/02 Python