diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 7d18e2c08c5d9c9b03bf7d9f943f548e925f1cd1..b8c6e60ed7364b96d7e29ddb141f41eedec89d3c 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -21,11 +21,6 @@ before_script:
     paths:
       - .gems
 
-rails_41_ruby_23:
-  <<: *ruby_23
-  script:
-    - bundle exec appraisal rails41 bundle exec rspec
-
 rails_42_ruby_23:
   <<: *ruby_23
   script:
@@ -50,3 +45,13 @@ rails_51_ruby_24:
   <<: *ruby_24
   script:
     - bundle exec appraisal rails51 bundle exec rspec
+
+rails_52_ruby_23:
+  <<: *ruby_23
+  script:
+    - bundle exec appraisal rails52 bundle exec rspec
+
+rails_52_ruby_24:
+  <<: *ruby_24
+  script:
+    - bundle exec appraisal rails52 bundle exec rspec
diff --git a/Appraisals b/Appraisals
index ccca3a04df2e394b7aebfc3b8c0203cca799620e..b6382fa7ff0d1f6085042eeb2fabfc2cc0c1d0c7 100644
--- a/Appraisals
+++ b/Appraisals
@@ -1,15 +1,15 @@
-appraise "rails41" do
-  gem "activesupport", "4.1"
-end
-
 appraise "rails42" do
-  gem "activesupport", "4.2"
+  gem "activesupport", "~> 4.2.10"
 end
 
 appraise "rails50" do
-  gem "activesupport", "5.0"
+  gem "activesupport", "~> 5.0.0"
 end
 
 appraise "rails51" do
-  gem "activesupport", "5.1"
+  gem "activesupport", "~> 5.1.0"
+end
+
+appraise "rails52" do
+  gem "activesupport", "~> 5.2.0"
 end
diff --git a/Gemfile b/Gemfile
index 85446615e3869804c461efe5c4614333a9bf448a..deb8331e066cbede7df14f7bc1fe34a8c4d288e0 100644
--- a/Gemfile
+++ b/Gemfile
@@ -10,6 +10,7 @@ group :test do
   gem 'actionpack', '>= 4.0'
   gem 'active_interaction', '~> 3.0'
   gem 'appsignal'
+  gem 'climate_control' # For ENV modification in specs
   gem 'combustion', '~> 0.5.2'
   gem 'fakefs', require: 'fakefs/safe'
   gem 'guard-rspec', '~> 4.2.6'
diff --git a/Gemfile.lock b/Gemfile.lock
index 25e647b9dd8717d120d37bbd37f0cdb18caed544..01e77c3e5a9527736aa2f213dd649bc2e11e8929 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -8,7 +8,7 @@ GIT
 PATH
   remote: .
   specs:
-    roqua-support (0.1.31)
+    roqua-support (0.1.32)
       active_interaction (~> 3.0)
       activesupport (>= 3.2, < 6)
       naught (~> 1.0)
@@ -52,6 +52,7 @@ GEM
     arel (7.1.4)
     ast (2.3.0)
     builder (3.2.3)
+    climate_control (0.2.0)
     coderay (1.1.1)
     combustion (0.5.5)
       activesupport (>= 3.0.0)
@@ -182,6 +183,7 @@ DEPENDENCIES
   appraisal
   appsignal
   bundler (~> 1.0)
+  climate_control
   combustion (~> 0.5.2)
   delayed_job_active_record
   fakefs
@@ -197,4 +199,4 @@ DEPENDENCIES
   timecop
 
 BUNDLED WITH
-   1.16.2
+   1.16.4
diff --git a/gemfiles/rails42.gemfile b/gemfiles/rails42.gemfile
index b010e367d25479efbbb95de847fab249fdec3046..45d357b36cd5057e5dd936cb55b95bc91ef74e87 100644
--- a/gemfiles/rails42.gemfile
+++ b/gemfiles/rails42.gemfile
@@ -4,13 +4,15 @@ source "https://rubygems.org"
 
 gem "appraisal"
 gem "roqua_styleguide", :git => "https://gitlab.roqua.nl/roqua/styleguide.git"
-gem "activesupport", "4.2"
+gem "activesupport", "~> 4.2.10"
 
 group :test do
   gem "actionpack", ">= 4.0"
   gem "active_interaction", "~> 3.0"
   gem "appsignal"
+  gem "climate_control"
   gem "combustion", "~> 0.5.2"
+  gem "fakefs", :require => "fakefs/safe"
   gem "guard-rspec", "~> 4.2.6"
   gem "responders"
   gem "rspec-instrumentation-matcher"
diff --git a/gemfiles/rails50.gemfile b/gemfiles/rails50.gemfile
index c8d09da4d4c82b7b458b441f2e28a7a2a5e0c287..ab469855a096417c1fb3365f9cd29d5f163b22d5 100644
--- a/gemfiles/rails50.gemfile
+++ b/gemfiles/rails50.gemfile
@@ -4,13 +4,15 @@ source "https://rubygems.org"
 
 gem "appraisal"
 gem "roqua_styleguide", :git => "https://gitlab.roqua.nl/roqua/styleguide.git"
-gem "activesupport", "5.0"
+gem "activesupport", "~> 5.0.0"
 
 group :test do
   gem "actionpack", ">= 4.0"
   gem "active_interaction", "~> 3.0"
   gem "appsignal"
+  gem "climate_control"
   gem "combustion", "~> 0.5.2"
+  gem "fakefs", :require => "fakefs/safe"
   gem "guard-rspec", "~> 4.2.6"
   gem "responders"
   gem "rspec-instrumentation-matcher"
