• logging模块详解以及常见代码


    1.在django中获取客户端IP地址:

    if 'HTTP_X_FORWARDED_FOR' in request.META:
    	ip = request.META['HTTP_X_FORWARDED_FOR']
    else:
    	ip = request.META['REMOTE_ADDR']
    

    2.logging模块日志级别:

    DEBUG:最详细的日志信息,典型应用场景是问题诊断;
    INFO:信息详细程度仅次于DEBUG,通常只记录关键节点信息;
    WARNING:当某些不期望的事情发生时记录的信息,
    如:磁盘可用空间较低,但是此时应用程序还是正常运行的;
    ERROR:由于一个更严重的问题导致某些功能不能正常运行时记录的信息;
    CRITICAL:当发生严重错误,导致应用程序不能继续运行时记录的信息.
    应用上线或部署生产环境时,应该使用WARNING或ERROR或CRITICAL级别的
    日志来降低机器的I/O压力和提高获取错误日志信息的效率.
    

    3.logging模块提供了两种记录日志的方式:

    第一种方式是使用logging提供的模块级别的函数;

    第二种方式是使用Logging日志系统的四大组件.

    4.模块级别的常见代码:

    import logging
    LOG_FORMAT = "%(asctime)s %(levelname)s %(pathname)s %(message)s "#配置输出日志格式
    DATE_FORMAT = '%Y-%m-%d  %H:%M:%S %a ' #配置输出时间的格式,注意月份和天数不要搞乱了
    logging.basicConfig(level=logging.DEBUG,
                        format=LOG_FORMAT,
                        datefmt = DATE_FORMAT ,
                        filename=r"d:	est	est.log"
                        )
    logging.debug("msg1")
    logging.info("msg2")
    logging.warning("msg3")
    logging.error("msg4")
    logging.critical("msg5")
    

    5.日志流处理--常见代码:

    def set_log(level, filename='minic_down.log',filedir='/data/update/'):
        log_file = os.path.join(filedir, filename)
    
        if not os.path.isdir(filedir):
            os.makedirs(filedir)
        if not os.path.isfile(log_file):
            os.mknod(log_file)
    
        log_level_total = {'debug': logging.DEBUG, 'info': logging.INFO, 'warning': logging.WARN, 'error': logging.ERROR,
                           'critical': logging.CRITICAL}
        logger_f = logging.getLogger()
        logger_f.setLevel(logging.DEBUG)
        
    	fh = logging.FileHandler(log_file)
        fh.setLevel(log_level_total.get(level, logging.DEBUG))
        formatter = logging.Formatter('%(asctime)s - %(filename)s - %(levelname)s - %(message)s')
        fh.setFormatter(formatter)
        
    	logger_f.addHandler(fh)
        return logger_f
    
    # 日志记录器
    logger = set_log('debug')
    

    6.说明

    Logger类:

    1.向应用程序代码暴露几个方法,使应用程序可以在运行时记录日志消息;
    2.将日志消息传送给所有感兴趣的日志handlers.
    我们通常用logging.getLogger()方法创建一个Logger类的实例,
    有一个可选参数name,该参数表示将要返回的日志器的名称标识,
    如果不提供该参数,则其值为'root'.
    注意不能创建多个logger,否则会出现重复输出日志现象,
    Logger.setLevel():设置日志器处理日志消息的最低严重级.
    

    Handler类:

    Handler对象的作用是(基于日志消息的level)将消息分发到handler指定的位置(文件、网络、邮件等).
    Logger对象可以通过addHandler()方法为自己添加0个或者更多个handler对象.
    比如一个应用程序可能想要实现以下几个日志需求:
    1.把所有日志都发送到一个日志文件中;
    2.把所有严重级别大于等于error的日志发送到stdout(标准输出);
    3.把所有严重级别为critical的日志发送到一个email邮件地址.这种场景就需要3个不同的handlers,
    每个handler负责发送一个特定级别的日志到一个特定的位置.
    Handler.setLevel():指定被处理的信息级别,低于lel级别的信息将被忽略;
    Handler.setFormatter():给这个handler选择一个格式.
    logging.StreamHandler--将日志消息发送到输出到Stream
    logging.FileHandler--将日志消息发送到磁盘文件
    

    7.日志流处理简要流程:

    1.创建一个logger
    2.设置下logger的日志的等级
    3.创建合适的Handler(FileHandler要有路径)
    4.设置下每个Handler的日志等级
    5.创建下日志的格式
    6.向Handler中添加上面创建的格式
    7.将上面创建的Handler添加到logger中
    8.打印输出logger.warninglogger.errorlogger.critical
    如果出现重复写日志,则使用前先判断是否有相同的handler对象
    如果logger.handlers列表为空,则添加;否则,直接去写日志
    def my_logger(logger_name):
        logger = logging.getLogger(logger_name)
        logger.setLevel(logging.INFO)
        if not logger.handlers:
    		fh = logging.FileHandler('hehe.log')
    		formatter = logging.Formatter(
    			'%(asctime)s - %(name)s - %(levelname)s - %(message)s ')
    		fh.setFormatter(formatter)
    
    		logger.addHandler(fh)
    
        return logger
    

    8.捕获 Traceback

    try:
        result = 10 / 0
    except Exception:
        logger.error('Faild to get result', exc_info=True)
    logger.info('Finished')
    

    参考地址:https://cuiqingcai.com/6080.html

    参考地址:https://www.cnblogs.com/liujiacai/p/7804848.html

    参考地址:https://www.cnblogs.com/Nicholas0707/p/9021672.html

  • 相关阅读:
    Sql 三元运算符
    连表更新
    SQL分组排序去重复
    ASP日常出错原因
    Box2D的三种Body类型
    Android获取屏幕尺寸的方法
    AndEngine之ScreenCapture
    AndEngine之IUpdateHandler,IEntityModifier
    JAVA中线程安全的类
    AndEngine引擎之SmoothCamera 平滑摄像机
  • 原文地址:https://www.cnblogs.com/fawaikuangtu123/p/9970036.html
Copyright © 2020-2023  润新知