如何在Django中监听AppConfig表增删改操作并记录日志?
Django AppConfig模型增删改操作的统一日志记录方案
用Django内置的信号机制就能完美解决这个问题,不用在每个修改模型的地方手动加日志代码,统一监听模型的增删改事件,自动记录操作日志。
1. 编写信号处理函数
在你的app目录下创建signals.py文件(或者直接写在models.py里),定义监听post_save(处理新增/修改)和post_delete(处理删除)的函数:
import logging from django.db.models.signals import post_save, post_delete from django.dispatch import receiver from .models import AppConfig # 从settings中获取配置好的日志实例 logger = logging.getLogger('appconfig_operations') @receiver(post_save, sender=AppConfig) def log_appconfig_save(sender, instance, created, **kwargs): action = "新增" if created else "修改" # 按需记录关键字段,这里假设模型有key和value字段 log_msg = f"AppConfig操作:{action},ID={instance.id},配置项={instance.key},值={instance.value}" logger.info(log_msg) @receiver(post_delete, sender=AppConfig) def log_appconfig_delete(sender, instance, **kwargs): log_msg = f"AppConfig操作:删除,ID={instance.id},配置项={instance.key},值={instance.value}" logger.info(log_msg)
2. 配置日志(可选但推荐)
在项目的settings.py中配置日志规则,指定日志文件路径和格式:
LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'appconfig_file': { 'level': 'INFO', 'class': 'logging.FileHandler', 'filename': 'logs/appconfig_operations.log', # 可自定义路径 'formatter': 'standard', }, }, 'formatters': { 'standard': { 'format': '%(asctime)s - %(levelname)s - %(message)s', }, }, 'loggers': { 'appconfig_operations': { 'handlers': ['appconfig_file'], 'level': 'INFO', 'propagate': False, }, }, }
3. 注册信号
如果用了单独的signals.py,需要在app的apps.py中配置ready方法,确保Django启动时加载信号:
from django.apps import AppConfig class YourAppConfig(AppConfig): default_auto_field = 'django.db.models.BigAutoField' name = 'your_app' # 替换成你的app名称 def ready(self): import your_app.signals # 替换成你的app路径
然后在app的__init__.py中添加:
default_app_config = 'your_app.apps.YourAppConfig'
效果说明
不管是通过Django Admin后台、视图函数、脚本还是第三方工具修改AppConfig模型,只要触发了增、改、删操作,信号就会自动调用日志函数,把操作记录写入指定的日志文件,完全不用在业务代码里手动加日志逻辑,避免遗漏和代码杂乱。
内容的提问来源于stack exchange,提问作者user22066066
相关产品推荐
相关产品推荐

