创建该文件后,在Heroku上出现FileNotFoundError [英] FileNotFoundError on Heroku after creating that file

查看:30
本文介绍了创建该文件后,在Heroku上出现FileNotFoundError的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的应用程序还有一些其他日志记录,它可以在本地计算机上甚至在Heroku本地上正常工作.当我将其推送到Heroku时,它会引发一个 FileNotFoundError .这是我的代码:

My app has some additional logging, it works fine on a local machine and even on Heroku local. When I push it to Heroku, it raises a FileNotFoundError. Here is my code:

class Logger:
    def __init__(self, name, file_handler, formatter, stream_handler):
        if not os.path.exists('Logs'):
            os.makedirs('Logs')

        self.logger = logging.getLogger(name)
        self.logger.setLevel(logging.DEBUG)

        file_handler.setFormatter(formatter)
        self.logger.addHandler(file_handler)

        if stream_handler:
            stream_handler = logging.StreamHandler()
            stream_handler.setFormatter(formatter)
            self.logger.addHandler(stream_handler)


logger_dev = Logger('dev',
                    handlers.TimedRotatingFileHandler(f'Logs/dev.log', when='midnight', backupCount=2),
                    logging.Formatter('%(asctime)s : %(levelname)s : %(filename)s : %(funcName)s : %(message)s'),
                    True)

logger_usr = Logger('usr',
                    handlers.RotatingFileHandler(f'Logs/usr.log', maxBytes=7 * 1024 * 1024, backupCount=2),
                    logging.Formatter('%(asctime)s : %(message)s'),
                    False)

我还尝试通过将其添加到Logger类来显式创建 .log 文件:

I've also tried explicitly creating .log files by adding this to the Logger class:

if not os.path.exists(f'Logs/{name}.log'):
    open(f'Logs/{name}.log', 'w+').close()

以下是Heroku日志:

Here are Heroku logs:

2020-06-15T20:59:43.441969+00:00 app[worker.1]: Traceback (most recent call last):
2020-06-15T20:59:43.441997+00:00 app[worker.1]: File "bot.py", line 8, in <module>
2020-06-15T20:59:43.442110+00:00 app[worker.1]: import settings as s
2020-06-15T20:59:43.442114+00:00 app[worker.1]: File "/app/settings.py", line 60, in <module>
2020-06-15T20:59:43.442251+00:00 app[worker.1]: handlers.TimedRotatingFileHandler(f'Logs/dev.log', when='midnight', backupCount=2),
2020-06-15T20:59:43.442254+00:00 app[worker.1]: File "/app/.heroku/python/lib/python3.8/logging/handlers.py", line 200, in __init__
2020-06-15T20:59:43.442437+00:00 app[worker.1]: BaseRotatingHandler.__init__(self, filename, 'a', encoding, delay)
2020-06-15T20:59:43.442439+00:00 app[worker.1]: File "/app/.heroku/python/lib/python3.8/logging/handlers.py", line 55, in __init__
2020-06-15T20:59:43.442606+00:00 app[worker.1]: logging.FileHandler.__init__(self, filename, mode, encoding, delay)
2020-06-15T20:59:43.442622+00:00 app[worker.1]: File "/app/.heroku/python/lib/python3.8/logging/__init__.py", line 1143, in __init__
2020-06-15T20:59:43.443050+00:00 app[worker.1]: StreamHandler.__init__(self, self._open())
2020-06-15T20:59:43.443054+00:00 app[worker.1]: File "/app/.heroku/python/lib/python3.8/logging/__init__.py", line 1172, in _open
2020-06-15T20:59:43.443475+00:00 app[worker.1]: return open(self.baseFilename, self.mode, encoding=self.encoding)
2020-06-15T20:59:43.443501+00:00 app[worker.1]: FileNotFoundError: [Errno 2] No such file or directory: '/app/Logs/dev.log'

推荐答案

不要登录到Heroku上的文件.它的临时文件系统意味着您编写的任何内容都可能随时丢失,并且 至少每天都会丢失.

Don't log to files on Heroku. Its ephemeral filesystem means that anything you write could be lost at any time, and will be lost at least daily.

相反,登录到 stderr stdout .然后Heroku可以将您的日志合并到其日志流中:

Instead, log to stderr or stdout. Then Heroku can incorporate your logs into its log stream:

Heroku应用程序的日志是从其所有正在运行的进程,系统组件和支持服务的输出流中汇总的.

A Heroku app’s logs are aggregated from the output streams of all of its running processes, system components, and backing services

Heroku上的日志大部分是暂时的,因此您可能需要设置记录插件日志消耗:

Logs are mostly transient on Heroku, so you might want to set up a logging addon or log drain:

logs 命令默认检索100条日志行.您可以使用-num (或 -n )选项指定要检索的日志行数(最多1,500行).

The logs command retrieves 100 log lines by default. You can specify the number of log lines to retrieve (up to a maximum of 1,500 lines) by using the --num (or -n) option.

这篇关于创建该文件后,在Heroku上出现FileNotFoundError的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