python logging类库使用例子


Posted in Python onNovember 22, 2014

一、简单使用

def TestLogBasic():

    import logging 

    logging.basicConfig(filename = 'log.txt', filemode = 'a', level = logging.NOTSET, format = '%(asctime)s - %(levelname)s: %(message)s')

    logging.debug('this is a message')

    logging.info("this is a info")

    logging.disable(30)#logging.WARNING

    logging.warning("this is a warnning")

    logging.critical("this is a critical issue")

    logging.error("this is a error")

    logging.addLevelName(88,"MyCustomError")

    logging.log(88,"this is an my custom error")

    try:

      raise Exception('this is a exception')

    except:

      logging.exception( 'exception')

    logging.shutdown()
TestLogBasic()

说明:(此实例为最简单的用法,用来将log记录到log文件中)

1)logging.basicConfig()中定义默认的log到log.txt,log文件为append模式,处理所有的level大于logging.NOTSET的logging,log的格式定义为'%(asctime)s - %(levelname)s: %(message)s';

2)使用logging.debug()...等来log相应level的log;

3)使用logging.disable()来disable某个logging level;

4)使用logging.addLevelName增加自定义的logging level;

5)使用logging.log来log自定义的logging level的log;

输出的text的log如下:

2011-01-18 10:02:45,415 - DEBUG: this is a message

2011-01-18 10:02:45,463 - INFO: this is a info

2011-01-18 10:02:45,463 - CRITICAL: this is a critical issue

2011-01-18 10:02:45,463 - ERROR: this is a error

2011-01-18 10:02:45,463 - MyCustomError: this is an my custom error

2011-01-18 10:02:45,463 - ERROR: exception

Traceback (most recent call last):

  File "testlog.py", line 15, in TestLogBasic

    raise Exception('this is a exception')

Exception: this is a exception

二、logging的level

#logging level 

#logging.NOTSET 0

#logging.DEBUG 10

#logging.INFO 20

#logging.WARNING 30 

#logging.ERROR 40 

#logging.CRITICAL 50

logging的level对应于一个int,例如10,20...用户可以自定义logging的level。

可以使用logging.setLevel()来指定要处理的logger级别,例如my_logger.setLevel(logging.DEBUG)表示只处理logging的level大于10的logging。
 

三、Handlers

Handler定义了log的存储和显示方式。

NullHandler不做任何事情。

StreamHandler实例发送错误到流(类似文件的对象)。
FileHandler实例发送错误到磁盘文件。
BaseRotatingHandler是所有轮徇日志的基类,不能直接使用。但是可以使用RotatingFileHandler和TimeRotatingFileHandler。
RotatingFileHandler实例发送信息到磁盘文件,并且限制最大的日志文件大小,并适时轮徇。
TimeRotatingFileHandler实例发送错误信息到磁盘,并在适当的事件间隔进行轮徇。
SocketHandler实例发送日志到TCP/IP socket。
DatagramHandler实例发送错误信息通过UDP协议。
SMTPHandler实例发送错误信息到特定的email地址。
SysLogHandler实例发送日志到UNIX syslog服务,并支持远程syslog服务。
NTEventLogHandler实例发送日志到WindowsNT/2000/XP事件日志。
MemoryHandler实例发送日志到内存中的缓冲区,并在达到特定条件时清空。
HTTPHandler实例发送错误信息到HTTP服务器,通过GET或POST方法。
NullHandler,StreamHandler和FileHandler类都是在核心logging模块中定义的。其他handler定义在各个子模块中,叫做logging.handlers。

当然还有一个logging.config模块提供了配置功能。

四、FileHandler + StreamHandler

def TestHanderAndFormat():

    import logging

    logger = logging.getLogger("simple")

    logger.setLevel(logging.DEBUG)

    

    # create file handler which logs even debug messages

    fh = logging.FileHandler("simple.log")

    fh.setLevel(logging.DEBUG)

    

    # create console handler with a higher log level

    ch = logging.StreamHandler()

    ch.setLevel(logging.ERROR)

    

    # create formatter and add it to the handlers

    formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")

    ch.setFormatter(formatter)

    fh.setFormatter(formatter)

    

    # add the handlers to logger

    logger.addHandler(ch)

    logger.addHandler(fh)
    # "application" code

    logger.debug("debug message")

    logger.info("info message")

    logger.warn("warn message")

    logger.error("error message")

    logger.critical("critical message")
