所以,我有一个在Heroku上运行的简单网络应用程序,它提供了一个很好的前端,用于输入一些数据和运行特定的计算(这是一个学术的事情)。在整个过程中,我经常使用python的logging
库,因为计算有很多步骤,我想确保它们没有问题。
但是最近,我这样做的人决定他们也希望看到日志,这应该很简单 - 我只是将它们全部发送到.log
文件中{{1}所以我只是提供文件?但是,不,这对Heroku不起作用。
好吧,好吧,也许我会尝试使用FileHandler
,然后将队列转储到缓存中(我使用memcached服务),以便在用户时抓住它请求日志?
QueueHandler
这再次适用于我的本地但不适用于Heroku;在log = logging.getLogger("mc")
logqueue = queue.Queue()
queue_handler = QueueHandler(logqueue)
log.handlers = [ queue_handler ]
...(computation, generates logs)
cache.set('logList', logqueue.queue)
行,该logqueue表示它是空的。
所有这些都适用于我的本地机器,我在这里撕扯我的头发试图找出为什么没有人在Heroku上工作。这里有没有人对这里的尝试有任何想法?
谢谢!
答案 0 :(得分:0)
好吧,我设法搞清楚了 - 毫不奇怪我只是傻了!或者至少,我错过了一些重要的事情:
在代码的早期某个时刻,我需要设置log.setLevel(level = logging.INFO)
,因为我的所有日志都属于INFO
类型。但是,我已经在manage.py
中完成了这项工作,这通常通常完全正常,除非在这种特殊情况下我将此应用设置为蓝图并将其注册为一个子网址,使用不同的 manage.py
,一个控制所有内容的高级网址。净效应是我的行
log.setLevel(level = logging.INFO)
当我尝试在Heroku上运行它时,和原始manage.py
中的所有其他内容都被跳过了,后者使用了" master" manage.py
。因此,我的日志已经存在,但日志级别没有设置正确,因此根本没有记录任何日志。
希望这有道理,令人头疼