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的id()函数解密过程
Dec 25 Python
Python程序设计入门(2)变量类型简介
Jun 16 Python
网站渗透常用Python小脚本查询同ip网站
May 08 Python
基于ID3决策树算法的实现(Python版)
May 31 Python
基于Linux系统中python matplotlib画图的中文显示问题的解决方法
Jun 15 Python
Python selenium实现微博自动登录的示例代码
May 16 Python
django ModelForm修改显示缩略图 imagefield类型的实例
Jul 28 Python
pytorch+lstm实现的pos示例
Jan 14 Python
python 函数中的参数类型
Feb 11 Python
Python读取Excel一列并计算所有对象出现次数的方法
Sep 04 Python
如何完美的建立一个python项目
Oct 09 Python
基于Python实现粒子滤波效果
Dec 01 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使用pack处理二进制文件的方法
2014/07/03 PHP
php通过array_push()函数添加多个变量到数组末尾的方法
2015/03/18 PHP
php header函数的常用http头设置
2015/06/25 PHP
PHP闭包函数传参及使用外部变量的方法
2016/03/15 PHP
CentOS7.0下安装PHP5.6.30服务的教程详解
2018/09/29 PHP
HTML页面如何象ASP一样接受参数
2007/02/07 Javascript
基于jquery的tab切换 js原理
2010/04/01 Javascript
High Performance JavaScript(高性能JavaScript)读书笔记分析
2011/05/05 Javascript
利用js实现选项卡的特别效果的实例
2013/03/03 Javascript
JavaScript中instanceof运算符的用法总结
2013/11/19 Javascript
js鼠标点击图片实现随机变换图片的方法
2015/02/16 Javascript
原生JS下拉加载插件分享
2016/12/26 Javascript
利用原生JS实现data方法示例代码
2019/05/28 Javascript
javascript实现异形滚动轮播
2019/11/28 Javascript
vue ajax 拦截原理与实现方法示例
2019/11/29 Javascript
python脚本实现数据导出excel格式的简单方法(推荐)
2016/12/30 Python
python多进程和多线程究竟谁更快(详解)
2017/05/29 Python
django admin添加数据自动记录user到表中的实现方法
2018/01/05 Python
opencv改变imshow窗口大小,窗口位置的方法
2018/04/02 Python
Django之无名分组和有名分组的实现
2019/04/16 Python
详解Python是如何实现issubclass的
2019/07/24 Python
python2 中 unicode 和 str 之间的转换及与python3 str 的区别
2019/07/25 Python
scrapy在python爬虫中搭建出错的解决方法
2020/11/22 Python
python中操作文件的模块的方法总结
2021/02/04 Python
用CSS3的box-reflect设置文字倒影效果的方法讲解
2016/03/07 HTML / CSS
俄罗斯香水和化妆品网上商店:NOTINO.ru
2019/12/17 全球购物
JSF的标签库有哪些
2012/04/27 面试题
会计大学生职业生涯规划书范文
2014/01/13 职场文书
先进党支部事迹材料
2014/01/13 职场文书
服务之星获奖感言
2014/01/21 职场文书
告诉你怎样写创业计划书
2014/01/27 职场文书
测绘专业大学生职业生涯规划书
2014/02/10 职场文书
创意婚礼策划方案
2014/05/18 职场文书
2014年材料员工作总结
2014/11/19 职场文书
CSS 制作波浪效果的思路
2021/05/18 HTML / CSS
使用CSS连接数据库的方式
2022/02/28 HTML / CSS