zoukankan      html  css  js  c++  java
  • Python笔记(30)-----logger

    转自: https://www.jb51.net/article/139080.htm

    logging模块介绍

    Python的logging模块提供了通用的日志系统,熟练使用logging模块可以方便开发者开发第三方模块或者是自己的Python应用。同样这个模块提供不同的日志级别,并可以采用不同的方式记录日志,比如文件,HTTP、GET/POST,SMTP,Socket等,甚至可以自己实现具体的日志记录方式。下文我将主要介绍如何使用文件方式记录log。

    logging模块包括logger,handler,filter,formatter这四个基本概念。

    logging模块与log4j的机制是一样的,只是具体的实现细节不同。模块提供logger,handler,filter,formatter。

    logger:提供日志接口,供应用代码使用。logger最长用的操作有两类:配置和发送日志消息。可以通过logging.getLogger(name)获取logger对象,如果不指定name则返回root对象,多次使用相同的name调用getLogger方法返回同一个logger对象。

    handler:将日志记录(log record)发送到合适的目的地(destination),比如文件,socket等。一个logger对象可以通过addHandler方法添加0到多个handler,每个handler又可以定义不同日志级别,以实现日志分级过滤显示。

    filter:提供一种优雅的方式决定一个日志记录是否发送到handler。

    formatter:指定日志记录输出的具体格式。formatter的构造方法需要两个参数:消息的格式字符串和日期字符串,这两个参数都是可选的。

    与log4j类似,logger,handler和日志消息的调用可以有具体的日志级别(Level),只有在日志消息的级别大于logger和handler的级别。

    import logging
    logging.basicConfig(level=logging.DEBUG,
        format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
        datefmt='%a, %d %b %Y %H:%M:%S',
        filename='myapp.log',
        filemode='w')
    #################################################################################################
    #定义一个StreamHandler,将INFO级别或更高的日志信息打印到标准错误,并将其添加到当前的日志处理对象#
    console = logging.StreamHandler()
    console.setLevel(logging.INFO)
    formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s')
    console.setFormatter(formatter)
    logging.getLogger('').addHandler(console)
    #################################################################################################
    logging.debug('This is debug message')
    logging.info('This is info message')
    logging.warning('This is warning message')
      
    屏幕上打印:
    root  : INFO  This is info message
    root  : WARNING This is warning message
    ./myapp.log文件中内容为:
    Sun, 24 May 2009 21:48:54 demo2.py[line:11] DEBUG This is debug message
    Sun, 24 May 2009 21:48:54 demo2.py[line:12] INFO This is info message
    Sun, 24 May 2009 21:48:54 demo2.py[line:13] WARNING This is warning message

    logging.StreamHandler: 日志输出到流,可以是sys.stderr、sys.stdout或者文件

    logging.FileHandler: 日志输出到文件

    日志回滚方式,实际使用时用RotatingFileHandler和TimedRotatingFileHandler

    logging.handlers.BaseRotatingHandler

    logging.handlers.RotatingFileHandler

    logging.handlers.TimedRotatingFileHandler

    logging.handlers.SocketHandler: 远程输出日志到TCP/IP sockets

    logging.handlers.DatagramHandler: 远程输出日志到UDP sockets

    logging.handlers.SMTPHandler: 远程输出日志到邮件地址

    logging.handlers.SysLogHandler: 日志输出到syslog

    logging.handlers.NTEventLogHandler: 远程输出日志到Windows NT/2000/XP的事件日志

    logging.handlers.MemoryHandler: 日志输出到内存中的制定buffer

    logging.handlers.HTTPHandler: 通过"GET"或"POST"远程输出到HTTP服务器

    import logging
    import sys
    # 获取logger实例,如果参数为空则返回root logger
    logger = logging.getLogger("AppName")
    # 指定logger输出格式
    formatter = logging.Formatter('%(asctime)s %(levelname)-8s: %(message)s')
    # 文件日志
    file_handler = logging.FileHandler("test.log")
    file_handler.setFormatter(formatter) # 可以通过setFormatter指定输出格式
    # 控制台日志
    console_handler = logging.StreamHandler(sys.stdout)
    console_handler.formatter = formatter # 也可以直接给formatter赋值
    # 为logger添加的日志处理器,可以自定义日志处理器让其输出到其他地方
    logger.addHandler(file_handler)
    logger.addHandler(console_handler)
    # 指定日志的最低输出级别,默认为WARN级别
    logger.setLevel(logging.INFO)
    # 输出不同级别的log
    logger.debug('this is debug info')
    logger.info('this is information')
    logger.warn('this is warning message')
    logger.error('this is error message')
    logger.fatal('this is fatal message, it is same as logger.critical')
    logger.critical('this is critical message')
    # 2016-10-08 21:59:19,493 INFO : this is information
    # 2016-10-08 21:59:19,493 WARNING : this is warning message
    # 2016-10-08 21:59:19,493 ERROR : this is error message
    # 2016-10-08 21:59:19,493 CRITICAL: this is fatal message, it is same as logger.critical
    # 2016-10-08 21:59:19,493 CRITICAL: this is critical message
    # 移除一些日志处理器
    logger.removeHandler(file_handler)
  • 相关阅读:
    建造者模式
    js日期转化(计算一周的日期)
    vue实现全选效果
    less入门
    使用node初始化项目
    ES5新语法forEach和map及封装原理
    es6中的promise对象
    深入理解jsonp跨域请求原理
    markdown语法与使用
    Ajax商品分类三级联动实现
  • 原文地址:https://www.cnblogs.com/Lee-yl/p/11363890.html
Copyright © 2011-2022 走看看