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实现从url中提取域名的几种方法
Sep 26 Python
Python中if __name__ == '__main__'作用解析
Jun 29 Python
Python File readlines() 使用方法
Mar 19 Python
python3去掉string中的标点符号方法
Jan 22 Python
Python面向对象总结及类与正则表达式详解
Apr 18 Python
python批量读取文件名并写入txt文件中
Sep 05 Python
python中利用numpy.array()实现俩个数值列表的对应相加方法
Aug 26 Python
python 中不同包 类 方法 之间的调用详解
Mar 09 Python
Pytorch高阶OP操作where,gather原理
Apr 30 Python
python开发一个解析protobuf文件的简单编译器
Nov 17 Python
python实现KNN近邻算法
Dec 30 Python
Python matplotlib绘制雷达图
Apr 13 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把空格、换行符、中文逗号等替换成英文逗号的正则表达式
2014/05/04 PHP
thinkPHP下的widget扩展用法实例分析
2015/12/26 PHP
BootStrap3学习笔记(一)之网格系统
2016/05/20 Javascript
DOM 事件的深入浅出(一)
2016/12/05 Javascript
js实现固定宽高滑动轮播图效果
2017/01/13 Javascript
详解使用vue脚手架工具搭建vue-webpack项目
2017/05/10 Javascript
jsonp跨域请求详解
2017/07/13 Javascript
js编写简单的聊天室功能
2017/08/17 Javascript
微信小程序使用progress组件实现显示进度功能【附源码下载】
2017/12/12 Javascript
jQuery实现的下雪动画效果示例【附源码下载】
2018/02/02 jQuery
使用typescript开发angular模块并发布npm包
2018/04/19 Javascript
JS实现带阴历的日历功能详解
2019/01/24 Javascript
jQuery层叠选择器用法实例分析
2019/06/28 jQuery
基于js实现逐步显示文字输出代码实例
2020/04/02 Javascript
electron踩坑之remote of undefined的解决
2020/10/06 Javascript
详解Vite的新体验
2021/02/22 Javascript
[02:31]DOTA2帕克 英雄基础教程
2013/11/26 DOTA
python实现的udp协议Server和Client代码实例
2014/06/04 Python
python anaconda 安装 环境变量 升级 以及特殊库安装的方法
2017/06/21 Python
django使用html模板减少代码代码解析
2017/12/12 Python
Python实现上下班抢个顺风单脚本
2018/02/07 Python
python之django母板页面的使用
2018/07/03 Python
tensorflow实现测试时读取任意指定的check point的网络参数
2020/01/21 Python
Django haystack实现全文搜索代码示例
2020/11/28 Python
html5设计原理(推荐收藏)
2014/05/17 HTML / CSS
canvas简单连线动画的实现代码
2020/02/04 HTML / CSS
英国最大的邮寄种子和植物公司:Thompson & Morgan
2017/09/21 全球购物
宝拉珍选美国官网:Paula’s Choice美国
2018/01/07 全球购物
澳大利亚在线划船、露营和钓鱼商店:BCF Australia
2020/03/22 全球购物
Deichmann英国:德国鞋类零售商
2021/01/30 全球购物
德国玩具商店:Planet Happy DE
2021/01/16 全球购物
医学实习生自我鉴定
2013/12/12 职场文书
体育教师自我鉴定
2014/02/12 职场文书
节能宣传周活动总结
2014/05/08 职场文书
阳光体育运动标语口号
2015/12/26 职场文书
优质服务心得体会(共4篇)
2016/01/22 职场文书