簡體   English   中英

如何在Django中配置Python日志記錄模塊?

[英]How do I configure the Python logging module in Django?

我正在嘗試使用Python logging模塊為Django應用程序配置日志logging 我在Django項目的settings.py文件中放置了以下配置代碼:

import logging
import logging.handlers
import os
date_fmt = '%m/%d/%Y %H:%M:%S'
log_formatter = logging.Formatter(u'[%(asctime)s] %(levelname)-7s: %(message)s (%(filename)s:%(lineno)d)', datefmt=date_fmt)
log_dir = os.path.join(PROJECT_DIR, "var", "log", "my_app")
log_name = os.path.join(log_dir, "nyrb.log")
bytes = 1024 * 1024   # 1 MB
if not os.path.exists(log_dir):
  os.makedirs(log_dir)
handler = logging.handlers.RotatingFileHandler(log_name, maxBytes=bytes, backupCount=7)
handler.setFormatter(log_formatter)
handler.setLevel(logging.DEBUG)
logging.getLogger().setLevel(logging.DEBUG)
logging.getLogger().addHandler(handler)
logging.getLogger(__name__).info("Initialized logging subsystem")

在啟動時,我在日志文件中收到了一些與Django相關的消息以及“初始化日志子系統”,但是隨后所有日志消息最終都進入了Web服務器日志( /var/log/apache2/error.log (因為我使用的是Apache),並使用標准的日志格式(而不是我指定的格式化程序)。 我是否配置了錯誤的日志記錄?

有點抗高潮,但事實證明,該項目中安裝了一個第三方應用程序,該應用程序具有自己的日志記錄配置,該配置取代了我設置的日志記錄配置(出於某些原因,它修改了根記錄器-不太符合猶太標准) Django應用!)。 刪除了該代碼,一切正常。

我成功地使用了它(盡管它不會旋轉 ):

# in settings.py
import logging
logging.basicConfig(
    level = logging.DEBUG,
    format = '%(asctime)s %(levelname)s %(funcName)s %(lineno)d \
              \033[35m%(message)s\033[0m', 
    datefmt = '[%d/%b/%Y %H:%M:%S]',
    filename = '/tmp/my_django_app.log',
    filemode = 'a'
)

我建議也嘗試絕對路徑。

看到其他答案 請注意,settings.py通常被導入兩次,因此您應避免創建多個處理程序。 希望在1.3中為Django提供更好的日志記錄支持,但是現在您應該確保如果多次調用設置代碼,不會有不利影響。

我不確定為什么您的登錄消息會進入Apache日志,除非您(在代碼中的其他位置)將sys.stdoutsys.stderr作為流添加了StreamHandler到根記錄器中。 您可能希望打印出logging.getLogger().handlers只是為了查看它是您期望看到的。

我猜想日志將在Apache分叉進程時停止。 在那之后,由於所有文件描述符都在守護進程中關閉,因此日志記錄系統會嘗試重新打開日志文件,據我所知,它使用相對文件路徑:

log_dir = os.path.join(PROJECT_DIR, "var", "log", "my_app")
log_name = os.path.join(log_dir, "nyrb.log")

但是,在守護進程后沒有“當前目錄”。 嘗試使用絕對log_dir路徑。 希望能有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM