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

    1. 打印日志到屏幕

    import logging
    
    logging.info(' infog....')
    logging.debug('debug.....')
    logging.warning('warn...')
    
    打印结果:
    WARNING:root:warn...

    默认情况下,logging将日志打印到屏幕,日志级别为WARNING;

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

    2. 通过logging.basicConfig()函数对日志的输出格式及方式做相关配置

    import logging
    
    logging.basicConfig(level=logging.DEBUG,
                        format='%(asctime)s %(filename)s %(levelname)s %(message)s',
                        datefmt='%Y%-%m-%d %H:%M:%S',
                        filename='2017-12-18.log',
                        filemode='w'
                        )
    logging.warning('this is warning .....')
    logging.debug('this is debug.....')
    logging.info('this is info ....')

    各个参数解释:

    level:设置日志级别,默认是logging.warning

    format:指定输出的格式和内容,打印以下信息:

      %(asctime)s:打印日志的时间  ---datefmt

      %(filename)s:打印当前执行程序名 ---- demo.py

      %(levelname)s:打印日志级别名称 --- INFO/DEBUG。。。

      %(message)s: 打印日志信息

    datefmt :指定打印日志的时间格式 xxxx-xx-xx xx:xx:xx, 类似time.strftime( %Y%m%d %H%M%S)

    filename:指定日志文件名

    filemode :指定打开日志文件的格式 w 或 a

    stream: 指定将日志的输出流,可以指定输出到sys.stderr,sys.stdout或者文件,默认输出到sys.stderr,当stream和filename同时指定时,stream被忽略

    运行结果:

    2017-12-19 15:18:52 demo.py WARNING this is warning .....
    2017-12-19 15:18:52 demo.py DEBUG this is debug.....
    2017-12-19 15:18:52 demo.py INFO this is info ....

    简单举例:

    """
    主要是打印日志时间、日志级别、日志信息
    """
    import logging
    import sys
    import os
    import time
    from until.file_system import get_log_dir
    from until.config_parser import ConfigParser
    """
    打印日志信息
    """
    
    def get_num_level(level):
        level_dict= {
            "CRITICAL": 50,
            "FATAL": 50,
            "ERROR": 40,
            "WARNING": 30,
            "WARN": 30,
            "INFO": 20,
            "DEBUG": 10,
            "NOTSET": 0,
        }
        return level_dict[level.upper()]
    
    """
    打印日志信息
    """
    def print_log(log, level='info'):
        current = time.strftime('%Y-%m-%d', time.localtime(time.time()))
        formatter = logging.Formatter('%(asctime)s - %(levelname)-5s - %(message)s')
        logger = logging.getLogger('MEMPium')
        logger.setLevel(logging.DEBUG)
    
        log_path = get_log_dir()  # 获取日志所在目录
        if "FileHandler" not in str(logger.handlers):
            fh = logging.FileHandler(
                log_path + os.sep + "%s.log" % current,
                encoding="UTF-8"
            )
            fh.setLevel(int(ConfigParser().get_config("logging", "level")))   #获取配置文件 logging配置下 level的级别
            fh.setFormatter(formatter)
            logger.addHandler(fh)
        if "StreamHandler" not in str(logger.handlers):
            ch = logging.StreamHandler(sys.stdout)
            ch.setLevel(logging.DEBUG)
            ch.setFormatter(formatter)
            logger.addHandler(ch)
        logger.log(get_num_level(level), log)
    
    
    if __name__ == '__main__':
        res = print_log('hahah', 'error')

    后续补充~~~~

    参考链接:

    https://www.cnblogs.com/dkblog/archive/2011/08/26/2155018.html

  • 相关阅读:
    还是不能偷懒ForEach陷阱
    备忘ForEach方法与foreach迭代器使用小区别
    备忘反射调用Private方法
    机器人也会梦见电子羊吗
    Windows 7 下Skype最小化到系统托盘
    编译Boost_1_37_0 For VS2008
    使用API判断网络是否连通(InternetGetConnectedState / IsNetworkAlive)
    SVN中“txncurrentlock:拒绝访问”错误
    幂函数的非递归算法
    Visual Studio中的文件类型(sln vcproj suo user ncb)
  • 原文地址:https://www.cnblogs.com/lhly/p/8060196.html
Copyright © 2011-2022 走看看