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

时间:2018-08-20 16:36:36

标签: python logging mkdir pathlib

我正在尝试在虚拟机(运行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' ),则不会创建。

我确保运行代码的用户在目录上设置了写权限。我真的想不出为什么会发生这种情况。

1 个答案:

答案 0 :(得分:1)

对于任何人都可能有帮助的人,following链接可能会提供一些有用的解释,但是从本质上讲,当使用外部应用程序服务器为您的应用程序提供服务(与专用的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)
  

要为项目配置日志记录时,应在程序启动时尽快进行记录。如果在配置日志记录之前访问了app.logger,它将添加一个默认处理程序。如果可能,请在创建应用程序对象之前配置日志记录。 -Flask Docs - Logging

我正在使用uWSGI为我的应用程序提供服务,但是我在Flask应用程序之后并在if __name__ = '__main__':块中实例化了记录器,这就是为什么它在我的本地配置中可以正常工作,但是在我按下按钮的那一刻就停止工作了投入生产。