欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python Logging模块学习笔记

程序员文章站 2022-07-15 15:45:59
...

#Logging模块

1.日志相关概念

.日志

.日志级别level:

-不同的用户关注不同的程序信息

从低到高

  1. -DEBUG
  2. -INFO
  3. -NOTICE
  4. -WARNING警告
  5. -ERROE错误
  6. -CRITICAL
  7. -ALERT警告
  8. -EMERGENCY

-IO操作=>不要频繁操作

-LOG的作用

  1. -调试
  2. -了解软件运行状况
  3. -分析定位问题

-日志信息

  1. -time
  2. -where
  3. -level
  4. -content

.成熟的第三方

  • -log4j
  • -log4php
  • -Logging

.log级别

  1. -级别可自定义
  2. -DEBUG
  3. -INFO
  4. -NOTICE
  5. -WARNING警告
  6. -ERROE错误
  7. -CRITICAL
  8. -ALERT警告
  9. -EMERGENCY

.初始化/写日志实例需要指定级别,只有级别高于或等于某个级别才被记录

.使用方式

  1. -直接使用logging模块
  2. -logging四大组件
  3. .logging模块级别的日志

-使用以下几个函数

  • logging.debug(msg,*args,**kwargs) 创建一条严重级别为DEBUFG的日志记录
  • logging.info(msg,*args,**kwargs) 创建一条严重级别为INFO的日志记录
  • logging.warning(msg,*args,**kwargs) 创建一条严重级别为WARNING的日志记录
  • logging.critical(msg,*args,**kwargs) 创建一条严重级别为CRITICAL的日志记录
  • logging.log(msg,*args,**kwargs) 创建一条严重级别为LOG的日志记录
  • logging.ibasicConfig(msg,*args,**kwargs) 对root logger进行一次性配置

logging.ibasicConfig(msg,*args,**kwargs) 对root logger进行一次性配置

  • -只在第一次调用起作用
  • -不配置logger则使用默认值:
  1. -输出:sys.stderr
  2. -级别:WARNING
  3. -格式:level:log_NAMEE:content

 

import loggging
logging.debug("thies 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")

 

 

 

结果:只显示WARNING,ERROR,CRITICAL

 

加上:logging.ibasicConfig(filename="output.log",level=logging.DEBUG)

结果:都能输出到output.log文件中

可以自定义输出格式:LOG_FORMAT="%(asctime)s===%(levelname)s+++%(message)s"

  1. asctime %(asctime)s 日志发生的时间(可读时间)
  2. created %(created)f 日志发生的时间(时间戳)
  3. relativeCreated %(relativeCreated)d 相对logging模块加载时间
  4. msecs %(msecs)d 日志发生的毫秒部分
  5. levelname %(levelname)s 日志级别名
  6. levelno %(levelno)s 数字级别
  7. name %(name)s 所使用的日志器名称
  8. message %(message)s 日志记录的文本内容
  9. pathname %(pathname)s 调用日志源文件路径
  10. filename %(filename)s 文件名,包含后缀
  11. module %(module)s filename的名称,不包含后缀
  12. lineno %(lineo)s 调用日志行号
  13. funcName %(funcName)s filename名称部分,包含文件后缀
  14. process %(process)d 进程ID
  15. processnName %(processName)s 进程名称
  16. thread %(thread)d 线程ID
  17. threadName %(threadName)s 线程名称

 

logging模块处理的流程

-四大组件

  1. -日志器(logger):产生日志的一个接口
  2. -处理器(handler):把产生的日志发送到相应的目的地
  3. -过滤器(Filter):更精细的控制那些日志输出
  4. -格式器(Formatter):对输出信息进行格式化

 

-logger

  • -产生一个日志
  • -操作:

  1. Logger.setLevel()设置日志器处理的日志信息的最低消息严重级别
  2. Logger.addHandler()和Logger.removeHandler() 为该对象添加/移除一个处理器
  3. Logger.addFilter()和Logger.removeFilter() 为该Loggger对象添加/移除一个过滤器
  4. Logger.debug():产生一个DEBUG级别的日志

.....

  • -如何得到一个Logger:
  1. 实例化
  2. Logging.getLogger()

-handler

  • -把Log发送到指定位置
  • -方法:
  1. setLevel
  2. setFormat
  3. addFilter,removeFilter
  • -不需要直接使用,Handler是基类
  • logging.StreamHandler 将日志发送到Stream
  • logging.FileHandler 将日志发送到磁盘文件
  • logging.handlers.RotatingFileHandler
  • logging.handlers.HTTPhandler发送给一个HTTP服务器(Get/Post)
  • logging.NullHandler

-Format类

  • -直接实例化
  • -可以继承Format添加特殊内容
  • -三个参数
  1. fmt:指定消息格式化字符串
  2. datefmt:指定日期格式字符串
  3. style

Filter类

  • -可控制被Handler和logger使用
  • -控制传递过来的消息具体内容

实例

import logging
import logging.handlers
import datetime
#定义logger
logger=logging.getLogger("mylogger")
logger.setLevel(logging.DEBUG)
#为两个不同的文件设置不同的handler
rg_handler=logging.handlers.TimedRotatingFileHandler("all.log",when='midnight',interval=1,backupCount=7,atTime=1)
rf_handler.setFormat(logging.Formatter("%(asctime)s===%(levelname)s+++%(message)s")

f_handler=logging.FileHandler('error.log')
f_handler.setLevel(logging.ERROR)
f_handler.setFormatter("%(asctime)s===%(levelname)s+++%(message)s")
#把相应的处理器组装到logger
logger.addHandler(rf_handler)
logger.addHandler(f_handler)

logger.debug('debug message')
logger.info('info message')
logger.warning('warning message')
logging.error('error message')
logging.critical('critical message')

 

相关标签: logging