Python 自定义管理命令的Django日志记录
我在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
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重定向。:)