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操作时间和日期之asctime()方法的使用
May 22 Python
使用Python下载歌词并嵌入歌曲文件中的实现代码
Nov 13 Python
python调用tcpdump抓包过滤的方法
Jul 18 Python
python中copy()与deepcopy()的区别小结
Aug 03 Python
Python实现网站表单提交和模板
Jan 15 Python
PyQt5组件读取参数的实例
Jun 25 Python
python 魔法函数实例及解析
Sep 25 Python
Python中Selenium库使用教程详解
Jul 23 Python
Python爬虫基于lxml解决数据编码乱码问题
Jul 31 Python
安装pyecharts1.8.0版本后导入pyecharts模块绘图时报错: “所有图表类型将在 v1.9.0 版本开始强制使用 ChartItem 进行数据项配置 ”的解决方法
Aug 18 Python
Python实现七个基本算法的实例代码
Oct 08 Python
python中最小二乘法详细讲解
Feb 19 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
法兰绒滤网冲泡
2021/03/03 冲泡冲煮
SSI指令
2006/11/25 PHP
PHP 字符串分割和比较
2009/10/06 PHP
PHP速成大法
2015/01/30 PHP
Code: write(s,d) 输出连续字符串
2007/08/19 Javascript
js 图片缩放(按比例)控制代码
2009/05/27 Javascript
实现点击列表弹出列表索引的两种方式
2013/03/08 Javascript
jquery获取元素值的方法(常见的表单元素)
2013/11/15 Javascript
jquery.uploadify插件在chrome浏览器频繁崩溃解决方法
2015/03/01 Javascript
js实现每日自动换一张图片的方法
2015/05/04 Javascript
jquery延迟对象解析
2016/10/26 Javascript
使用JSON作为函数的参数的优缺点
2016/10/27 Javascript
浅谈angular2的http请求返回结果的subcribe注意事项
2017/03/01 Javascript
jQuery实现table表格信息的展开和缩小功能示例
2018/07/21 jQuery
JS 中可以提升幸福度的小技巧(可以识别更多另类写法)
2018/07/28 Javascript
vue实现简单的日历效果
2020/09/24 Javascript
微信小程序如何自定义table组件
2019/06/29 Javascript
vue配置nprogress实现页面顶部进度条
2019/09/21 Javascript
微信小程序获取当前时间及星期几的实例代码
2020/09/20 Javascript
Nest.js环境变量配置与序列化详解
2021/02/21 Javascript
python中引用与复制用法实例分析
2015/06/04 Python
深入理解python多进程编程
2016/06/12 Python
python删除过期log文件操作实例解析
2018/01/31 Python
python版本的仿windows计划任务工具
2018/04/30 Python
Python批量生成幻影坦克图片实例代码
2019/06/04 Python
python之列表推导式的用法
2019/11/29 Python
在keras 中获取张量 tensor 的维度大小实例
2020/06/10 Python
keras中的loss、optimizer、metrics用法
2020/06/15 Python
俄罗斯眼镜网: optikaworld
2016/07/31 全球购物
Spartoo荷兰:鞋子、包包和服装
2018/07/12 全球购物
Java里面Pass by value和Pass by Reference是什么意思
2016/05/02 面试题
企业宣传口号
2014/06/12 职场文书
银行保安拾金不昧表扬稿
2015/05/05 职场文书
高中化学教学反思
2016/02/22 职场文书
Python基础详解之描述符
2021/04/28 Python
使用python生成大量数据写入es数据库并查询操作(2)
2022/09/23 Python