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使用xlrd实现检索excel中某列含有指定字符串记录的方法
May 09 Python
python中PIL安装简单教程
Apr 21 Python
详解Python中的文件操作
Aug 28 Python
Python运算符重载详解及实例代码
Mar 07 Python
Python3.6安装及引入Requests库的实现方法
Jan 24 Python
python使用jieba实现中文分词去停用词方法示例
Mar 11 Python
python scp 批量同步文件的实现方法
Jan 03 Python
Python qqbot 实现qq机器人的示例代码
Jul 11 Python
Django 实现将图片转为Base64,然后使用json传输
Mar 27 Python
Python如何绘制日历图和热力图
Aug 07 Python
忆童年!用Python实现愤怒的小鸟游戏
Jun 07 Python
Python使用plt.boxplot()函数绘制箱图、常用方法以及含义详解
Aug 14 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
MySQL相关说明
2007/01/15 PHP
php 搜索框提示(自动完成)实例代码
2012/02/05 PHP
基于wordpress主题制作的具体实现步骤
2013/05/10 PHP
ThinkPHP权限认证Auth实例详解
2014/07/22 PHP
PHP中unset,array_splice删除数组中元素的区别
2014/07/28 PHP
php+mysql实现无限级分类
2015/11/11 PHP
什么是OneThink oneThink后台添加插件步骤
2016/04/13 PHP
根据分辨率不同,调用不同的css文件
2006/07/07 Javascript
Jquery cookie操作代码
2010/03/14 Javascript
Jquery Autocomplete 结合asp.net使用要点
2010/10/29 Javascript
Javascript算符的优先级介绍
2013/03/20 Javascript
js验证IP及子网掩码的合法性有效性示例
2014/04/30 Javascript
AngularJS表单编辑提交功能实例
2015/02/13 Javascript
jQuery获取标签文本内容和html内容的方法
2015/03/27 Javascript
基于jQuery实现的旋转彩圈实例
2015/06/26 Javascript
基于Phantomjs生成PDF的实现方法
2016/11/07 Javascript
HTML5实现微信拍摄上传照片功能
2017/04/21 Javascript
Vue手把手教你撸一个 beforeEnter 钩子函数
2018/04/24 Javascript
基于mpvue的简单弹窗组件mptoast使用详解
2019/08/02 Javascript
IntelliJ IDEA编辑器配置vue高亮显示
2019/09/26 Javascript
JS造成内存泄漏的几种情况实例分析
2020/03/02 Javascript
JavaScript定时器使用方法详解
2020/03/26 Javascript
Vue性能优化的方法
2020/07/30 Javascript
Python操作MySQL简单实现方法
2015/01/26 Python
Python执行时间的计算方法小结
2017/03/17 Python
Python基于百度AI的文字识别的示例
2018/04/21 Python
python super()函数的基本使用
2020/09/10 Python
python利用google翻译方法实例(翻译字幕文件)
2020/09/21 Python
python中使用asyncio实现异步IO实例分析
2021/02/26 Python
澳大利亚礼品卡商店:Gift Card Store
2019/06/24 全球购物
德国最大的服装、鞋子和配件在线商店之一:Outfits24
2019/07/23 全球购物
行政管理专业推荐信
2013/11/02 职场文书
小学师德标兵先进事迹材料
2014/05/25 职场文书
教师工作失职检讨书
2014/09/18 职场文书
销售经理岗位职责
2015/01/31 职场文书
《生物入侵者》教学反思
2016/02/16 职场文书