我的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决赛。
答案 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
......等等。