python专题logging模块

一 前言

本篇内容是logging日志配置基础篇,学完本篇,读者将会理解日志,使用日志,自定义配置日志;

公众号:知识追寻者

知识追寻者(Inheriting the spirit of open source, Spreading technology knowledge;)

二 日志

2.1 日志级别

日志级别从高到低顺序(50-10) :critical --> error --> warning --> info --> debug ;

日志级别越高,打印信息越少;

  1. debug 最详细的日志信息,经常用于开发调试 阶段
  2. info 打印关键信息;
  3. warning 警告信息,提示产生不期望的异常信息
  4. error 错误信息,异常信息;
  5. critical 严重错误信息,会导致程序无法运行;

2.2 日志函数

日志模块函数如下

  1. logging.debug(msg, *args, kwargs) debug级别日志
  2. logging.info(msg, *args, kwargs) info级别日志
  3. logging.warning(msg, *args, kwargs) warning级别日志
  4. logging.error(msg, *args, **kwargs) error级别日志
  5. logging.critical(msg, *args, kwargs) critical级别日志
  6. logging.log(level, *args, **kwargs) 指定级别日志
  7. logging.basicConfig(**kwargs) 一次性配置日志

常用参数如下

  • filename 输出文件日志
  • filemode 文件模式, r , a , w
  • format 日志输出的格式
  • datefat 默认日期格式
  • level 设置日志输出级别

format大体参数如下

  • %(levelno)s 打印日志级别的数值
  • %(levelname)s 打印日志级别名称
  • %(pathname)s 打印当前执行程序的路径
  • %(filename)s 打印当前执行程序名称
  • %(funcName)s 打印日志的当前函数
  • %(lineno)d 打印日志的当前行号
  • %(asctime)s 打印日志的时间
  • %(thread)d 打印线程 ID
  • %(threadName)s 打印线程名称
  • %(process)d 打印进程 ID
  • %(message)s 打印日志信息
  • %(module)s:打印模块名称

简单日志示例如下,无法满足生产需求,最终还是需要自定义日志;

import logging

logging.basicConfig(filename="test.log", filemode="w", format="%(asctime)s %(name)s:%(levelname)s:%(message)s", datefmt="%d-%m-%Y %H:%M:%S", level=logging.DEBUG)
logging.debug('debug message')
logging.info('info message')
logging.warning('warning message')
logging.error('error message')
logging.critical('critical message')

输出至test.log文件内容

29-04-2020 17:34:44 root:DEBUG:debug message
29-04-2020 17:34:44 root:INFO:info message
29-04-2020 17:34:44 root:WARNING:warning message
29-04-2020 17:34:44 root:ERROR:error message
29-04-2020 17:34:44 root:CRITICAL:critical message

2.3 自定义Logger

logger组件如下

  1. 日志器 (Logger) 配置和发送日志消息;
  2. 处理器( Handler ) 日志的输出地方;一个日志器可以拥有多个处理器;
  3. 过滤器 (Filter) 过滤筛选日志,是否丢弃日志;
  4. 格式器( Formatter) 日志的输出格式

常用的 Handler

  • logging.StreamHandler:日志输出到流,如sys.stderr,sys.stdout 或者文件;
  • logging.FileHandler:日志输出到文件。
  • logging.handlers.TimeRotatingHandler:在一定时间区域内回滚日志文件。
  • logging.handlers.SMTPHandler;远程输出日志到邮件地址。
  • logging.handlers.SocketHandler;远程输出日志到TCP/IP sockets。
  • logging.handlers.HTTPHandler;通过”GET”或者”POST”远程输出到HTTP服务器。

示例如下

import logging
import sys

# 取名为 zszsz 的日志器
logger = logging.getLogger("zszsz")
logger.setLevel(level=logging.DEBUG)
# 设置日志格式
formatter = logging.Formatter(fmt='%(asctime)s - %(name)s - %(levelname)s - %(message)s',datefmt="%d-%m-%Y %H:%M:%S")
""" 处理器1 """
# 输出到控制台
stream_handler = logging.StreamHandler(sys.stdout)
# 设置日志级别
stream_handler.setLevel(level=logging.DEBUG)
# 添加日志格式
stream_handler.setFormatter(formatter)
# 添加处理器
logger.addHandler(stream_handler)
""" 处理器2 """
# 输出到文件
file_handler = logging.FileHandler('zszsz.log')
# 设置日志级别
file_handler.setLevel(level=logging.INFO)
# 添加日志格式
file_handler.setFormatter(formatter)
# 添加处理器
logger.addHandler(file_handler)

# 日志
logger.debug('-------------知识追寻者!!!')
logger.info('-------------info级别!!!')

控制台输出

07-05-2020 10:59:27 - zszsz - DEBUG - -------------知识追寻者!!!
07-05-2020 10:59:27 - zszsz - INFO - -------------info级别!!!

文件输出

07-05-2020 10:59:27 - zszsz - INFO - -------------info级别!!!

2.4 日志配置

logging.conf 配置示例如下,根据自定义Logger的逻辑进行配置理解;

[loggers]
keys=root,simpleExample

[handlers]
keys=consoleHandler

[formatters]
keys=simpleFormatter

[logger_root]
level=DEBUG
handlers=consoleHandler

[logger_simpleExample]
level=DEBUG
handlers=consoleHandler
qualname=simpleExample
propagate=0

[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=simpleFormatter
args=(sys.stdout,)

[formatter_simpleFormatter]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
datefmt=

调用示例

# -*- encoding:utf-8 -*-

import logging
from logging import config

# 获取配置
config.fileConfig(fname='logging.conf', disable_existing_loggers=False)
logger = logging.getLogger('simpleExample')
logger.debug('debug message')
logger.info('info message')
logger.error('error message')
logger.critical('critical message')

输出

2020-05-07 13:28:26,391 - simpleExample - DEBUG - debug message
2020-05-07 13:28:26,391 - simpleExample - INFO - info message
2020-05-07 13:28:26,391 - simpleExample - ERROR - error message
2020-05-07 13:28:26,391 - simpleExample - CRITICAL - critical message

更多内容参考官网

https://docs.python.org/3.3/howto/logging.html#configuring-logging

posted @ 2020-05-08 21:00  知识追寻者  阅读(202)  评论(0编辑  收藏  举报