Django记录自定义管理命令

时间:2012-03-09 10:56:47

标签: python django logging

我的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决赛。

3 个答案:

答案 0 :(得分:15)

您需要命名您的记录器。目前您正在登录到根记录器,该记录器未被您的处理程序捕获,正在寻找main

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

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

答案 1 :(得分:2)

不需要将“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,
        }
    }
}

答案 2 :(得分:-2)

如果您使用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

......等等。