繁体   English   中英

创建该文件后 Heroku 上的 FileNotFoundError

[英]FileNotFoundError on Heroku after creating that file

我的应用程序有一些额外的日志记录,它在本地机器上运行良好,甚至在本地 Heroku 上运行良好。 当我将它推送到 Heroku 时,它会引发FileNotFoundError 这是我的代码:

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 class 来显式创建.log文件:

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

以下是 Heroku 日志:

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 上的文件。 它的临时文件系统意味着您编写的任何内容都可能随时丢失,并且至少每天都会丢失。

相反,登录到stderrstdout 然后 Heroku 可以将您的日志合并到其日志 stream 中

Heroku 应用程序的日志是从其所有正在运行的进程、系统组件和支持服务的 output 流中聚合而成的

Heroku 上的日志大多是暂时的,因此您可能需要设置日志插件日志消耗

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM