前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python日志系统logging使用入门

Python日志系统logging使用入门

作者头像
用户10002156
发布2023-08-07 10:56:05
1400
发布2023-08-07 10:56:05
举报
文章被收录于专栏:生活处处有BUG生活处处有BUG

背影

Python标准库提供了一个日志记录系统,可以很方便的在python项目中添加日志记录。本文将详细介绍如何使用python的 logging 模块来记录日志。

日志级别

主要包括了5种日志级别,代表5种严重级别(严重程度由低到高):

  • • DEBUG:提供详细的详细
  • • INFO:程序运行的关键步骤信息
  • • WARNING:警告信息
  • • ERROR:程序错误,某个功能无法执行
  • • CRITICAL:严重错误,可能整个程序无法执行

Logger提供了一个默认的记录器,称为root Logger。

代码语言:javascript
复制
import logging

logging.debug('Debug 级别日志信息')
logging.info('Info 级别日志信息')
logging.warning('Warning 级别日志信息')
logging.error('Error 级别日志信息')
logging.critical('Critical 级别日志信息')

输出结果如下:

代码语言:javascript
复制
WARNING:root:Warning 级别日志信息
ERROR:root:Error 级别日志信息
CRITICAL:root:Critical 级别日志信息

基本配置

可以使用basicConfig(**kwargs)方法对日志系统进行配置。常用参数如下:

  • • level: 指定严重级别。
  • • filename: 指定文件。
  • • filemode: 如果指定了filename,则以该模式打开文件。默认是a,表示追加。
    • • a:追加
    • • w:覆盖
  • • format:日志信息的格式。默认levelname, name和message属性,用冒号分隔。

注意:basicConfig函数只能被调用一次。

level参数可以设置要记录的日志消息的严重级别

代码语言:javascript
复制

import logging

logging.basicConfig(level=logging.DEBUG)

logging.debug('Debug 级别日志信息')
logging.info('Info 级别日志信息')
logging.warning('Warning 级别日志信息')
logging.error('Error 级别日志信息')
logging.critical('Critical 级别日志信息')

输出结果如下

代码语言:javascript
复制
DEBUG:root:Debug 级别日志信息
INFO:root:Info 级别日志信息
WARNING:root:Warning 级别日志信息
ERROR:root:Error 级别日志信息
CRITICAL:root:Critical 级别日志信息

保存日志到文件

代码语言:javascript
复制

import logging

logging.basicConfig(filename='test.log', filemode='w', format='%(name)s - %(levelname)s - %(message)s')
logging.debug('Debug 级别日志信息')
logging.info('Info 级别日志信息')
logging.warning('Warning 级别日志信息')
logging.error('Error 级别日志信息')
logging.critical('Critical 级别日志信息')

输出结果如下:

代码语言:javascript
复制
root - WARNING - Warning 级别日志信息
root - ERROR - Error 级别日志信息
root - CRITICAL - Critical 级别日志信息

格式化输出

format 参数用于格式化输出设置,除了默认设置levelname, name和message属性:

属性名

使用格式

描述

asctime

%(asctime)s

时间,默认格式为 ‘2003-07-08 16:49:45,896’

created

%(created)f

时间戳

relativeCreated

%(relativeCreated)d

相对于加载日志模块的时间(以毫秒为单位)。

msecs

%(msecs)d

日志创建时间的毫秒部分

filename

%(filename)s

脚本文件名称

funcName

%(funcName)s

调用日志记录的函数名称

module

%(module)s

脚本模块名

pathname

%(pathname)s

脚本文件绝对路径名

name

%(name)s

记录器名称,默认logger名为root

levelname

%(levelname)s

文本类型的日志级别 ('DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL').

levelno

%(levelno)s

数字类型的日志级别 (10, 20, 30, 40, 50).

lineno

%(lineno)d

日志调用的代码所在行号

message

%(message)s

日志信息

process

%(process)d

进程ID

processName

%(processName)s

进程名称

thread

%(thread)d

线程ID

threadName

%(threadName)s

线程名

其中 asctime 时间格式可以使用 datefmt 属性更改,语法格式与python datetime模块的格式化函数相同,例如:

代码语言:javascript
复制
import logging

logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(message)s', datefmt='%Y%m%d-%H:%M:%S')

logging.debug('Debug 级别日志信息')
logging.info('Info 级别日志信息')
logging.warning('Warning 级别日志信息')
logging.error('Error 级别日志信息')
logging.critical('Critical 级别日志信息')

输出结果如下:

代码语言:javascript
复制
20230716-15:59:17 - Debug 级别日志信息
20230716-15:59:17 - Info 级别日志信息
20230716-15:59:17 - Warning 级别日志信息
20230716-15:59:17 - Error 级别日志信息
20230716-15:59:17 - Critical 级别日志信息

除了以上属性外,还支持自定义属性,使用 extra 参数传递

代码语言:javascript
复制

import logging

FORMAT = '%(asctime)s - %(clientip)s - %(message)s'
logging.basicConfig(format=FORMAT)
clientip = '192.168.0.1'
d = {'clientip':clientip}

logging.info('Info 级别日志信息')
logging.warning('Warning 级别日志信息', extra=d)

捕获异常信息

设置 exc_info 参数为 True 可以输出信息报错信息:

代码语言:javascript
复制
import logging

try:
  res = 1 / 0
except Exception as e:
  logging.error(e, exc_info=True

输出结果

代码语言:javascript
复制
ERROR:root:division by zero
Traceback (most recent call last):
  File "c:\Users\Administrator\Desktop\tmp\0716\a.py", line 4, in <module>
    res = 1 / 0
          ~~^~~
ZeroDivisionError: division by zero

也可以使用 logging.exception() 方法,效果一样

代码语言:javascript
复制
logging.exception(e)

另外,stack_info 参数设置为 True 是可以打印堆栈信息。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-07-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生活处处有BUG 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背影
    • 日志级别
      • 基本配置
        • 保存日志到文件
          • 格式化输出
            • 捕获异常信息
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档