We use fluentd to aggregate the logs and send them to both an ELK stack and S3 bucket for long term storage.
We use Logit as a hosted ELK stack.
We use AWS S3 as a long term storage for logs.
We use Sentry to monitor the application, including all reportable exceptions and CSP violations.