源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

python logging类库使用例子

  • 时间:2020-03-01 12:18 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:python logging类库使用例子
[b]一、简单使用[/b]
[u]复制代码[/u] 代码如下:
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如下:
[u]复制代码[/u] 代码如下:
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
[b]二、logging的level[/b]
[u]复制代码[/u] 代码如下:
#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。   [b]三、Handlers[/b] 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模块提供了配置功能。 [b]四、FileHandler + StreamHandler[/b]
[u]复制代码[/u] 代码如下:
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绑定; [b] 运行结果[/b] simple.txt
[u]复制代码[/u] 代码如下:
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
[u]复制代码[/u] 代码如下:
2011-01-18 11:25:57,072 - simple - ERROR - error message 2011-01-18 11:25:57,072 - simple - CRITICAL - critical message
[b]五、RotatingFileHandler[/b]
[u]复制代码[/u] 代码如下:
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。 运行结果:
[u]复制代码[/u] 代码如下:
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
[b]六、使用fileConfig来使用logger[/b]
[u]复制代码[/u] 代码如下:
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文件如下:
[u]复制代码[/u] 代码如下:
[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=
运行结果:
[u]复制代码[/u] 代码如下:
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
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部