2013-06-01 72 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 } 
相關問題