TestHanderAndFormat()

说明:(此实例同时使用FileHandler和StreamHandler来实现同时将log写到文件和console)

1)使用logging.getLogger()来新建命名logger;

2)使用logging.FileHandler()来生成FileHandler来将log写入log文件,使用logger.addHandler()将handler与logger绑定;

3)使用logging.StreamHandler()来生成StreamHandler来将log写到console,使用logger.addHandler()将handler与logger绑定;

4)使用logging.Formatter()来构造log格式的实例,使用handler.setFormatter()来将formatter与handler绑定;

 运行结果

simple.txt

2011-01-18 11:25:57,026 - simple - DEBUG - debug message

2011-01-18 11:25:57,072 - simple - INFO - info message

2011-01-18 11:25:57,072 - simple - WARNING - warn message

2011-01-18 11:25:57,072 - simple - ERROR - error message

2011-01-18 11:25:57,072 - simple - CRITICAL - critical message

console

2011-01-18 11:25:57,072 - simple - ERROR - error message

2011-01-18 11:25:57,072 - simple - CRITICAL - critical message

五、RotatingFileHandler

def TestRotating():

    import glob

    import logging

    import logging.handlers

    

    LOG_FILENAME = 'logging_rotatingfile_example.out'
    # Set up a specific logger with our desired output level

    my_logger = logging.getLogger('MyLogger')

    my_logger.setLevel(logging.DEBUG)
    # Add the log message handler to the logger

    handler = logging.handlers.RotatingFileHandler(LOG_FILENAME, maxBytes=20, backupCount=5)
    my_logger.addHandler(handler)
    # Log some messages

    for i in range(20):

        my_logger.debug('i = %d' % i)
    # See what files are created

    logfiles = glob.glob('%s*' % LOG_FILENAME)
    for filename in logfiles:

        print(filename)

        

TestRotating()

说明:

RotatingFileHandler指定了单个log文件的size的最大值和log文件的数量的最大值,如果文件大于最大值,将分割为多个文件,如果log文件的数量多于最多个数,最老的log文件将被删除。例如此例中最新的log总是在logging_rotatingfile_example.out,logging_rotatingfile_example.out.5中包含了最老的log。

运行结果:

logging_rotatingfile_example.out

logging_rotatingfile_example.out.1

logging_rotatingfile_example.out.2

logging_rotatingfile_example.out.3

logging_rotatingfile_example.out.4

logging_rotatingfile_example.out.5

六、使用fileConfig来使用logger

import logging

import logging.config
logging.config.fileConfig("logging.conf")
# create logger

logger = logging.getLogger("simpleExample")
# "application" code

logger.debug("debug message")

logger.info("info message")

logger.warn("warn message")

logger.error("error message")

logger.critical("critical message")

logging.conf文件如下:

[loggers]

keys=root,simpleExample
[handlers]

keys=consoleHandler
[formatters]

keys=simpleFormatter
[logger_root]

level=DEBUG

handlers=consoleHandler
[logger_simpleExample]

level=DEBUG

handlers=consoleHandler

qualname=simpleExample

propagate=0
[handler_consoleHandler]

class=StreamHandler

level=DEBUG

formatter=simpleFormatter

args=(sys.stdout,)
[formatter_simpleFormatter]

format=%(asctime)s - %(name)s - %(levelname)s - %(message)s

datefmt=

运行结果:

2005-03-19 15:38:55,977 - simpleExample - DEBUG - debug message

2005-03-19 15:38:55,979 - simpleExample - INFO - info message

2005-03-19 15:38:56,054 - simpleExample - WARNING - warn message

2005-03-19 15:38:56,055 - simpleExample - ERROR - error message

