pathlib.Path(path).mkdir(),没有创建目录

pathlib.Path(path).mkdir(), not creating directory

我正在尝试在虚拟机 (运行ning Ubuntu-16.04) 上为我的 flask 项目实现日志记录。我有以下创建新目录的功能。

def mkdir_p(path):
    try:
        pathlib.Path(path).mkdir(parents=True, exist_ok=True)
    except FileExistsError as exc:
        raise

以及继承自 RotatingFileHandler 的以下文件处理程序。

class MyRotatingFileHandler(RotatingFileHandler):
    def __init__(self, filename, mode='a', maxBytes=0, backupCount=0, encoding=None, delay=0):
        mkdir_p(os.path.dirname(filename))
        RotatingFileHandler.__init__(self, filename, mode, maxBytes, backupCount, encoding, delay)

在 运行 时间在我的本地机器上注册一个新记录器时一切正常,但是当我尝试 运行 在 azure 实例上使用相同的代码时,路径和文件我正在传入 ('log/error.log'),未创建。

我已确保使用代码的用户 运行 对目录设置了写入权限。我真的想不出任何其他原因可能会发生这种情况。

对于可能有帮助的任何人, link 可能会提供一些有用的解释,但本质上,当使用外部应用程序服务器为您的应用程序提供服务时(与专用的 Flask 运行时相反, Werkzeug) 你需要确保你的记录器定义发生在之前你注册你的 Flask 应用程序,如下所示。

# add logger
logger = logging.getLogger('flask.app')
...
# register flask
app = Flask(__name__)

...

if __name__ == '__main__':
    app.run("0.0.0.0", threaded=True)

When you want to configure logging for your project, you should do it as soon as possible when the program starts. If app.logger is accessed before logging is configured, it will add a default handler. If possible, configure logging before creating the application object. - Flask Docs - Logging

我正在使用 uWSGI 为我的应用程序提供服务,但我在我的 Flask 应用程序之后并在 if __name__ = '__main__': 块内实例化了我的记录器,这就是为什么它在我的本地配置中运行良好但立即停止工作的原因我把它推到了生产环境。