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脚本来获取Cisco设备信息的示例
May 04 Python
使用httplib模块来制作Python下HTTP客户端的方法
Jun 19 Python
python rsa 加密解密
Mar 20 Python
浅谈Django自定义模板标签template_tags的用处
Dec 20 Python
Python实现带参数与不带参数的多重继承示例
Jan 30 Python
Django REST framework 单元测试实例解析
Nov 07 Python
基于python的列表list和集合set操作
Nov 24 Python
Python While循环语句实例演示及原理解析
Jan 03 Python
如何定义TensorFlow输入节点
Jan 23 Python
基于Python爬取爱奇艺资源过程解析
Mar 02 Python
浅谈pytorch中的BN层的注意事项
Jun 23 Python
python使用PySimpleGUI设置进度条及控件使用
Jun 10 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之Memcache学习笔记
2013/06/17 PHP
php获取URL中带#号等特殊符号参数的解决方法
2014/09/02 PHP
Yii中使用PHPExcel导出Excel的方法
2014/12/26 PHP
利用phpexcel对数据库数据的导入excel(excel筛选)、导出excel
2017/04/27 PHP
JavaScript库 开发规则
2009/01/31 Javascript
Javascript 二维数组
2009/11/26 Javascript
JavaScript Event学习第八章 事件的顺序
2010/02/07 Javascript
JSON.parse 解析字符串出错的解决方法
2010/07/08 Javascript
浅谈被jQuery抛弃的函数及替代函数
2015/05/03 Javascript
Jquery 效果使用详解
2015/11/23 Javascript
JavaScript+CSS实现的可折叠二级菜单实例
2016/02/29 Javascript
原生js实现自由拖拽弹窗代码demo
2016/06/29 Javascript
javaScript 事件绑定、事件冒泡、事件捕获和事件执行顺序整理总结
2016/10/10 Javascript
打造通用的匀速运动框架(实例讲解)
2017/10/17 Javascript
jQuery实现滑动星星评分效果(每日分享)
2019/11/13 jQuery
解决Python出现_warn_unsafe_extraction问题的方法
2016/03/24 Python
Python上下文管理器和with块详解
2017/09/09 Python
对pandas中两种数据类型Series和DataFrame的区别详解
2018/11/12 Python
python安装pywin32clipboard的操作方法
2019/01/24 Python
python opencv鼠标事件实现画框圈定目标获取坐标信息
2020/04/18 Python
TensorFlow tf.nn.max_pool实现池化操作方式
2020/01/04 Python
django使用F方法更新一个对象多个对象字段的实现
2020/03/28 Python
python修改微信和支付宝步数的示例代码
2020/10/12 Python
初中三年毕业生的自我评价分享
2014/02/14 职场文书
财务会计岗位职责
2015/02/03 职场文书
博士给导师的自荐信
2015/03/06 职场文书
简历中自我评价范文
2015/03/11 职场文书
单位实习介绍信
2015/05/05 职场文书
勇敢的心观后感
2015/06/09 职场文书
2016年春季运动会加油稿
2015/07/22 职场文书
老干部局2015年度工作总结
2015/10/22 职场文书
医学会议开幕词
2016/03/03 职场文书
详解Nginx启动失败的几种错误处理
2021/04/01 Servers
Redis 常见使用场景
2021/08/30 Redis
Nginx内网单机反向代理的实现
2021/11/07 Servers
Python docx库删除复制paragraph及行高设置图片插入示例
2022/07/23 Python