簡體   English   中英

Django記錄自定義管理命令

[英]Django logging of custom management commands

我的Django項目中有一個名為main的應用程序。 這個應用程序有幾個我想記錄的管理命令,但是在stdout中沒有顯示任何內容,具有以下配置:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'log_to_stdout': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
            'stream': sys.stdout,
            },
        },
    'loggers': {
        'main': {
            'handlers': ['log_to_stdout'],
            'level': 'DEBUG',
            'propagate': True,
            }
        }
    }

我究竟做錯了什么? 我也嘗試過使用my_project.main ,但這也不起作用。 我正在使用1.3.0決賽。

您需要命名您的記錄器。 目前您正在登錄到根記錄器,該記錄器未被您的處理程序捕獲,該處理程序正在尋找main

而不是logging.debug("message") ,你想要的

logger = logging.getLogger('main')
logger.debug("message")

不需要將“stream”設置為sys.stdout。 但是,您應該定義格式化程序:

例:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'simple': {
            'format': '%(levelname)s %(message)s'
        },
    },
    'handlers': {
        'log_to_stdout': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
            'formatter': 'simple',
            },
        },
    'loggers': {
        'main': {
            'handlers': ['log_to_stdout'],
            'level': 'DEBUG',
            'propagate': True,
        }
    }
}

如果您使用cron注冊這些自定義命令,則只需將輸出重定向到文本文件即可“強制”記錄。

* 12 * * * python /path/to/my/custom/command.py >> /path/to/my/logfile.txt

這將在每天早上12點運行一個cron作業,任何指向stdout的內容(如python print語句)都將被轉儲到此文本文件中,並連接到日志文件中的任何現有文本。

如果您不使用cron,只需創建一個shell腳本,該腳本運行您需要運行的所有腳本並手動將它們定向到您想要的日志文件。

python /path/to/my/custom/command.py >> /path/to/my/logfile.txt

...等等。

暫無
暫無

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

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