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脚本在Nginx和uwsgi上部署MoinMoin的教程
May 05 Python
详细解析Python中的变量的数据类型
May 13 Python
使用Python对Csv文件操作实例代码
May 12 Python
Python决策树分类算法学习
Dec 22 Python
Python中的pack和unpack的使用
Mar 12 Python
Pycharm 创建 Django admin 用户名和密码的实例
May 30 Python
python面向对象多线程爬虫爬取搜狐页面的实例代码
May 31 Python
python实现公司年会抽奖程序
Jan 22 Python
centos6.5安装python3.7.1之后无法使用pip的解决方案
Feb 14 Python
python中pip的使用和修改下载源的方法
Jul 08 Python
python3 tcp的粘包现象和解决办法解析
Dec 09 Python
python单例模式的应用场景实例讲解
Feb 24 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
《星际争霸II》全新指挥官斯台特曼现已上线
2020/03/08 星际争霸
DOTA2 无惧惊涛骇浪 昆卡大型水友攻略
2020/04/20 DOTA
fetchAll()与mysql_fetch_array()的区别详解
2013/06/05 PHP
PHP中抽象类和抽象方法概念与用法分析
2016/05/24 PHP
laravel 5.3中自定义加密服务的方案详解
2017/05/09 PHP
PHP基于自定义函数实现的汉字转拼音功能实例
2017/09/30 PHP
laravel框架语言包拓展实现方法分析
2019/11/22 PHP
javascript事件问题
2009/09/05 Javascript
Javascript 中的 && 和 || 使用小结
2010/04/25 Javascript
纯JS实现的批量图片预览加载功能
2011/08/14 Javascript
Js四则运算函数代码
2012/07/21 Javascript
js 处理数组重复元素示例代码
2013/12/27 Javascript
JS、jquery实现几分钟前、几小时前、几天前等时间差显示效果的代码实例分享
2014/04/11 Javascript
jQuery+html5实现div弹出层并遮罩背景
2015/04/15 Javascript
jquery对所有input type=text的控件赋值实现方法
2016/12/02 Javascript
从零开始学习Node.js系列教程六:EventEmitter发送和接收事件的方法示例
2017/04/13 Javascript
微信小程序 转发功能的实现
2017/08/04 Javascript
Express结合Webpack的全栈自动刷新
2019/05/23 Javascript
Node.js 实现远程桌面监控的方法步骤
2019/07/02 Javascript
微信小程序实现点击图片放大预览
2019/10/21 Javascript
[03:39]DOTA2英雄梦之声_第05期_幽鬼
2014/06/23 DOTA
python读取浮点数和读取文本文件示例
2014/05/06 Python
Python爬虫:通过关键字爬取百度图片
2017/02/17 Python
python实时监控cpu小工具
2018/06/21 Python
Django框架 querySet功能解析
2019/09/04 Python
Python Pandas对缺失值的处理方法
2019/09/27 Python
Python小白不正确的使用类变量实例
2020/05/29 Python
Python获取浏览器窗口句柄过程解析
2020/07/25 Python
CSS去掉A标签(链接)虚线框的方法
2014/04/01 HTML / CSS
Hertz荷兰:荷兰和全球租车
2018/01/07 全球购物
Bailey帽子官方商店:Bailey Hats
2018/09/25 全球购物
化石印度尼西亚在线商店:Fossil Indonesia
2019/03/11 全球购物
网络专业学生个人的自我评价
2013/12/16 职场文书
租房协议书样本
2014/08/20 职场文书
100句人生哲理语录集锦:强者征服今天,懒汉坐等明天
2019/10/18 职场文书
解决MySQL Varchar 类型尾部空格的问题
2022/04/06 MySQL