2005-03-19 15:38:56,130 - simpleExample - CRITICAL - critical message
Python 相关文章推荐
Python中的defaultdict与__missing__()使用介绍
Feb 03 Python
python读取一个目录下所有txt里面的内容方法
Jun 23 Python
python 将列表中的字符串连接成一个长路径的方法
Oct 23 Python
python多线程扫描端口(线程池)
Sep 04 Python
django中瀑布流写法实例代码
Oct 14 Python
python生成器用法实例详解
Nov 22 Python
Python如何计算语句执行时间
Nov 22 Python
python属于哪种语言
Aug 16 Python
python能做哪些生活有趣的事情
Sep 09 Python
如何在python中处理配置文件代码实例
Sep 27 Python
使paramiko库执行命令时在给定的时间强制退出功能的实现
Mar 03 Python
对象析构函数__del__在Python中何时使用
Mar 22 Python
Python中模拟enum枚举类型的5种方法分享
Nov 22 #Python
Python读写Excel文件方法介绍
Nov 22 #Python
Python中的包和模块实例
Nov 22 #Python
Python动态加载模块的3种方法
Nov 22 #Python
收集的几个Python小技巧分享
Nov 22 #Python
Python获取Windows或Linux主机名称通用函数分享
Nov 22 #Python
Python中使用glob和rmtree删除目录子目录及所有文件的例子
Nov 21 #Python
You might like
?算你??的 PHP 程式大小
2006/12/06 PHP
excellent!――ASCII Art(由目标图象生成ascii)
2007/02/20 PHP
php md5下16位和32位的实现代码
2008/04/09 PHP
一些使用频率比较高的php函数
2008/10/03 PHP
第六章 php目录与文件操作
2011/12/30 PHP
php二维数组排序详解
2013/11/06 PHP
yii2使用GridView实现数据全选及批量删除按钮示例
2017/03/01 PHP
php实现的pdo公共类定义与用法示例
2017/07/19 PHP
浅析php如何实现爬取数据原理
2018/09/27 PHP
总结一些js自定义的函数
2006/08/05 Javascript
SyntaxHighlighter语法高亮插件使用说明
2011/08/14 Javascript
javascript显示用户停留时间的简单实例
2013/08/05 Javascript
js淡入淡出的图片轮播效果代码分享
2015/08/24 Javascript
详解nodejs 文本操作模块-fs模块(五)
2016/12/23 NodeJs
Angular中$broadcast和$emit的使用方法详解
2017/05/22 Javascript
浅谈node的事件机制
2017/10/09 Javascript
JS判断数组是否包含某元素实现方法汇总
2020/06/24 Javascript
python框架django基础指南
2016/09/08 Python
Python利用splinter实现浏览器自动化操作方法
2018/05/11 Python
Python 实现网页自动截图的示例讲解
2018/05/17 Python
Python查看微信撤回消息代码
2018/06/07 Python
python Selenium实现付费音乐批量下载的实现方法
2019/01/24 Python
python获取磁盘号下盘符步骤详解
2019/06/19 Python
python爬虫把url链接编码成gbk2312格式过程解析
2020/06/08 Python
python爬虫---requests库的用法详解
2020/09/28 Python
HTML5里autofocus自动聚焦属性使用介绍
2016/06/22 HTML / CSS
AE美国鹰美国官方网站:American Eagle Outfitters
2016/08/22 全球购物
friso美素佳儿官方海外旗舰店:荷兰原产原罐
2017/07/03 全球购物
美国医疗用品、医疗设备和家庭保健用品商店:Medical Supply Depot
2018/07/08 全球购物
机电一体化专业应届本科生求职信
2013/09/27 职场文书
小学班主任自我评价
2015/03/11 职场文书
2015年助残日活动总结
2015/03/27 职场文书
汤姆索亚历险记读书笔记
2015/06/29 职场文书
环保建议书范文
2015/09/14 职场文书
python实现腾讯滑块验证码识别
2021/04/27 Python
vue实现Toast组件轻提示
2022/04/10 Vue.js