当前位置:   article > 正文

Python 日志详解(logging)_python中日志的作用

python中日志的作用

1 概述

1.1 作用

  • 日志:记录程序运行情况,方便快速定位问题

1.2 日志的6个级别

级别数值描述举例
1NOTEST-
2DEBUG10调试函数调用、变量值
3INFO20一般信息程序入参、执行结果
4WARNING30警告磁盘空间不足、网络连接中断
5ERROR40错误函数调用失败、异常
6CRITICAL50严重错误程序崩溃

日志数值越高,日志的级别越高。
日志级别从低到高依次为: NOTSET < DEBUG < INFO < WARNING < ERROR < CRITICAL

1.3 logging:打印日志

import logging

logging.debug('debug')
logging.info('info')
logging.warning('warning')
logging.error('error')
logging.critical('critical')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

执行结果:(默认输出 WARNING 及以上的日志)

在这里插入图片描述

结果说明:

  • 默认日志级别 warning:在默认情况下,只打印 warning 级别及以上的日志,低于该级别以下的日志信息将会被忽略
  • 日志级别修改:可通过 logging.basiConfig 进行调整(下面有介绍)
  • root:日志记录器的名称,会随文件位置的改变而改变

1.4 logging.basicConfig:基础设置

import logging

logging.basicConfig(
    level=logging.DEBUG,
    format='%(asctime)s %(name)s [%(pathname)s line:%(lineno)d] %(levelname)s %(message)s',
    datefmt='%Y-%m-%d %H:%M:%S',
    filename='demo.log',
    filemode='w')

logging.debug('debug')
logging.info('info')
logging.warning('warning')
logging.error('error')
logging.critical('critical')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

执行结果(demo.log)文件:

2024-01-12 21:24:36 root [E:/01 Python 项目/Demo/D01.py line:10] DEBUG debug
2024-01-12 21:24:36 root [E:/01 Python 项目/Demo/D01.py line:11] INFO info
2024-01-12 21:24:36 root [E:/01 Python 项目/Demo/D01.py line:12] WARNING warning
2024-01-12 21:24:36 root [E:/01 Python 项目/Demo/D01.py line:13] ERROR error
2024-01-12 21:24:36 root [E:/01 Python 项目/Demo/D01.py line:14] CRITICAL critical
  • 1
  • 2
  • 3
  • 4
  • 5

format 中常用参数:

%(name)s      : logger 的名字
%(asctime)s   : 时间
%(filename)s  : 执行文件名
%(message)s   : 日志信息
%(pathname)s  : 执行程序的路径名
%(process)d   : 进程ID
%(thread)d    : 线程ID
%(threadName)s: 线程名称
%(levelno)s   : 日志级别的数值
%(levelname)s : 日志级别的名称
%(lineno)d    : 调用日志的代码所在行
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

2 应用

2.1 logging 四个组成部分

英文名中文名描述
Logger记录器提供程序直接调用的接口,默认名称 root
Handler处理器将记录的日志发送到指定位置(终端 or 文件)
Formatter格式器用于控制日志信息的输出格式
Filter过滤器决定哪些日志被输出

在这里插入图片描述

2.2 组成部分示例

  • 单纯使用 Logger 只能将日志打印到终端 或 文件中
  • 若想同时打印到终端和文件中,则需要用到下列组成部分
import logging

# 1.实例化 logger 对象
logger = logging.getLogger('admin')
logger.setLevel(logging.INFO)

# 2.定义 Handler 对象,常用的有 StreamHandler 和 FileHandler
consoleHandler = logging.StreamHandler()
fileHandler = logging.FileHandler(filename='demo.log')

# 3.定义 Formatter 格式
standardFormatter = logging.Formatter('%(asctime)s %(name)s [%(pathname)s line:%(lineno)d] %(levelname)s %(message)s')
simpleFormatter = logging.Formatter('%(levelname)s %(message)s')

# 4.定义 Filter 过滤器:判断给定字符 与 logger 的名称前缀是否匹配
# 默认全匹配,可选操作
flt = logging.Filter('ad')  # 若匹配则打印

# 5.将 Handler 与 Formatter 绑定、Logger 与 Handler、Filter 绑定
consoleHandler.setFormatter(standardFormatter)
fileHandler.setFormatter(simpleFormatter)

logger.addHandler(consoleHandler)
logger.addHandler(fileHandler)

logger.addFilter(flt)

# 6.打印
logger.debug('debug')
logger.info('info')
logger.warning('warning')
logger.error('error')
logger.critical('critical')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

2.3 配置文件

  • 同样,咱也可以将日志的设置写在配置文件中

logging.conf:

[loggers]
keys=root, logger01  # root 根日志器(必须有)

[handlers]
keys=consoleHandler, fileHandler

[formatters]
keys=standardFormatter, simpleFormatter

[logger_root]
handlers=fileHandler
level=INFO

[logger_logger01]
level=DEBUG
handlers=consoleHandler
qualname=myLogger  # 日志器名(getLogger 时使用)
propagate=0  # 是否将日志信息传播到上级,0=否

[handler_consoleHandler]
class=StreamHandler
args=(sys.stdout,)  # 标准
formatters=standardFormatter

[handler_fileHandler]
level=DEBUG
class=FileHandler
args=('demo.log', 'w')
formatters=simpleFormatter

[formatter_standardFormatter]
format=%(asctime)s %(name)s [%(pathname)s line:%(lineno)d] %(levelname)s %(message)s

[formatter_simpleFormatter]
format=%(levelname)s %(message)s
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

使用时,注意去掉中文注释( configparser 读中文会报错)

xx.py:

import logging.config


# 读取配置文件
logging.config.fileConfig('logging.conf')

# 获取 logger
logger_root = logging.getLogger()
logger_my = logging.getLogger('myLogger')

# 打印 到 文件
logger_root.debug('debug')
logger_root.info('info')
logger_root.warning('warning')
logger_root.error('error')
logger_root.critical('critical')

print('------------------')

# 打印 到 控制台
logger_my.debug('debug')
logger_my.info('info')
logger_my.warning('warning')
logger_my.error('error')
logger_my.critical('critical')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/天景科技苑/article/detail/810452
推荐阅读
相关标签
  

闽ICP备14008679号