Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 自定义管理命令的Django日志记录_Python_Django_Logging - Fatal编程技术网

Python 自定义管理命令的Django日志记录

Python 自定义管理命令的Django日志记录,python,django,logging,Python,Django,Logging,我在Django项目中有一个名为main的应用程序。此应用程序有几个我想记录的管理命令,但在具有以下配置的stdout中没有显示任何内容: LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'log_to_stdout': { 'level': 'DEBUG', 'class': 'logging.Stream

我在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 final。

没有必要将“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的内容(比如pythonprint语句)都将转储到这个文本文件中,并连接到日志文件中的任何现有文本上

如果您没有使用cron,只需创建一个shell脚本来运行您需要运行的所有脚本,并手动将它们指向您想要的日志文件

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

…等等。

您需要为记录器命名名称空间。当前,您正在登录到根日志记录器,该日志记录器未被处理程序捕获,它正在查找
main

您希望

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

您使用什么命令来记录输出?我尝试了
logging.info
logging.debug
,但两者都不起作用。写下这个问题后,我注意到,
logging.warn
确实给了我一个打印到stdout的消息。听起来你的日志级别设置不正确。如果您想将其绑定到
verbosity
标志,请尝试类似的操作。我尝试过逐字复制粘贴示例代码,但仍然无法获得任何标准输出。但是,当我插入
logging.warn('foo')
作为第一条语句时,我确实在stdout中得到了打印
logging.info
logging.debug
仍然不起作用。谢谢,但这是我以前使用的方法。我正在尝试做正确的事情,如果可能的话,使用Django的“内置”日志功能。希望有人会介入并帮助你;我是原语,使用shell重定向。:)