运行名为log.py
的模块会创建一个文件my_file.log
,在该文件中记录脚本运行的时间。在我的本地项目中运行log.py
(over)写入日志文件完全正常但由于某种原因在heroku的生产部署上运行它不会写入my_file.log
。 log.py
还做了其他一些事情,我可以说log.py
确实在Heroku中执行了。它只是未写入的日志。
首先我认为这可能是权限问题,但使用ls -l
进行检查会给出
drwx------ 3 my_app
-rw------- 1 my_file.log
以下是我的项目结构:
.
├── my_project
│ ├── my_app
│ │ ├── __init__.py
│ │ ├── models.py
│ │ ├── tests.py
│ │ ├── views.py
│ │ ├── my_file.log
│ │ └── management
│ │ ├── __init__.py
│ │ └── commands
│ │ ├── __init__.py
│ │ └── log.py
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── manage.py
└── requirements.txt
它与用作自定义Django命令的代码无关,因为在我的开发版本中,每次都会覆盖日志文件。
这是log.py
中负责记录到my_file.log
的代码段:
log_lc = os.path.join(os.path.dirname(os.path.abspath(__file__)),
os.path.pardir, os.path.pardir, "my_file.log")
logging.basicConfig(filename=log_lc,level=logging.INFO,
format='%(asctime)s %(message)s', datefmt='%m/%d/%Y %I:%M:%S %p',
filemode="w")
logging.info("You just ran my_file.log")
答案 0 :(得分:4)
Heroku是只读的。您正在尝试创建自己的日志文件my_file.log
,但由于无法向其文件系统写入任何内容,因此无法执行此操作。
但是,您可以将日志消息打印到Heroku的标准日志中。 Here are the docs for that.。然后,您可以通过heroku logs
检查您的邮件。
除了Heroku的标准日志记录外,他们还有许多可用于日志记录的应用程序,您可以在Heroku应用程序上安装这些应用程序。否则,您可以考虑使用电子邮件选项或将日志文件写入s3
等第三方位置。