在我的Django项目中,我有几个应用程序(例如app_a
,app_b
,app_c
)。每个应用程序都包含几个命令:
project
+-app_a
| +-management
| +-commands
| +- command_1.py, command_2.py
|
+-app_b
| +-management
| +-commands
| +- command_3.py, command_4.py
|
+-app_c
+-management
+-commands
+- command_5.py
在我的项目设置(settings.py
)中,我想定义一个logger来拦截来自任何command的所有日志,无论它位于何种应用中。它我将不遗余力地创建一些'commands_logger',我必须在每个命令模块中明确调用它们。看起来像
'*.management.commands': {
'level': 'DEBUG',
'handlers': ['console'],
},
有可能吗?怎么样?
答案 0 :(得分:1)
您可以使用自定义FileHandler
指定Filter
,该自定义class MyFilter(logging.Filter):
def filter(self, record):
name = record.name
return (name.endswith('.management.commands') or
'.management.commands.' in name)
仅传递来自特定位置的事件。例如:
FileHandler
这只允许来自管理命令的事件。当然,您可以根据需要改进此逻辑。 {{1}}实例可以附加到根记录器 - 过滤器不应该让任何无关的东西通过,所以应该可以这样做。