默认情况下,我可以通过创建一个""
可以捕获所有内容的记录器,在SETTINGS配置中启用settings.py中的日志记录.但是,如果我只想从我的项目的应用程序中看到日志记录而不是Django内部组件呢?
我可以想象在我的每个Django应用程序模块中明确地获取一个记录器并按照某些约定命名它,例如logging.getLogger("myproject." + __file__)
.然后我可以创建一个名为'myproject'的记录器(在SETTINGS中),它将所有这些记录器输出.我不想硬编码我的项目名称,所以我会做一些os.path逻辑,___file___
以任意深度提取完整的命名空间到文件.
在这一点上,我停下来,想知道有更简单的方法吗?
小智 11
您可以使用如下方案为所有本地应用程序创建相同的记录器,而无需手动将它们全部添加到日志记录配置中.
首先,拆分您的本地应用程序:
LOCAL_APPS = [
'myapp1',
'myapp2',
...
]
THIRD_PARTY_APPS = [
'django. ...',
...
]
INSTALLED_APPS = LOCAL_APPS + THIRD_PARTY_APPS
Run Code Online (Sandbox Code Playgroud)
接下来为本地应用创建记录器配置:
local_logger_conf = {
'handlers': ['my_handler',],
'level': 'DEBUG',
}
Run Code Online (Sandbox Code Playgroud)
最后,按如下方式定义记录器:
'loggers': { app: copy.deepcopy(local_logger_conf) for app in LOCAL_APPS }
Run Code Online (Sandbox Code Playgroud)
Sto*_*ica 10
不确定我是否完全理解你的问题,因为答案似乎太简单了.
假设您已在LOGGING
项目的应用程序的处理程序中定义,例如:
'handlers': {
'handler_for_my_apps': {
'level': 'DEBUG',
'class': 'logging.FileHandler',
'filename': 'debug.log',
},
Run Code Online (Sandbox Code Playgroud)
并且,鉴于您的应用程序app1
,app2
您可以通过定义记录器来获取这些应用程序中的所有日志,而无需任何Django的内部日志:
'loggers': {
'app1': {
'handlers': ['handler_for_my_apps'],
'level': 'DEBUG',
},
'app2': {
'handlers': ['handler_for_my_apps'],
'level': 'DEBUG',
},
Run Code Online (Sandbox Code Playgroud)
除非您定义了一个以django
处理程序命名的记录器,否则同一文件中不会有Django日志handler_for_my_apps
.
在您的应用中,您可以logging.getLogger(__name__)
按照文档的建议使用记录器.
除非我误解了你的问题......
归档时间: |
|
查看次数: |
4777 次 |
最近记录: |