Python中更优雅的日志记录方案详解
什么是日志记录
在软件开发过程中,我们会经常需要记录一些关键数据,比如程序的运行状态,用户的操作行为,错误信息等等。这些数据的记录被称为“日志记录”。
通过日志记录,我们可以更好地了解程序的运行状态,以及在程序出现问题时方便地快速定位问题。
常见的日志记录方式
在 Python 中,常见的日志记录方式有以下几种:
- 使用
print
函数打印输出 - 使用
logging
模块记录日志
其中,第一种方式虽然非常简单易用,但存在一些问题:
print
函数只在控制台输出,并不会记录到文件中,当程序出现异常或发生错误时,无法快速定位问题- 当需要停止日志输出时,需要将所有
print
函数注释掉或删掉,非常麻烦
因此,我们通常会倾向于使用第二种方式,使用 logging
模块记录日志。
使用 logging
模块记录日志的基本流程
使用 logging
模块记录日志是非常方便的,下面是其基本的使用流程:
- 导入
logging
模块 - 配置日志记录器
- 在代码中调用日志记录器记录日志
配置日志记录器的方式
我们可以通过编写一个配置文件或使用 Python 代码方式进行配置。
配置文件方式
通过编写一个配置文件,可以方便地对日志记录器进行配置。这种方式的好处在于,修改配置时无需修改代码,只需要修改配置文件即可。下面是一个典型的配置文件:
[loggers]
keys=root,sampleLogger
[handlers]
keys=consoleHandler,fileHandler
[formatters]
keys=textFormatter,plainFormatter
[logger_root]
level=DEBUG
handlers=consoleHandler
[logger_sampleLogger]
level=DEBUG
handlers=fileHandler
qualname=sampleLogger
propagate=0
[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=textFormatter
args=(sys.stdout,)
[handler_fileHandler]
class=FileHandler
level=DEBUG
formatter=plainFormatter
args=('myapp.log', 'a')
[formatter_textFormatter]
format=%(asctime)s - %(levelname)s - %(name)s - %(message)s
[formatter_plainFormatter]
format=%(asctime)s - %(levelname)s - %(message)s
Python 代码方式
使用 Python 代码配置日志记录器的方式更加灵活,下面是一个典型的例子:
import logging
import sys
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
console_handler = logging.StreamHandler(sys.stdout)
console_handler.setLevel(logging.DEBUG)
console_handler.setFormatter(formatter)
file_handler = logging.FileHandler('myapp.log', 'a')
file_handler.setLevel(logging.DEBUG)
file_handler.setFormatter(formatter)
root_logger = logging.getLogger()
root_logger.setLevel(logging.DEBUG)
root_logger.addHandler(console_handler)
root_logger.addHandler(file_handler)
logger = logging.getLogger('sampleLogger')
logger.setLevel(logging.DEBUG)
logger.propagate = False
logger.addHandler(file_handler)
使用示例
下面是两个典型的使用示例:
示例 1:记录函数调用
import logging
logging.basicConfig(filename='myapp.log', level=logging.DEBUG)
def add_numbers(a, b):
c = a + b
logging.debug('加法运算,结果为 %s', c)
return c
add_numbers(1, 2)
运行代码后,可以在 myapp.log
文件中看到以下内容:
DEBUG:root:加法运算,结果为 3
示例 2:在 Flask 中记录请求记录
from flask import Flask
import logging
app = Flask(__name__)
logging.basicConfig(filename='myapp.log', level=logging.DEBUG)
@app.route('/')
def hello():
logging.debug('访问首页')
return '<h1>Hello, World!</h1>'
当访问首页时,可以在 myapp.log
文件中看到以下内容:
DEBUG:root:访问首页
总结
使用 logging
模块记录日志是 Python 中更优雅的日志记录方案,具有以下优点:
- 对程序运行性能影响小
- 支持多种日志处理方式,如设置日志级别、保存日志到文件、将日志发送到远程服务器等
- 可以通过配置文件或 Python 代码方式进行配置
- 可以方便地记录程序运行状态、异常信息等
因此,在进行 Python 开发时,建议优先使用 logging
模块记录日志。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python中更优雅的日志记录方案详解 - Python技术站