python 日志记录

发布时间:2019-09-26 11:36:15编辑:auto阅读(2041)

    周海汉 /文

    http://blog.csdn.net/ablo_zhou

    2010.3.20

     

    一、我写的log4py介绍

     

    在写<汉字大全 >时,自己实现了简单的log系统:

     

    输出

    INFO.stdout.test.
    2010-03-20T09:19:47.091774.[DEBUG].gloabal.debug information 调试.
    2010-03-20T09:19:47.092294.[ERROR].gloabal.errorrrrrrrrrrrrrrr.
    2010-03-20T09:19:47.092568.[DEBUG].gloabal.hello.

     

    使用时,只需

    import log4py

    log = log4py.log4py('module name')

     

    就可以用log.debug('debug')等几个级别打印log了。还可以定义是标准输出还是输出到文件,输出什么级别的。适用于小型的log系统。

     

    该log4py的好处是使用起来简单,具有基本的级别定义,完全支持中文,log调试的输入除了字符串还支持列表,字典,数字等,可以打印exception信息。打印的格式为"时间到毫秒,模块名,log级别,log内容“。

     

    但与系统的log比起来,缺乏强大的定制能力。

     

    二、系统的logging模块

    著名的log4j,log4cpp,以及python自带的logging其配置都相当复杂,使用灵活,可以通过配置文件自定义输出哪些模块,输出级别,输出格式,输出到文件和标准输出。并且兼顾多线程,性能等。

     

    系统自带的logging模块,缺省就可以简单使用:

    >>> import logging
    >>> logging.debug('debug')
    >>> logging.warn('debug')
    WARNING:root:debug
    >>> logging.debug('你好,调试')
    >>> logging.warn('你好,调试')
    WARNING:root:你好,调试

     

    可见,在控制台,debug缺省是不打印的。

    可以在编程时直接控制log的方式,也可以通过配置文件来进行。当然,配置文件更灵活。

     

    2.1 logging的几个组件

    Logger,Manager, Handler,Filter,Formatter,Configuration,Level

    Logger 是应用中log的实例,Handler是输出的方式,如:

    • StreamHandler - logging to a stream, defaulting to sys.stderr.
    • FileHandler - logging to disk files.
    • RotatingFileHandler - logging to disk files with support for rollover, rotating files.
    • SocketHandler - logging to a streaming socket.
    • DatagramHandler - logging to a UDP socket.
    • SMTPHandler - logging to an email address.
    • SysLogHandler - logging to Unix syslog. Contributed by Nicolas Untz, based on Sam Rushing's syslog module .
    • MemoryHandler - buffering records in memory until a specific trigger occurs (or until the buffer gets full).
    • NTEventLogHandler - writes events to the NT event log. For this to work, you need to have Mark Hammond's Win32 extensions installed. (Though of course you can still log to NT from other platforms - just use SocketHandler to redirect to an NT machine).
    • HTTPHandler - sends events to a Web server using either GET or POST semantics.

    Filter是设置的模块,哪些需要记录,都可以配置。

    Formatter是输出的格式,可以格式化时间,模块,级别。

    Level是输出的级别,有如下级别:

    DEBUG
    INFO
    WARNING
    ERROR
    CRITICAL
    

    log4j等原来的版本最高级是FATAL,python的logging最高级别是CTITICAL,因为FATAL是系统崩溃的错误。

     

    下面是一个使用配置文件写log的例子:

    周海汉 #date:2010.3.20 #file testlog.py import logging import logging.config logconf = '/home/zhouhh/logconf.ini' logging.config.fileConfig(fname=logconf) log1 = logging.getLogger('modlog1') log1.debug('log1调试信息') log1.warn('log1警告信息') log1.error('log1 error错误信息') log2 = logging.getLogger('modlog1.modlog2') log2.debug('log2调试信息') log2.warn('log2警告信息') log2.error('log2 错误信息')

     

    配置文件放在/home/zhouhh/logconf.ini

     

    执行后,命令行看到输出:

    文件python.log看到信息:

     

    下面是一个比较完全的配置文件,从http://www.red-dove.com/python_logging.html拿过来的,功写logconf文件时参考:

     

    3.参考:

    http://www.red-dove.com/python_logging.html

    http://www.python.org/dev/peps/pep-0282/

    http://docs.python.org/library/logging.html#configuration

    http://blog.donews.com/limodou/archive/2005/02/16/278699.aspx

关键字