AWS Elastic Beanstalkでアプリケーションログをどのように管理しますか?アプリケーションログをどのファイルに書き込むのですか?開発環境で次のLogging設定を使用していますが、AWSにデプロイすると機能しません。
前もって感謝します!
DEBUG_LOG_DIR = BASE_DIR + "/Django_debug.log"
LOGGING = {
'version': 1,
'disable_existing_loggers': True,
# How to format the output
'formatters': {
'standard': {
'format' : "[%(asctime)s] %(levelname)s [%(name)s:%(lineno)s] %(message)s",
'datefmt' : "%d/%b/%Y %H:%M:%S"
},
},
# Log handlers (where to go)
'handlers': {
'null': {
'level':'DEBUG',
'class':'Django.utils.log.NullHandler',
},
'log_file': {
'level':'DEBUG',
'class':'logging.handlers.RotatingFileHandler',
'filename': DEBUG_LOG_DIR,
'maxBytes': 50000,
'backupCount': 2,
'formatter': 'standard',
},
'console':{
'level':'INFO',
'class':'logging.StreamHandler',
'formatter': 'standard'
},
'mail_admins': {
'level': 'ERROR',
'class': 'Django.utils.log.AdminEmailHandler',
},
},
# Loggers (where does the log come from)
'loggers': {
'repackager': {
'handlers': ['console', 'log_file'],
'level': 'DEBUG',
'propagate': True,
},
'Django': {
'handlers':['console'],
'propagate': True,
'level':'WARN',
},
'Django.db.backends': {
'handlers': ['console', 'log_file'],
'level': 'WARN',
'propagate': False,
},
'': {
'handlers': ['console', 'log_file'],
'level': 'DEBUG',
},
}
}
わかりました、それを行う方法を見つけました。
最初にssh経由でec2マシンに接続し、次に/ var/logにapp_logsという名前のフォルダーをrootユーザーで作成します。
mkdir /var/log/app_logs
その後、私は次のことをしました:
cd /var/log/
chmod g+s app_logs/
setfacl -d -m g::rw app_logs/
chown wsgi:wsgi app_logs/
これにより、このフォルダーで作成されたすべてのファイルが所有者としてwsgiを持ち、ファイルが属するグループに対して書き込み可能になります。 Django appによって作成されたログファイルには所有者および所有者グループとしてrootが含まれているが、アプリケーションはwsgiユーザーを介して実行されていることに気づいたためです。
最後に、DEBUG_LOG_DIRを/var/log/app_logs/Django_debug.logに変更しました
同じような問題がありましたが、Elastic Beanstalkでしたので、アプリの.ebextensions
フォルダーに設定ファイル(例:applogs.config)を作成しました。これにより、app-logsフォルダーがまだ存在しない場合は作成され、アプリがログを書き込むことができるようにファイルの権限と所有者が設定されます。
commands:
00_create_dir:
command: mkdir -p /var/log/app-logs
01_change_permissions:
command: chmod g+s /var/log/app-logs
02_change_owner:
command: chown wsgi:wsgi /var/log/app-logs
最後に、Django設定で:
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'file': {
'level': 'DEBUG',
'class': 'logging.FileHandler',
'filename': '/var/log/app-logs/Django.log',
},
},
'loggers': {
'Django': {
'handlers': ['file'],
'level': 'DEBUG',
'propagate': True,
},
},
}
さらに、Webを使用してbeanstalkログからログにアクセスできるようにする場合は、これを.ebextensionsのファイルに追加します。
files:
"/opt/elasticbeanstalk/tasks/taillogs.d/Django.conf":
mode: "000755"
owner: root
group: root
content: |
/var/log/app-logs/Django.log
Beanstalkの設定を必要としない簡単な方法があります。
Django[〜#〜] logging [〜#〜]の設定で、ファイル '/ opt/python/log/{log_file_name}'。ログは、「Logs」の下のbeanstalk環境メニューからアクセスできます。
LOGGING = {
...,
'handlers': {
'logfile': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler',
'filename': '/opt/python/log/{log_file_name}',
},
},
'loggers': {
'debugger': {
'level': 'DEBUG',
'handlers': ['logfile'],
'propagate': False,
},
}
この場所は、次のドキュメントに記載されています。
Linuxパーミッションの初心者として、それが機能するまでに少し時間がかかりました。上記の回答を要約すると、次のことが最終的に私にとってうまくいきました:
logging.config
commands:
00_create_dir:
command: mkdir -p /var/log/app-logs
01_change_permissions:
command: chmod g+s /var/log/app-logs
02_change_default_owner:
command: setfacl -d -m g::rw /var/log/app-logs
03_change_owner:
command: chown wsgi:wsgi /var/log/app-logs
settings.py
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'file': {
'level': 'DEBUG',
'class': 'logging.FileHandler',
'filename': '/var/log/app-logs/Django.log',
},
},
'loggers': {
'Django': {
'handlers': ['file'],
'level': 'DEBUG',
'propagate': True,
},
},
}
これにより、「ebログ」を使用する個別のセクションとして、またはBeanstalk環境内のセクション「ログ」としてログを表示できます。