如何匹配特定子包名称上的记录器?

时间:2013-11-20 15:16:39

标签: django logging

在我的Django项目中,我有几个应用程序(例如app_aapp_bapp_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'],
},

有可能吗?怎么样?

1 个答案:

答案 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}}实例可以附加到根记录器 - 过滤器不应该让任何无关的东西通过,所以应该可以这样做。