discourse/config/initializers/102-truncate-logs.rb
Alan Guo Xiang Tan f2e52ed33c
SECURITY: Add a default limit as to when logs should be truncated
Why this change?

This ensures that malicious requests cannot end up causing the logs to
quickly fill up. The default chosen is sufficient for most legitimate
requests to the Discourse application.

When truncation happens, parsing of logs in supported format like
lograge may break down.
2023-10-16 10:51:31 -04:00

32 lines
900 B
Ruby

# frozen_string_literal: true
if Rails.env.production? || ENV["ENABLE_LOGS_TRUNCATION"] == "1"
def set_or_extend_truncate_logs_formatter(logger)
if logger.formatter
logger.formatter.extend(
Module.new do
def call(*args)
truncate_logs_formatter.call(super(*args))
end
def truncate_logs_formatter
@formatter ||=
TruncateLogsFormatter.new(log_line_max_chars: GlobalSetting.log_line_max_chars)
end
end,
)
else
logger.formatter =
TruncateLogsFormatter.new(log_line_max_chars: GlobalSetting.log_line_max_chars)
end
end
Rails.application.config.to_prepare do
set_or_extend_truncate_logs_formatter(Rails.logger)
if Rails.logger.respond_to? :chained
Rails.logger.chained.each { |logger| set_or_extend_truncate_logs_formatter(logger) }
end
end
end