日志级别设置
- 生产环境:将日志级别设置为
logging.INFO
或 logging.WARNING
,避免记录大量低级别(如 logging.DEBUG
)的日志信息。例如:
import logging
logging.basicConfig(level=logging.INFO)
- 开发环境:可以设置为
logging.DEBUG
以方便调试,但在上线前务必调整为合适的生产级别。
日志输出格式
- 简洁格式:采用简洁的日志格式,减少不必要的信息输出。例如:
logging.basicConfig(format='%(asctime)s - %(levelname)s - %(message)s')
- JSON格式:如果需要更好的机器可读性和后续的日志分析,可采用JSON格式输出。借助
python-json-logger
库实现:
import logging
from pythonjsonlogger import jsonlogger
logger = logging.getLogger(__name__)
logHandler = logging.StreamHandler()
formatter = jsonlogger.JsonFormatter()
logHandler.setFormatter(formatter)
logger.addHandler(logHandler)
日志文件管理
- 按时间滚动:使用
TimedRotatingFileHandler
按时间(如每天)滚动日志文件,避免单个日志文件过大。
import logging
from logging.handlers import TimedRotatingFileHandler
logger = logging.getLogger(__name__)
handler = TimedRotatingFileHandler('app.log', when='D', interval=1, backupCount=7)
logger.addHandler(handler)
- 按大小滚动:使用
RotatingFileHandler
按文件大小滚动日志文件。
import logging
from logging.handlers import RotatingFileHandler
logger = logging.getLogger(__name__)
handler = RotatingFileHandler('app.log', maxBytes=1024*1024, backupCount=5)
logger.addHandler(handler)
使用Python的logging模块实现优化
- 配置日志记录器:
import logging
# 创建日志记录器
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
# 创建控制台处理器
ch = logging.StreamHandler()
ch.setLevel(logging.INFO)
# 创建文件处理器
fh = logging.FileHandler('app.log')
fh.setLevel(logging.INFO)
# 设置日志格式
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
ch.setFormatter(formatter)
fh.setFormatter(formatter)
# 添加处理器到日志记录器
logger.addHandler(ch)
logger.addHandler(fh)
- 在API代码中使用日志记录器:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
logger.info('Received request for index page')
return 'Hello, World!'
if __name__ == '__main__':
app.run()