diff --git a/gemfiles/rails51.gemfile b/gemfiles/rails51.gemfile
index c4e6b8afdf5807cf9664df43bdbff737a6c4751c..585d87f73455534c25ff7a6de174f9cf33d5d0e8 100644
--- a/gemfiles/rails51.gemfile
+++ b/gemfiles/rails51.gemfile
@@ -4,13 +4,15 @@ source "https://rubygems.org"
 
 gem "appraisal"
 gem "roqua_styleguide", :git => "https://gitlab.roqua.nl/roqua/styleguide.git"
-gem "activesupport", "5.1"
+gem "activesupport", "~> 5.1.0"
 
 group :test do
   gem "actionpack", ">= 4.0"
   gem "active_interaction", "~> 3.0"
   gem "appsignal"
+  gem "climate_control"
   gem "combustion", "~> 0.5.2"
+  gem "fakefs", :require => "fakefs/safe"
   gem "guard-rspec", "~> 4.2.6"
   gem "responders"
   gem "rspec-instrumentation-matcher"
diff --git a/gemfiles/rails41.gemfile b/gemfiles/rails52.gemfile
similarity index 81%
rename from gemfiles/rails41.gemfile
rename to gemfiles/rails52.gemfile
index dfe8d29621c49ce376e020001909d49ae991d8f0..64c8fa7ce12096aad2e70d5f3834d6375bead912 100644
--- a/gemfiles/rails41.gemfile
+++ b/gemfiles/rails52.gemfile
@@ -4,13 +4,15 @@ source "https://rubygems.org"
 
 gem "appraisal"
 gem "roqua_styleguide", :git => "https://gitlab.roqua.nl/roqua/styleguide.git"
-gem "activesupport", "4.1"
+gem "activesupport", "~> 5.2.0"
 
 group :test do
   gem "actionpack", ">= 4.0"
   gem "active_interaction", "~> 3.0"
   gem "appsignal"
+  gem "climate_control"
   gem "combustion", "~> 0.5.2"
+  gem "fakefs", :require => "fakefs/safe"
   gem "guard-rspec", "~> 4.2.6"
   gem "responders"
   gem "rspec-instrumentation-matcher"
diff --git a/lib/roqua/logging/roqua_logging_railtie.rb b/lib/roqua/logging/roqua_logging_railtie.rb
new file mode 100644
index 0000000000000000000000000000000000000000..15752d92e9f5557e8d3e68e9f8aa2b9f807c7e96
--- /dev/null
+++ b/lib/roqua/logging/roqua_logging_railtie.rb
@@ -0,0 +1,13 @@
+class RoquaLoggingRailtie < Rails::Railtie
+  initializer 'roqua_logging_railtie.configure_roqua_logging' do
+    RoquaLoggingRailtie.configure if ENV['RAILS_LOG_TO_STDOUT_USING_ROQUA_LOGGER'].present?
+  end
+
+  def self.configure
+    Roqua.logger = ActiveSupport::Logger.new(STDOUT)
+    Roqua.logger.logger.formatter = Logger::Formatter.new
+
+    require 'roqua/support/request_logger'
+    Roqua::Support::RequestLogger.attach_to :action_controller
+  end
+end
diff --git a/lib/roqua/support.rb b/lib/roqua/support.rb
index 879cab8cacd860219798261a52dd8da978e3d833..65c9204c1e4d9cb6325af36431bf9cb57b311676 100644
--- a/lib/roqua/support.rb
+++ b/lib/roqua/support.rb
@@ -1,4 +1,5 @@
 require 'logger'
+require 'roqua/logging/roqua_logging_railtie'
 require 'roqua/support/instrumentation'
 require 'roqua/support/log_wrapper'
 require 'roqua/support/errors'
diff --git a/spec/roqua/logging/roqua_logging_railtie_spec.rb b/spec/roqua/logging/roqua_logging_railtie_spec.rb
new file mode 100644
index 0000000000000000000000000000000000000000..bb0923a1002cd0492a0dfcc03c5416676af2f9dd
--- /dev/null
+++ b/spec/roqua/logging/roqua_logging_railtie_spec.rb
@@ -0,0 +1,42 @@
+require 'spec_helper'
+
+require 'roqua/support/request_logger'
+require 'roqua/logging/roqua_logging_railtie'
+
+describe RoquaLoggingRailtie do
+  let(:initializer_key) { 'roqua_logging_railtie.configure_roqua_logging' }
+
+  subject(:initializer) do
+    Rails.application.initializers.select { |i| i.name == initializer_key }.first
+  end
+
+  it 'loads the initializer' do
+    expect(Rails.application.initializers.map(&:name)).to include(initializer_key)
+  end
+
+  it 'attaches Roqua::Support::RequestLogger to action_controller' do
+    expect(Roqua::Support::RequestLogger).to receive(:attach_to).with(:action_controller)
+    RoquaLoggingRailtie.configure
+  end
+
+  it 'logs to STDOUT' do
+    RoquaLoggingRailtie.configure
+    expect(ActiveSupport::Logger.logger_outputs_to?(Roqua.logger.logger, STDOUT)).to be_truthy
+  end
+
+  it 'when RAILS_LOG_TO_STDOUT_USING_ROQUA_LOGGER is blank' do
+    expect(RoquaLoggingRailtie).to_not receive(:configure)
+
+    ClimateControl.modify RAILS_LOG_TO_STDOUT_USING_ROQUA_LOGGER: '' do
+      initializer.block.call
+    end
+  end
+
+  it 'when RAILS_LOG_TO_STDOUT_USING_ROQUA_LOGGER is present' do
+    expect(RoquaLoggingRailtie).to receive(:configure)
+
+    ClimateControl.modify RAILS_LOG_TO_STDOUT_USING_ROQUA_LOGGER: 'true' do
+      initializer.block.call
+    end
+  end
+end