2013-06-01 55 views
11

默认情况下,我可以通过创建记录器""来启用在SETTINGS配置中的settings.py中的日志记录,该记录器将捕获所有日志。但是如果我只想从项目的应用程序中看到日志而不是Django内部的日志呢?Django日志记录仅适用于我的应用程序

我可以想象在每个Django应用程序模块中明确地获取一个记录器,并通过一些约定来命名它,例如, logging.getLogger("myproject." + __file__)。然后我可以创建一个名为'myproject'的记录器(在SETTINGS中),它可以将所有这些记录输出。我不想硬编码我的项目名称,所以我会在___file___上执行一些os.path逻辑,以便在任意深度提取完整的名称空间直至文件。

在这一点上,我停下来想知道有没有更简单的方法?

+1

您是否阅读过日志记录文档(https://docs.djangoproject.com/en/dev/topics/logging/#configuring-logging)?有一个“myproject.custom”记录器,看起来与您正在寻找的相似。 –

+0

是的,我做到了。我没有看到任何能够简化我描述的内容,但是如果这样做会是一个很好的答案。 –

+1

我在发布我的评论后重新阅读您的问题,并意识到它可能不会提供任何其他见解。对此,道歉。 –

回答

9

不知道我是否完全理解你的问题,因为答案太简单了。

假设你在LOGGING为您的项目的应用程序的处理程序已经定义,例如像这样:

'handlers': { 
    'handler_for_my_apps': { 
     'level': 'DEBUG', 
     'class': 'logging.FileHandler', 
     'filename': 'debug.log', 
    }, 

,并给予您的应用程序app1app2,所以,你可以有一切从这些应用程序日志,而不任何Django的内部日志通过定义伐木者:

'loggers': { 
    'app1': { 
     'handlers': ['handler_for_my_apps'], 
     'level': 'DEBUG', 
    }, 
    'app2': { 
     'handlers': ['handler_for_my_apps'], 
     'level': 'DEBUG', 
    }, 

将不会有Django的日志在同一个文件,当然,除非你定义一个与韩名为django记录仪dler handler_for_my_apps

在您的应用程序中,您可以使用文档建议的logging.getLogger(__name__)获取记录器。

除非我误解你的问题......

6

你可以使用如下而无需手动将其全部添加到日志记录配置创建所有本地的应用程序相同的记录仪的方案。

首先,打出你的本地应用程序:

LOCAL_APPS = [ 
    'myapp1', 
    'myapp2', 
    ... 
] 

THIRD_PARTY_APPS = [ 
    'django. ...', 
    ... 
] 

INSTALLED_APPS = LOCAL_APPS + THIRD_PARTY_APPS 

下一页创建记录器配置为您的本地应用程序:

local_logger_conf = { 
    'handlers': ['my_handler',], 
    'level': 'DEBUG', 
} 

最后,定义你的伐木工人如下:

'loggers': { app: copy.deepcopy(local_logger_conf) for app in LOCAL_APPS } 
相关问题