运行记录器在本地项目中工作正常但在Heroku上失败

时间:2013-02-01 18:55:12

标签: python django logging heroku

运行名为log.py的模块会创建一个文件my_file.log,在该文件中记录脚本运行的时间。在我的本地项目中运行log.py(over)写入日志文件完全正常但由于某种原因在heroku的生产部署上运行它不会写入my_file.loglog.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")

1 个答案:

答案 0 :(得分:4)

Heroku是只读的。您正在尝试创建自己的日志文件my_file.log,但由于无法向其文件系统写入任何内容,因此无法执行此操作。

但是,您可以将日志消息打印到Heroku的标准日志中。 Here are the docs for that.。然后,您可以通过heroku logs检查您的邮件。

除了Heroku的标准日志记录外,他们还有许多可用于日志记录的应用程序,您可以在Heroku应用程序上安装这些应用程序。否则,您可以考虑使用电子邮件选项或将日志文件写入s3等第三方位置。