Djangoで作成したウェブアプリケーション上でDjangoのログファイルを表示させたいです。
settings.pyで
LOGGING = { 'version': 1, 'disable_existing_loggers':False, 'formatters':{ 'production': { 'format': '%(asctime)s [%(levelname)s] %(process)d %(thread)d ' '%(pathname)s:%(lineno)d %(message)s' }, }, 'handlers':{ 'file': { 'level': 'DEBUG', 'class': 'logging.handlers.SysLogHandler', 'formatter': 'production', 'address': '/dev/log', 'facility': 'local0', }, }, 'loggers': { '': { 'handlers': ['file'], 'level': 'DEBUG', 'propagate': False, }, 'django': { 'handlers': ['file'], 'level': 'DEBUG', 'propagate': False, }, }, }
以上のようにSyslogを使用し、/var/log/projectName/ディレクトリ以下にログファイルを出力しています。
ここでのパーミッションは、
-rw-r----- 1 syslog adm
になっています。このadmにはsyslogユーザとログインユーザが含まれています。
ビューでは、
def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) file_name = self.kwargs['file_name'] path = f'/var/log/projectName/{file_name}' if 'gz' in file_name: with gzip.open(path, 'tr', 'utf_8') as fi: l = fi.readlines() context['file_text'] = l else: with open(path, 'r') as f: l = f.readlines() context['file_text'] = l return context
としているのですが、Permission Deniedになってしまいます。
そもそも読み込み権限がないのでファイルを開けないのかと思いますが、どのようにすればDjangoのウェブアプリ上でログファイルを表示させることができるでしょうか?
また、/va/log/projectName以下のログファイルのパーミッションに読み取り権限のみ付与するというのはセキュリティ等の観点から適当な対処法でしょうか?
何か良い方法をご存知の方がおりましたらご教示ください。
よろしくお願いいたします。
あなたの回答
tips
プレビュー