我有一个名为的应用程序 main
在我的Django项目中。这个应用程序有几个我想记录的管理命令,但是没有任何东西出现在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
...等等。