![](/img/trans.png)
[英]Error when creating a django superuser with 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 上的文件。 它的临时文件系统意味着您编写的任何内容都可能随时丢失,并且至少每天都会丢失。
相反,登录到stderr
或stdout
。 然后 Heroku 可以将您的日志合并到其日志 stream 中:
Heroku 应用程序的日志是从其所有正在运行的进程、系统组件和支持服务的 output 流中聚合而成的
Heroku 上的日志大多是暂时的,因此您可能需要设置日志插件或日志消耗:
logs
命令默认检索 100 个日志行。 您可以使用--num
(或-n
)选项指定要检索的日志行数(最多 1,500 行)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.