• 【python】logging模块


    一、简单的将日志打印到屏幕

    >>> import logging
    >>> logging.debug("This is debug message")
    >>> logging.info("This is info message")
    >>> logging.warning("This is warning message")
    WARNING:root:This is warning message
    >>> logging.error("This is error message")
    ERROR:root:This is error message
    >>> logging.critical("This is critical message")
    CRITICAL:root:This is critical message

    日志级别大小关系为:CRITICAL > ERROR > WARNING > INFO > DEBUG > NOTSET,当然也可以自己定义日志级别。

    二、logging的几种handle方式

    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服务器

    由于StreamHandler和FileHandler是常用的日志处理方式,所以直接包含在logging模块中,而其他方式则包含在logging.handlers模块中。

    三、Configuration 配置方法

    1.通过getLogger方法实现

    # -*- coding: UTF-8 -*-
    import logging
    import sys

    # 获取logger实例,如果参数为空则返回root logger
    #logger = logging.getLogger("AppName")
    logger=logging.getLogger()

    # 指定logger输出格式
    formatter = logging.Formatter('%(asctime)s %(levelname)-8s: %(message)s')

    # 文件日志
    file_handler = logging.FileHandler(r"D:2016MonkeyHappypractice est.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.DEBUG)

    # 输出不同级别的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')

    print '-'*60
    # 格式化输出
    service_name = "Booking"
    logger.error('%s service is down!' % service_name) # 使用python自带的字符串格式化,不推荐
    logger.error('%s service is down!', service_name) # 使用logger的格式化,推荐
    logger.error('%s service is %s!', service_name, 'down') # 多参数格式化
    logger.error('{} service is {}!'.format(service_name, 'down')) # 使用format函数,推荐

    print '-'*60
    # 记录异常信息
    try:
    1 / 0
    except:
    # 等同于error级别,但是会额外记录当前抛出的异常堆栈信息
    logger.exception('this is an exception message')

    # 移除一些日志处理器
    logger.removeHandler(file_handler)

    2.通过basicConfig方法实现

    # -*- coding: UTF-8 -*-
    import logging

    #basicConfig配置
    logging.basicConfig(filename=r"D:2016MonkeyHappypracticeexample.log",level=logging.DEBUG)
    logging.debug('This message should go to the log file')

    logging.basicConfig(format='%(levelname)s:%(message)s', level=logging.DEBUG)
    logging.debug('This message should appear on the console')

    logging.basicConfig(format='%(asctime)s %(message)s', datefmt='%m/%d/%Y %I:%M:%S %p')
    logging.warning('is when this event was logged.')

    3.通过 logging.config.fileConfig(filepath)

  • 相关阅读:
    ssh2整合velocity出现Unable to find resource
    struts2之PreResultListener(转)
    Struts2源码浅析-请求处理(转)
    大型WEB网站架构深入分析
    大型网站技术架构探讨
    网易大型应用架构与实践
    二叉树及各种二叉树的应用
    centOS上安装MySQL5.7
    Caused by: java.lang.NoClassDefFoundError: Could not initialize class org.elasticsearch.threadpool.ThreadPool
    elasticsearch的插件安装
  • 原文地址:https://www.cnblogs.com/skyer/p/5629749.html
Copyright © 2020-2023  润新知