【python】使用logging 记录日志

1.标准库中的日志模块 

所有日志具有统一的风格,便于后续处理。
丰富的日志格式,只需要通过配置文件就可以修改日志格式,不需要修改代码。
更加重要性对日志进行分类,可以只显示重要的日志。
自动管理日志文件,如按天切换一个新的文件,只保留一个月的日志文件等。

2.日志的作用

记录日志两个目的
诊断日志:记录与应用程序操作相关的日志。
审计日志:为商业分析而记录的日志。
Apache的访问日志就是一种审计日志。

3.logging 日志模块 

标准库中的logging模块提供了日志相关功能。
debug,info,warn,error,critical 等函数记录日志。
默认 logging 将日志打印到屏幕终端,日志级别为WARNING.
日志级别比WARNING 高的日志才会被显示。

vi logging.py 
#!/usr/local/lib/python
import logging 
logging.debug('debug message')
logging.info('info message')
logging.warn('warn message')
logging.error('error message')
logging.critical('critical message')

[root@mysql1 python]# python logging_test.py 
WARNING:root:warn message
ERROR:root:error message
CRITICAL:root:critical message

logging 模块中日志分为5个级别:CRITICAL,ERROR,WARNING,INFO,DEBUG;

CRITICAL:权重:50:严重错误,表明软件已经不能继续运行了。
ERROR:40:发生了严重错误,必须马上处理。
WARNING:30:应用程序可以容忍这些信息,软件还是在正常工作,不过他们应该
被检查和修复,否则将在不久的将来发生问题。
INFO:20:证明事情按预期工作,突出强调应用程序的运行过程。
DEBUG:10:详细信息,只有开发任意调试程序时才需要关注的事情。

4.配置日志格式。

vi logging_test2.py
#!/usr/bin/python
# -*- coding:utf-8 -*-
import logging 
logging.basicConfig(filename='app.log',level=logging.INFO)

logging.debug('debug message')
logging.info('info message')
logging.warn('warn message')
logging.error('error message')
logging.critical('critical message')

--按照INFO级别,将高于或等于INFO的日志输入到app.log 
[root@mysql1 python]# python logging_test2.py 
[root@mysql1 python]# cat app.log 
INFO:root:info message
WARNING:root:warn message
ERROR:root:error message
CRITICAL:root:critical message

Logger,Handler,Formatter 
Logger:日志记录器,是应用程序中能直接使用的接口。
Handler:日志处理器,用以表名将日志保存到什么地方以及保存多久。
Formatter:格式化,用以配置日式的输出格式。

一个典型的使用场景中,一个日志记录器使用一个日志处理器,一个日志处理器 
使用一个日志格式化。

vi logging_test3.py 
#! /usr/bin/python
# -*- coding:utf-8 -*-
import logging 

logging.basicConfig(
    filename='app.log',
    level=logging.INFO,
    format='%(asctime)s : %(levelname)s :%(message)s')


logging.debug('debug message')
logging.info('info message')
logging.warn('warn message')
logging.error('error message')
logging.critical('critical message')

--执行python脚本。
[root@mysql1 python]# python logging_test3.py 
--查看日志。
[root@mysql1 python]# cat app.log 
2024-08-12 12:31:45,321 : INFO :info message
2024-08-12 12:31:45,321 : WARNING :warn message
2024-08-12 12:31:45,321 : ERROR :error message
2024-08-12 12:31:45,321 : CRITICAL :critical message

5.通过配置文件保存logging的日志信息。

vi logging.cnf 
[loggers]
keys = root 

[handlers]
keys = logfile 

[formatters]
keys = generic 

[logger_root]
handlers = logfile 

[handler_logfile]
class = logging.handlers.TimedRotatingFileHandler
args = ('app3.log','midnight',1,10)
level = DEBUG 
formatter = generic 

[formatter_generic]
format=%(asctime)s %(levelname)s-5.5s [%(name)s:%(lineno)s] %(message)s

--说明:
[loggers]声明一个名为root的logger
[handlers]声明一个名为 logfile 的handler 
[formatters]声明一个名为 generic的formatter 
[logger_root]定义root 这个logger 使用的 handler 
[handler_logfile]定义handler输出日志的方式,日志文件的切换时间。
[formatter_generic]定义日志格式,包括日志产生时间,日志的级别,产生日志的文件名
和行号。

--安装 ConfigParser;
[root@mysql1 python]# pip3 install ConfigParser
WARNING: Running pip install with root privileges is generally not a good idea. Try `pip3 install --user` instead.
Collecting ConfigParser
  Downloading https://files.pythonhosted.org/packages/2b/af/0e28626b47c84172a112397f034bb1b6349960ca6e0fe7c96666e0ccae69/configparser-5.2.0-py3-none-any.whl
Installing collected packages: ConfigParser
Successfully installed ConfigParser-5.2.0




vi logging_test4.py 
#! /usr/bin/python
# -*- coding:utf-8 -*-
#import logging 
import logging.config

logging.config.fileConfig('logging.cnf')

logging.debug('debug message')
logging.info('info message')
logging.warn('warn message')
logging.error('error message')
logging.critical('critical message')

--执行脚本。
python logging_test4.py 
--查看日志。
cat app3.log 
2024-08-12 13:27:13,655 WARNING-5.5s [root:9] warn message
2024-08-12 13:27:13,655 ERROR-5.5s [root:10] error message
2024-08-12 13:27:13,655 CRITICAL-5.5s [root:11] critical message

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值