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中处理时间之clock()方法的使用
May 22 Python
Python计算已经过去多少个周末的方法
Jul 25 Python
Python之web模板应用
Dec 26 Python
Python线程创建和终止实例代码
Jan 20 Python
Python如何发布程序的详细教程
Oct 09 Python
python根据txt文本批量创建文件夹
Dec 08 Python
Python常见读写文件操作实例总结【文本、json、csv、pdf等】
Apr 15 Python
总结Python图形用户界面和游戏开发知识点
May 22 Python
python解压TAR文件至指定文件夹的实例
Jun 10 Python
Python socket模块ftp传输文件过程解析
Nov 05 Python
python数据化运营的重要意义
Nov 25 Python
pytorch的batch normalize使用详解
Jan 15 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
在DC的漫画和电影中,蝙蝠侠的宿敌,小丑的真名是什么?
2020/04/09 欧美动漫
《Re:从零开始的异世界生活 冰结之绊》
2020/04/09 日漫
快速开发一个PHP扩展图文教程
2008/12/12 PHP
php在数组中查找指定值的方法
2015/03/17 PHP
php实现字符串首字母转换成大写的方法
2015/03/17 PHP
php脚本守护进程原理与实现方法详解
2017/07/20 PHP
javascript编程起步(第五课)
2007/02/27 Javascript
ppk谈JavaScript style属性
2008/10/10 Javascript
js同比例缩放图片的小例子
2013/10/30 Javascript
js插件方式打开pdf文件(浏览器pdf插件分享)
2013/12/20 Javascript
基于BootStrap Metronic开发框架经验小结【四】Bootstrap图标的提取和利用
2016/05/12 Javascript
基于jquery插件编写countdown计时器
2016/06/12 Javascript
用AngularJS的指令实现tabs切换效果
2016/08/31 Javascript
AngularJS 表单验证手机号的实例(非必填)
2017/11/12 Javascript
js+css实现红包雨效果
2018/07/12 Javascript
解决vue 打包发布去#和页面空白的问题
2018/09/04 Javascript
深入了解JavaScript代码覆盖
2019/06/13 Javascript
nodejs对项目下所有空文件夹创建gitkeep的方法
2019/08/02 NodeJs
[02:43]DOTA2英雄基础教程 德鲁伊
2014/01/13 DOTA
django批量导入xml数据
2016/10/16 Python
Django ORM框架的定时任务如何使用详解
2017/10/19 Python
tornado 多进程模式解析
2018/01/15 Python
python numpy库np.percentile用法说明
2020/06/08 Python
介绍CSS3使用技巧5个
2009/04/02 HTML / CSS
CSS3实现复选框动画特效示例代码
2016/09/27 HTML / CSS
详解canvas多边形(蜘蛛图)的画法示例
2018/01/29 HTML / CSS
奢华的意大利皮革手袋:Bene Handbags
2019/10/29 全球购物
我有一个char * 型指针正巧指向一些int 型变量, 我想跳过它们。 为什么如下的代码((int *)p)++; 不行?
2013/05/09 面试题
求职信写作要突出重点
2014/01/01 职场文书
六月份红领巾广播稿
2014/02/03 职场文书
社区党风廉政建设调研报告
2015/01/01 职场文书
门卫岗位职责
2015/02/09 职场文书
小学生必读成语故事大全:送给暑假的你们
2019/07/09 职场文书
导游词之北京明十三陵
2019/10/28 职场文书
js中Object.create实例用法详解
2021/10/05 Javascript
详解Python内置模块Collections
2022/03/22 Python