日志相关概念:追踪软件运行时所发生事件的方法 日志的作用:1:程序调试 2:了解软件程序运行情况,是否正常 3:软件程序运行故障分析与问题定位 日志等级及内容 DEBUG INFO NOTICE WARNING ERROR CRITICAL ALERT EMEERGENCY logging模块简介 logging模块定义的函数和类为应用程序和库的开发实现了一个灵活的事件日志系统。logging模块是Python的一个标准库模块,由标准库模块提供日志记录API的关键好处是所有Python模块都可以使用这个日志记录功能。所以,你的应用日志可以将你自己的日志信息与来自第三方模块的信息整合起来。 1. logging模块的日志级别 logging模块默认定义了以下几个日志等级,它允许开发人员自定义其他日志级别,但是这是不被推荐的,尤其是在开发供别人使用的库时,因为这会导致日志级别的混乱。 日志等级(level) 描述 DEBUG 最详细的日志信息,典型应用场景是 问题诊断 INFO 信息详细程度仅次于DEBUG,通常只记录关键节点信息,用于确认一切都是按照我们预期的那样进行工作 WARNING 当某些不期望的事情发生时记录的信息(如,磁盘可用空间较低),但是此时应用程序还是正常运行的 ERROR 由于一个更严重的问题导致某些功能不能正常运行时记录的信息 CRITICAL 当发生严重错误,导致应用程序不能继续运行时记录的信息 开发应用程序或部署开发环境时,可以使用DEBUG或INFO级别的日志获取尽可能详细的日志信息来进行开发或部署调试;应用上线或部署生产环境时,应该使用WARNING或ERROR或CRITICAL级别的日志来降低机器的I/O压力和提高获取错误日志信息的效率。日志级别的指定通常都是在应用程序的配置文件中进行指定的。 说明: 上面列表中的日志等级是从上到下依次升高的,即:DEBUG < INFO < WARNING < ERROR < CRITICAL,而日志的信息量是依次减少的; 当为某个应用程序指定一个日志级别后,应用程序会记录所有日志级别大于或等于指定日志级别的日志信息,而不是仅仅记录指定级别的日志信息,nginx、php等应用程序以及这里要提高的python的logging模块都是这样的。同样,logging模块也可以指定日志记录器的日志级别,只有级别大于或等于该指定日志级别的日志记录才会被输出,小于该等级的日志记录将会被丢弃。 2. logging模块的使用方式介绍 logging模块提供了两种记录日志的方式: 第一种方式是使用logging提供的模块级别的函数 第二种方式是使用Logging日志系统的四大组件 其实,logging所提供的模块级别的日志记录函数也是对logging日志系统相关类的封装而已。 logging模块定义的模块级别的常用函数 函数 说明 logging.debug(msg, *args, **kwargs) 创建一条严重级别为DEBUG的日志记录 logging.info(msg, *args, **kwargs) 创建一条严重级别为INFO的日志记录 logging.warning(msg, *args, **kwargs) 创建一条严重级别为WARNING的日志记录 logging.error(msg, *args, **kwargs) 创建一条严重级别为ERROR的日志记录 logging.critical(msg, *args, **kwargs) 创建一条严重级别为CRITICAL的日志记录 logging.log(level, *args, **kwargs) 创建一条严重级别为level的日志记录 logging.basicConfig(**kwargs) 对root logger进行一次性配置 其中logging.basicConfig(**kwargs)函数用于指定“要记录的日志级别”、“日志格式”、“日志输出位置”、“日志文件的打开模式”等信息,其他几个都是用于记录各个级别日志的函数。 logging模块的四大组件 组件 说明 loggers 提供应用程序代码直接使用的接口 handlers 用于将日志记录发送到指定的目的位置 filters 提供更细粒度的日志过滤功能,用于决定哪些日志记录将会被输出(其它的日志记录将会被忽略) formatters 用于控制日志信息的最终输出格式 说明: logging模块提供的模块级别的那些函数实际上也是通过这几个组件的相关实现类来记录日志的,只是在创建这些类的实例时设置了一些默认值。 三、使用logging提供的模块级别的函数记录日志 回顾下前面提到的几个重要信息: 可以通过logging模块定义的模块级别的方法去完成简单的日志记录 只有级别大于或等于日志记录器指定级别的日志记录才会被输出,小于该级别的日志记录将会被丢弃。 1.最简单的日志输出 先来试着分别输出一条不同日志级别的日志记录: import logging logging.debug("This is a debug log.") logging.info("This is a info log.") logging.warning("This is a warning log.") logging.error("This is a error log.") logging.critical("This is a critical log.") 也可以这样写: logging.log(logging.DEBUG, "This is a debug log.") logging.log(logging.INFO, "This is a info log.") logging.log(logging.WARNING, "This is a warning log.") logging.log(logging.ERROR, "This is a error log.") logging.log(logging.CRITICAL, "This is a critical log.") 输出结果: WARNING:root:This is a warning log. ERROR:root:This is a error log. CRITICAL:root:This is a critical log. import logging log_format='%(asctime)s-%(levelname)s-%(message)s' DATE_FORMAT = "%m/%d/%Y %H:%M:%S %p" logging.basicConfig(level=logging.DEBUG, fllname='ey.log', format=log_format, datefmt=DATE_FORMAT) logging.debug('this is a debug') logging.info('this is a info') logging.warning('this is a warning') logging.error('this is a error') logging.critical('this is a critical') logging.log(logging.DEBUG('this is a debug')) logging.log(logging.INFO('this is a info')) logging.log(logging.WARNING('this is a warning')) logging.log(logging.ERROR('this is a error')) logging.log(logging.CRITICAL('this is a critical'))
日志
最新推荐文章于 2024-07-25 19:24:50 发布
