Flask Web App on Ubuntu 19.10 Linode, IOError: [Errno 13] Permission denied: '/app.log'

I'm trying to get logging working on a flask web app on my Ubuntu 19.10 linode server.

logging setup in webApp.wsgi:

logging.basicConfig(filename='app.log', level=logging.INFO)

I have tried putting a more specific file path

logging.basicConfig(filename='/var/log/app.log', level=logging.INFO)

I have checked the log files in both directories have permissions 'rw-r--r--'

I have also tried elevating the permissions of the log file but get the same issue.

-rw-rw-rw- 1 root root 0 Apr 26 23:22 app.log

The file structure of my linode server:

var
-log
--app.log <- LOG
-www
--webApp
---webApp
---webApp.wsgi
----init.py
----app.log <- LOG

The apache2 error log:

File "/var/www/webApp/webapp.wsgi", line 5, in <module>,
logging.basicConfig(filename='app.log', level=logging.INFO),
File "/usr/lib/python2.7/logging/init__.py", line 1554, in basicConfig, hdlr = FileHandler(filename, mode), File "/usr/lib/python2.7/logging/_init_.py", line 920, in _init_, StreamHandler._init_(self, self._open()), File "/usr/lib/python2.7/logging/__init.py", line 950, in _open,
stream = open(self.baseFilename, self.mode),
IOError: [Errno 13] Permission denied: '/app.log', </module>

1 Reply

Your flask app is likely running with the effective uid/gid of the web server (www-data on Debian/Ubuntu) while /var/log is owned by root; ergo, the permissions violation.

What you need to do is one of the following:

  • Change the location of the flask log from /var/log to someplace the web server has permission to write; or

  • Change the flask logging setup to use the syslog service.

My plan of attack would be to the first thing and log to /tmp while I figured out the 2nd thing. The 2nd thing is really what you want.

I don't know anything about python and even less about flask but I do know that python has a syslog logging handler:

https://www.programcreek.com/python/example/3488/logging.handlers.SysLogHandler

I have no idea if this is helpful to you or not but it should get you pointed in the right direction.

-- sw

Reply

Please enter an answer
Tips:

You can mention users to notify them: @username

You can use Markdown to format your question. For more examples see the Markdown Cheatsheet.

> I’m a blockquote.

I’m a blockquote.

[I'm a link] (https://www.google.com)

I'm a link

**I am bold** I am bold

*I am italicized* I am italicized

Community Code of Conduct