zoukankan      html  css  js  c++  java
  • python日志模块---logging

    1.将日志打印到屏幕

    1 import logging
    2 
    3 logging.debug('This is debug message---by liu-ke')
    4 logging.info('This is info message---by liu-ke')
    5 logging.warning('This is warning message---by liu-ke')

    默认情况下,logging将日志打印到屏幕,日志级别为WARNING;
    日志级别大小关系为:CRITICAL > ERROR > WARNING > INFO > DEBUG > NOTSET,日志级别可以自己定义。

    2.通过logging.basicConfig函数 配置 日志的输出格式及方式

     1 import logging
     2 
     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='mypy.log',
     7                 filemode='w')
     8     
     9 logging.debug('This is debug message by liu-ke')
    10 logging.info('This is info message by liu-ke')
    11 logging.warning('This is warning message by liu-ke')
     1 logging.basicConfig函数各参数:
     2 filename: 指定日志文件名
     3 filemode: 和file函数意义相同,指定日志文件的打开模式,'w''a'
     4 format: 指定输出的格式和内容,format可以输出很多有用信息,如上例所示:
     5  %(levelno)s: 打印日志级别的数值
     6  %(levelname)s: 打印日志级别名称
     7  %(pathname)s: 打印当前执行程序的路径,其实就是sys.argv[0]
     8  %(filename)s: 打印当前执行程序名
     9  %(funcName)s: 打印日志的当前函数
    10  %(lineno)d: 打印日志的当前行号
    11  %(asctime)s: 打印日志的时间
    12  %(thread)d: 打印线程ID
    13  %(threadName)s: 打印线程名称
    14  %(process)d: 打印进程ID
    15  %(message)s: 打印日志信息
    16 datefmt: 指定时间格式,同time.strftime()
    17 level: 设置日志级别,默认为logging.WARNING
    18 stream: 指定将日志的输出流,可以指定输出到sys.stderr,sys.stdout或者文件,默认输出到sys.stderr,当stream和filename同时指定时,stream被忽略

    3.将日志同时输出到文件和屏幕

     1 import logging
     2 
     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='mypy.log',
     7                 filemode='w')
     8 
     9 #################################################################################################
    10 #定义一个StreamHandler,将INFO级别或更高的日志信息打印到标准错误,并将其添加到当前的日志处理对象#
    11 console = logging.StreamHandler()
    12 console.setLevel(logging.INFO)
    13 formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s')
    14 console.setFormatter(formatter)
    15 logging.getLogger('').addHandler(console)
    16 #################################################################################################
    17 
    18 logging.debug('This is debug message')
    19 logging.info('This is info message')
    20 logging.warning('This is warning message')

    4.logging之日志回滚

     1 import logging
     2 from logging.handlers import RotatingFileHandler
     3 
     4 #################################################################################################
     5 #定义一个RotatingFileHandler,最多备份5个日志文件,每个日志文件最大10M(自定义)
     6 Rthandler = RotatingFileHandler('myapp.log', maxBytes=10*1024*1024,backupCount=5)
     7 Rthandler.setLevel(logging.INFO)
     8 formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s')
     9 Rthandler.setFormatter(formatter)
    10 logging.getLogger('').addHandler(Rthandler)
    11 ###########################################################################################

    从上例和本例可以看出,logging有一个日志处理的主对象,其它处理方式都是通过addHandler添加进去的。
    logging的几种handle方式如下:

     1 logging.StreamHandler: 日志输出到流,可以是sys.stderr、sys.stdout或者文件
     2 logging.FileHandler: 日志输出到文件
     3 日志回滚方式,实际使用时用RotatingFileHandler和TimedRotatingFileHandler
     4 logging.handlers.BaseRotatingHandler
     5 logging.handlers.RotatingFileHandler
     6 logging.handlers.TimedRotatingFileHandler
     7 logging.handlers.SocketHandler: 远程输出日志到TCP/IP sockets
     8 logging.handlers.DatagramHandler:  远程输出日志到UDP sockets
     9 logging.handlers.SMTPHandler:  远程输出日志到邮件地址
    10 logging.handlers.SysLogHandler: 日志输出到syslog
    11 logging.handlers.NTEventLogHandler: 远程输出日志到Windows NT/2000/XP的事件日志
    12 logging.handlers.MemoryHandler: 日志输出到内存中的制定buffer
    13 logging.handlers.HTTPHandler: 通过"GET""POST"远程输出到HTTP服务器

    由于StreamHandler和FileHandler是常用的日志处理方式,所以直接包含在logging模块中,而其他方式则包含在logging.handlers模块中,
    上述其它处理方式的使用请自行参见python2.7手册!

    5.通过logging.config模块配置日志

     1 #logger.conf
     2 ###############################################
     3 [loggers]
     4 keys=root,example01,example02
     5 [logger_root]
     6 level=DEBUG
     7 handlers=hand01,hand02
     8 [logger_example01]
     9 handlers=hand01,hand02
    10 qualname=example01
    11 propagate=0
    12 [logger_example02]
    13 handlers=hand01,hand03
    14 qualname=example02
    15 propagate=0
    16 ###############################################
    17 [handlers]
    18 keys=hand01,hand02,hand03
    19 [handler_hand01]
    20 class=StreamHandler
    21 level=INFO
    22 formatter=form02
    23 args=(sys.stderr,)
    24 [handler_hand02]
    25 class=FileHandler
    26 level=DEBUG
    27 formatter=form01
    28 args=('myapp.log', 'a')
    29 [handler_hand03]
    30 class=handlers.RotatingFileHandler
    31 level=INFO
    32 formatter=form02
    33 args=('myapp.log', 'a', 10*1024*1024, 5)
    34 ###############################################
    35 [formatters]
    36 keys=form01,form02
    37 [formatter_form01]
    38 format=%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s
    39 datefmt=%a, %d %b %Y %H:%M:%S
    40 [formatter_form02]
    41 format=%(name)-12s: %(levelname)-8s %(message)s
    42 datefmt=

    上例3:

    1 import logging
    2 import logging.config
    3 
    4 logging.config.fileConfig("logger.conf")
    5 logger = logging.getLogger("example01")
    6 
    7 logger.debug('This is debug message')
    8 logger.info('This is info message')
    9 logger.warning('This is warning message')

    上例4:

    1 import logging
    2 import logging.config
    3 
    4 logging.config.fileConfig("logger.conf")
    5 logger = logging.getLogger("example02")
    6 
    7 logger.debug('This is debug message')
    8 logger.info('This is info message')
    9 logger.warning('This is warning message')

     

  • 相关阅读:
    各种排序(二)
    各种排序(一)
    【游记】CSP-S2019游记
    【题解】hdu1506 Largest Rectangle in a Histogram
    【题解】CF161B Discounts
    【CSP-S膜你考】我们的可可西里
    Bzoj3675 [Apio2014]序列分割
    Bzoj3853 GCD Array
    Bzoj3876 [Ahoi2014]支线剧情
    Bzoj2324 [ZJOI2011]营救皮卡丘
  • 原文地址:https://www.cnblogs.com/liu-ke/p/4444448.html
Copyright © 2011-2022 走看看