Skip to content

Commit 618e094

Browse files
authored
Merge pull request reidmorrison#118 from hoangtuanictvn/sensitive_arguments
Check log_arguments? to hide log for sensitive arguments in ActiveJob
2 parents 58c99c4 + 4e61093 commit 618e094

File tree

5 files changed

+90
-14
lines changed

5 files changed

+90
-14
lines changed

.travis.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,17 +22,26 @@ matrix:
2222
- name: "Rails 6.0 on Ruby 2.6.6"
2323
rvm: 2.6.6
2424
gemfile: gemfiles/rails_6.0.gemfile
25+
- name: "Rails 6.1 on Ruby 2.6.6"
26+
rvm: 2.6.6
27+
gemfile: gemfiles/rails_6.1.gemfile
2528

2629
- name: "Rails 6.0 on Ruby 2.7.1"
2730
rvm: 2.7.1
2831
gemfile: gemfiles/rails_6.0.gemfile
32+
- name: "Rails 6.1 on Ruby 2.7.1"
33+
rvm: 2.7.1
34+
gemfile: gemfiles/rails_6.1.gemfile
2935

3036
- name: "Rails 5.2 on JRuby 9.2.11.1"
3137
rvm: jruby-9.2.11.1
3238
gemfile: gemfiles/rails_5.2.gemfile
3339
- name: "Rails 6.0 on JRuby 9.2.11.1"
3440
rvm: jruby-9.2.11.1
3541
gemfile: gemfiles/rails_6.0.gemfile
42+
- name: "Rails 6.1 on JRuby 9.2.11.1"
43+
rvm: jruby-9.2.11.1
44+
gemfile: gemfiles/rails_6.1.gemfile
3645

3746
allow_failures:
3847
- rvm: jruby-9.2.11.1

Appraisals

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,9 @@ appraise "rails_6.0" do
1515
gem "activerecord-jdbcsqlite3-adapter", "~> 60.0", platform: :jruby
1616
gem "sqlite3", "~> 1.4.0", platform: :ruby
1717
end
18+
19+
appraise "rails_6.1" do
20+
gem "rails", "~> 6.1.0"
21+
gem "activerecord-jdbcsqlite3-adapter", "~> 61.0", platform: :jruby
22+
gem "sqlite3", "~> 1.4.0", platform: :ruby
23+
end

gemfiles/rails_6.1.gemfile

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# This file was generated by Appraisal
2+
3+
source "https://rubygems.org"
4+
5+
gem "appraisal"
6+
gem "puma"
7+
gem "active_model_serializers"
8+
gem "amazing_print"
9+
gem "minitest"
10+
gem "rake"
11+
gem "sprockets", "< 4.0"
12+
gem "rails", "~> 6.1.0"
13+
gem "activerecord-jdbcsqlite3-adapter", "~> 61.0", platform: :jruby
14+
gem "sqlite3", "~> 1.4.0", platform: :ruby
15+
gem "jdbc-sqlite3", platform: :jruby
16+
17+
group :development do
18+
gem "rubocop"
19+
end
20+
21+
gemspec path: "../"

lib/rails_semantic_logger/active_job/log_subscriber.rb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,11 @@ def adapter_name
7878
end
7979

8080
def formatted_args
81-
JSON.pretty_generate(job.arguments.map { |arg| format(arg) })
81+
if defined?(job.class.log_arguments?) && !job.class.log_arguments?
82+
""
83+
else
84+
JSON.pretty_generate(job.arguments.map { |arg| format(arg) })
85+
end
8286
end
8387

8488
def format(arg)

test/active_job_test.rb

Lines changed: 49 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,22 @@ def perform(record)
1010
end
1111
end
1212

13+
class SensitiveJob < ActiveJob::Base
14+
queue_as :my_jobs
15+
16+
if Rails.version.to_f >= 6.1
17+
self.log_arguments = false
18+
else
19+
def self.log_arguments?
20+
false
21+
end
22+
end
23+
24+
def perform(record)
25+
"Received: #{record}"
26+
end
27+
end
28+
1329
class TestModel
1430
include GlobalID::Identification
1531

@@ -76,28 +92,48 @@ def id
7692
Time.zone.now,
7793
"transaction_id",
7894
adapter: ActiveJob::QueueAdapters::InlineAdapter.new,
79-
job: MyJob.new(TestModel.new, 1, "string", foo: "bar")
95+
job: job
8096
end
8197

8298
describe "#payload" do
8399
specify do
84100
assert_equal(formatter.payload[:event_name], "perform.active_job")
85101
assert_equal(formatter.payload[:adapter], "Inline")
86102
assert_equal(formatter.payload[:queue], "my_jobs")
87-
assert_equal(formatter.payload[:job_class], "ActiveJobTest::MyJob")
88103
assert_kind_of(String, formatter.payload[:job_id])
89104
assert_kind_of(Float, formatter.payload[:duration])
90-
arguments = <<~ARGS.chomp
91-
[
92-
"gid://dummy/ActiveJobTest::TestModel/15",
93-
1,
94-
"string",
95-
{
96-
"foo": "bar"
97-
}
98-
]
99-
ARGS
100-
assert_equal(formatter.payload[:arguments], arguments)
105+
end
106+
107+
describe "Show arguments in log" do
108+
let(:job) do
109+
MyJob.new(TestModel.new, 1, "string", foo: "bar")
110+
end
111+
112+
specify do
113+
assert_equal(formatter.payload[:job_class], "ActiveJobTest::MyJob")
114+
arguments = <<~ARGS.chomp
115+
[
116+
"gid://dummy/ActiveJobTest::TestModel/15",
117+
1,
118+
"string",
119+
{
120+
"foo": "bar"
121+
}
122+
]
123+
ARGS
124+
assert_equal(formatter.payload[:arguments], arguments)
125+
end
126+
end
127+
128+
describe "Hide arguments from log" do
129+
let(:job) do
130+
SensitiveJob.new(TestModel.new, 1, "string", foo: "bar")
131+
end
132+
133+
specify do
134+
assert_equal(formatter.payload[:job_class], "ActiveJobTest::SensitiveJob")
135+
assert_equal(formatter.payload[:arguments], "")
136+
end
101137
end
102138
end
103139

0 commit comments

Comments
 (0)