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

    Logging模块

    用于记录程序运行时的日志

    1.logging模块的用法

      简单的输出到屏幕

    import logging
    
    logging.warning("user attempted wrong password more than 3 times")
    logging.critical("server is down")
    输出:
    WARNING:root:user attempted wrong password more than 3 times
    CRITICAL:root:server is down

      简单写到文件

    import logging
    
    logging.basicConfig(filename='example.log', level=logging.INFO)
    # level = loggin.INFO意思是,把日志纪录级别设置为INFO,比IFNO日志更高的级别才写入日子文件
    logging.debug('This message should go to the log file')  # debug的日志就不会写入
    logging.info('So should this')
    logging.warning('And this, too')

                       注意:level的等级设置为logging.INFO。debug的日志不会写入文件。

           自定义格式

    # 自定义日志格式
    
    logging.basicConfig(filename='log_test.log',
                        level=logging.DEBUG,
                        format='%(asctime)s %(message)s',
                        datefmt='%m/%d/%Y %I:%M:%S %p')
    logging.warning('is when this event was logged.')
    # %(name)s     Logger的名字
    # %(levelno)s     数字形式的日志级别
    # %(levelname)s     文本形式的日志级别
    # %(pathname)s     调用日志输出函数的模块的完整路径名,可能没有
    # %(filename)s     调用日志输出函数的模块的文件名
    # %(module)s     调用日志输出函数的模块名
    # %(funcName)s     调用日志输出函数的函数名
    # %(lineno)d     调用日志输出函数的语句所在的代码行
    # %(created)f     当前时间,用UNIX标准的表示时间的浮 点数表示
    # %(relativeCreated)d     输出日志信息时的,自Logger创建以 来的毫秒数
    # %(asctime)s     字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒
    # %(thread)d     线程ID。可能没有
    # %(threadName)s     线程名。可能没有
    # %(process)d     进程ID。可能没有
    # %(message)s     用户输出的消息

    2.日志同时输出到屏幕和文件

    操作流程

    # 1.生成logger对象
    # 2.生成handler对象
    #   2.1.绑定logger和handler对象
    # 3.生成formatter对象
    #   3.1 把formatter对象绑定到handler对象
    # 4.如果不设置logger级别,那么默认级别是error ,所以err时才会输出到屏幕和界面
    # 5.添加日志过滤功能
    # 1.生成logger对象
    logger = logging.getLogger('web')
    # 4.设置日志级别(不设置默认级别为error)
    logger.setLevel(logging.INFO)
    # 2.生成handler对象
    ch = logging.StreamHandler()  # 生成输出屏幕对象
    fh = logging.FileHandler('web.log')  # 生成输出文件对象
    
    # 3.生成formatter对象
    #   3.1 把formatter对象绑定到handler对象
    
    file_format = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')  # 指定输出文件格式
    con_format = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s -%(lineno)d -%(message)s')  # 指定输出屏幕格式
    
    fh.setFormatter(file_format)  # 设置输出文件格式
    ch.setFormatter(con_format)  # 设置输出console格式
    
    logger.addHandler(ch)
    logger.addHandler(fh)
    
    
    # 5.添加日志过滤功能类
    class IgnoreBackupLogFilter(logging.Filter):
        """忽略带db backup 的日志"""
        def filter(self, record):  # 固定写法
            return "db backup" not in record.getMessage()
    
    # 把信息写入日志
    
    
    # 添加日志过滤功能
    logger.addFilter(IgnoreBackupLogFilter())
    
    logger.debug("test ....")
    logger.info("test info ....")
    logger.warning("start to run db backup job ....")  # 只有这条不写入日志
    logger.error("test error ....")

    3.文件截断功能

      当文件越来越大,则需要进行文件截断

    # 文件截断功能
    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")
  • 相关阅读:
    如何在项目中添加Log4net_web.config
    数据库语法集合
    在asp.net 中web.config配置错误页
    【AngularJs】---JSONP跨域访问数据传输(JSON_CALLBACK)
    菜鸟教程下笔记借鉴
    AngularJs ng-repeat重复项异常解决方案
    AngularJS
    基于node安装gulp-一些命令
    理解Flexbox:你需要知道的一切
    深入理解 flex 布局以及计算_Flexbox, Layout
  • 原文地址:https://www.cnblogs.com/AYxing/p/8699026.html
Copyright © 2011-2022 走看看