关于Pyhton logging

来源:互联网 发布:网络诗歌每日一诗 编辑:程序博客网 时间:2024/06/07 02:30
  1. 一、基础配置方式

  2. import logging  
  3. logging.basicConfig(level=logging.DEBUG,  
  4.                     format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',  
  5.                     datefmt='%a, %d %b %Y %H:%M:%S',  
  6.                     filename='/tmp/test.log',  
  7.                     filemode='w')  
  8.   
  9. logging.debug('debug message')  
  10. logging.info('info message')  
  11. logging.warning('warning message')  
  12. logging.error('error message')  

  1. logging.critical('critical message')  
               filename:用指定的文件名创建FiledHandler(后边会具体讲解handler的概念),这样日志会被存储在指定的文件中。
               filemode:文件打开方式,在指定了filename时使用这个参数,a表示追加,w表示每次打开覆盖
               format:指定handler使用的日志显示格式,参数中可能用到的格式化串:
                           %(name)s Logger的名字
                           %(levelno)s 数字形式的日志级别
                           %(levelname)s 文本形式的日志级别
                           %(pathname)s 调用日志输出函数的模块的完整路径名,可能没有
                           %(filename)s 调用日志输出函数的模块的文件名
                           %(module)s 调用日志输出函数的模块名
                           %(funcName)s 调用日志输出函数的函数名
                           %(lineno)d 调用日志输出函数的语句所在的代码行
                           %(created)f 当前时间,用UNIX标准的表示时间的浮 点数表示
                           %(relativeCreated)d 输出日志信息时的,自Logger创建以 来的毫秒数
                           %(asctime)s 字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒
                           %(thread)d 线程ID。可能没有
                           %(threadName)s 线程名。可能没有
                           %(process)d 进程ID。可能没有
                           %(message)s用户输出的消息
               datefmt:指定日期时间格式,同time.strftime()
               level:设置rootlogger(后边会讲解具体概念)的日志级别 ,默认为logging.WARNING
               stream:用指定的stream创建StreamHandler。可以指定输出到sys.stderr,sys.stdout或者文件,默认为sys.stderr。若同时列出了filename和                              stream两个参数,则stream参数会被忽略。

               二、配置文件的方式

               #logger.conf
               #-------------------------------------------------------------------------

               #define loggers...
               [loggers]
               keys=root,myLog


               [logger_root]
               level=INFO
               handlers=myHandler

                [logger_myLog]
                level=DEBUG
                handlers=myHandler,myHandlerPrint
                qualname=myLog
                propagate=0
                #-------------------------------------------------------------------------

               #define handlers...
               [handlers]
               keys=myHandler,myHandlerPrint

               [handler_myHandler]
               class=StreamHandler
               level=DEBUG
               formatter=myFormatter
               args=(sys.stdout,)  

               [handler_myHandlerPrint]
               class=FileHandler 
               formatter=myFormatterPrint
               level=DEBUG
               args=('python.log', 'w')
               #-------------------------------------------------------------------------

               #define formatters...
               [formatters]
               keys=myFormatter,myFormatterPrint

               [formatter_myFormatter]
               format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
               datefmt=

                [formatter_myFormatterPrint]
                format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
                datefmt=
                 #-------------------------------------------------------------------------、


                test.py


  1. import logging
    import logging.config

    logging.config.fileConfig("myCommon\myLog.conf")

    #creater logger
    logger = logging.getLogger("root")
    #create logger1
    logger1 = logging.getLogger('myLog')

    #application code
    logger.debug("debug message")    
    logger.info("info message")    
    logger.warn("warn message")    
    logger.error("error message")    
    logger.critical("critical message")  

    logger1.debug("debug message 1")    
    logger1.info("info message 1")    
    logger1.warn("warn message 1")    
    logger1.error("error message 1")    
    logger1.critical("critical message 1")  


         三、关于一些重要点
         1、TimedRotatingFileHandler:

                     TimedRotatingFileHandler(filename [,when [,interval [,backupCount]]])

                     filename 是输出日志文件名的前缀

                     when 是一个字符串的定义如下:
                     “S”: Seconds
                     “M”: Minutes
                     “H”: Hours
                     “D”: Days
                     “W”: Week day (0=Monday)
                     “midnight”: Roll over at midnight

                     interval 是指等待多少个单位when的时间后,Logger会自动重建文件,当然,这个文件的创建
                    取决于filename+suffix,若这个文件跟之前的文件有重名,则会自动覆盖掉以前的文件,所以
                    有些情况suffix要定义的不能因为when而重复。

                    backupCount 是保留日志个数。默认的0是不会自动删除掉日志。若设10,则在文件的创建过程中
                    库会判断是否有超过这个10,若超过,则会从最先创建的开始删除。


                    例如:

class=handlers.TimedRotatingFileHandler

level=DEBUG

formatter=myFormatter

args=('test.log','d',2,10)


2、RotatingFileHandler

                       RotatingFileHandler( filename[, mode[, maxBytes[, backupCount]]])

                      其中filename和mode两个参数和FileHandler一样。
                      maxBytes用于指定日志文件的最大文件大小,如果maxBytes为0,意味着日志文件可以无限大,这时上面描述的重命名过程就不会发生。

                      backupCount用于指定保留的备份文件的个数。比如,如果指定为2,当上面描述的重命名过程发生时,原有的chat.log.2并不会被更                      名,而是被删除。

                   例如:

                         class=handlers.RotatingFileHandler

level=INFO

formatter=myFormatter

args=('test.log','a',10 * 1024,10)

原创粉丝点击