• python-- logging 模块


    前戏

    import logging
    
    logging.debug('debug message')  # 调试模式
    logging.info('info message')  # 基础信息
    logging.warning('warning message')  # 警告
    logging.error('error message')  # 错误
    logging.critical('critical message')  # 严重错误

    结果:

    WARNING:root:warning message
    ERROR:root:error message
    CRITICAL:root:critical message
    打印出了warning及以上的信息,python解释器默认的

    设置日志级别

    import logging
    
    logging.basicConfig(level=logging.DEBUG)  # 设置输出的日志级别
    logging.debug('debug message')
    logging.info('info message')
    logging.warning('warning message')
    logging.error('error message')
    logging.critical('critical message')

    结果:

    DEBUG:root:debug message
    INFO:root:info message
    WARNING:root:warning message
    ERROR:root:error message
    CRITICAL:root:critical message

    将日志写到文件

    import logging
    
    logging.basicConfig(filename='exa.log', level=logging.INFO)
    logging.debug('this message should go to the log file')
    logging.info('so should this')
    logging.warning('And this,too')
    这句中的level=loggin.INFO意思是,把日志纪录级别设置为INFO,也就是说,只有比日志是INFO或比INFO级别更高的日志才会被纪录到文件里,在这个例子, 第一条日志是不会被纪录的,如果希望纪录debug的日志,那把日志级别改成DEBUG就行了。

    给日志加上时间

    import logging
    
    logging.basicConfig(filename='exa.log', level=logging.INFO, format='%(asctime)s %(message)s',
                        datefmt='%Y-%m-%d %H:%M:%S %p')
    logging.debug('this message should go to the log file')
    logging.info('so should this')
    logging.warning('And this,too')

    结果

    2020-09-20 22:08:26 PM so should this
    2020-09-20 22:08:26 PM And this,too

    把日志同时打印在屏幕上和写在日志里

    import logging
    
    logger = logging.getLogger('TEST-LOG')
    logger.setLevel(logging.INFO)  # 设置一个全局的日志级别,局部的比全局的级别低时,以全局的为准
    
    ch = logging.StreamHandler()  # 往屏幕上输出日志
    ch.setLevel(logging.DEBUG)  # 屏幕上的日志级别设置为debug
    
    fh = logging.FileHandler("access.log")
    # 往文件里输出日志
    fh.setLevel(logging.WARNING)  # 文件里的日志级别     为warning
    # 定义日志格式,%(name)s是上面定义的这个值
    # %(lineno)d 哪一行打印的日志
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    
    file_formatter = logging.Formatter('%(asctime)s  -%(lineno)d- %(levelname)s - %(message)s')
    
    # 添加formatter到屏幕和文件里
    ch.setFormatter(formatter)
    fh.setFormatter(file_formatter)
    
    # 添加屏幕和文件日志到logger里
    logger.addHandler(ch)
    logger.addHandler(fh)
    
    logger.debug('debug message')
    logger.info('info message')
    logger.warning('warn message')
    logger.error('error message')
    logger.critical('critical message')

    结果:

    屏幕上
    2018-05-19 13:57:22,611 - TEST-LOG - INFO - info message
    2018-05-19 13:57:22,611 - TEST-LOG - WARNING - warn message
    2018-05-19 13:57:22,611 - TEST-LOG - ERROR - error message
    2018-05-19 13:57:22,612 - TEST-LOG - CRITICAL - critical message
    文件access.log里
    2018-05-19 14:03:54,785 -29- WARNING - warn message 2018-05-19 14:03:54,785 -30- ERROR - error message 2018-05-19 14:03:54,785 -31- CRITICAL - critical message

    import logging
    
    # create logger
    logger = logging.getLogger('TEST-LOG')
    logger.setLevel(logging.DEBUG)
    
    # create console handler and set level to debug
    ch = logging.StreamHandler()
    ch.setLevel(logging.DEBUG)
    
    # create file handler and set level to warning
    fh = logging.FileHandler("access.log")
    fh.setLevel(logging.WARNING)
    # create formatter
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    
    # add formatter to ch and fh
    ch.setFormatter(formatter)
    fh.setFormatter(formatter)
    
    # add ch and fh to logger
    logger.addHandler(ch)
    logger.addHandler(fh)
    
    # 'application' code
    logger.debug('debug message')
    logger.info('info message')
    logger.warning('warn message')
    logger.error('error message')
    logger.critical('critical message')

    结果:

    2020-09-20 22:10:41,825 - TEST-LOG - DEBUG - debug message
    2020-09-20 22:10:41,825 - TEST-LOG - INFO - info message
    2020-09-20 22:10:41,825 - TEST-LOG - WARNING - warn message
    2020-09-20 22:10:41,825 - TEST-LOG - ERROR - error message
    2020-09-20 22:10:41,825 - TEST-LOG - CRITICAL - critical message

    创建一个logger对象

    创建一个文件管理操作符

    创建一个屏幕管理操作符

    创建一个日志输出的格式

    文件管理操作符 绑定一个 格式

    屏幕管理操作符 绑定一个 格式

    logger对象 绑定 文件管理操作符

    logger对象 绑定 屏幕管理操作符 

    import logging
    
    # 创建一个logger对象
    logger = logging.getLogger()
    # 创建一个文件管理操作符
    fh = logging.FileHandler('logger.log', encoding='utf-8')
    # 创建一个屏幕管理操作符
    sh = logging.StreamHandler()
    # 创建一个日志输出的格式
    format1 = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    
    # 文件管理操作符 绑定一个 格式
    fh.setFormatter(format1)
    # 屏幕管理操作符 绑定一个 格式
    sh.setFormatter(format1)
    logger.setLevel(logging.DEBUG)
    # logger对象 绑定 文件管理操作符
    # logger.addHandler(fh)
    # logger对象 绑定 屏幕管理操作符
    logger.addHandler(sh)
    logger.debug('debug message')  # 调试模式
    logger.info('我的信息')  # 基础信息
    logger.warning('warning message')  # 警告
    logger.error('error message')  # 错误
    logger.critical('critical message')  # 严重错误

    结果:

    2020-09-20 22:11:36,115 - root - DEBUG - debug message
    2020-09-20 22:11:36,115 - root - INFO - 我的信息
    2020-09-20 22:11:36,115 - root - WARNING - warning message
    2020-09-20 22:11:36,115 - root - ERROR - error message
    2020-09-20 22:11:36,115 - root - CRITICAL - critical message

    import logging
    
    from logging import handlers
    
    logger = logging.getLogger(__name__)
    
    log_file = "timelog.log"
    
    fh = handlers.TimedRotatingFileHandler(filename=log_file, when="S", interval=5, backupCount=3)
    
    formatter = logging.Formatter('%(asctime)s %(module)s:%(lineno)d %(message)s')
    
    fh.setFormatter(formatter)
    
    logger.addHandler(fh)
    
    logger.warning("test1")
    logger.warning("test12")
    logger.warning("test13")
    logger.warning("test14")

    结果:

    2020-09-20 22:13:10,481 tests:17 test1
    2020-09-20 22:13:10,483 tests:18 test12
    2020-09-20 22:13:10,483 tests:19 test13
    2020-09-20 22:13:10,483 tests:20 test14

  • 相关阅读:
    Autofac
    MYSQL存储过程获取记录总数
    MYSQL通用存储过程
    判断用户用手机访问还是用电脑访问网页
    HttpRuntime.Cache与HttpContext.Current.Cache
    Eclipse之NDK编译-- Type 'jint' could not be resolved, and JNIEnv, jclass错误解决办法
    解决Android adjustresize全屏无效问题
    Android手机使用广播监听手机收到的短信
    使用Jackson解析首字母大写的json字符串
    Android Studio中设置提示函数用法
  • 原文地址:https://www.cnblogs.com/zouzou-busy/p/13702638.html
Copyright © 2020-2023  润新知