logist 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 89bc1e23d5c8e20fc4ab77eb5c195013da0ae18e
4
- data.tar.gz: 8c549ad528ec961a5420c4bb0406d543bf015391
2
+ SHA256:
3
+ metadata.gz: 6e6ad3e32e005fb5cd93ab69c54a65cda28d6c39339084d0d85ab0d506478cb8
4
+ data.tar.gz: fba3d6f1f25d24836fbe8bc63d0e45f7061001144b4b9b472898cda2dfc3e4ca
5
5
  SHA512:
6
- metadata.gz: 8e03a2c4128740077ffc4b0f10bf72fc10df8b01d2b82b536389db2d0a1f5045249be351b984fb08df2eee3a4a2cd73475104965349379f814332c5c1179a24d
7
- data.tar.gz: 0cd0002275fe6086b0207e7e712248fb969139cf9d7c0c157855f77039da68348f7f606696fdbae4ab43353fbbc6dee9f99fe965d512b431e755e82dce7c6877
6
+ metadata.gz: 1d9c68a45b69f8a44f3416359582d60a3ad3b7cc6c2e801f76d9f3b5712a2afa40440d9220da527abfe8fa9582fcf810e4b2f6a01ee96bdf48925007e219b299
7
+ data.tar.gz: fbb266f39ea4f7175e1a55a683092944885a15152ad13bc790dfd3572140cb068f149fefee7814859547dbf93382347d0be660eb0321bb8e077cf7e6deb972e6
@@ -1,12 +1,16 @@
1
1
  sudo: false
2
2
  language: ruby
3
3
  rvm:
4
- - 2.1.10
5
- - 2.2.9
6
- - 2.3.6
7
- - 2.4.3
4
+ - 2.2
5
+ - 2.3
6
+ - 2.4
7
+ - 2.5
8
+ - 2.6
8
9
  before_install: gem install bundler -v 1.15.4
9
10
  install: bundle install --jobs=3 --retry=3 --path=vendor/bundle
10
11
  cache:
11
12
  directories: vendor/bundle
12
13
  script: bundle exec rspec spec
14
+ notifications:
15
+ email: false
16
+
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # Logist
2
- [![Build Status](https://travis-ci.org/h3poteto/logist.svg?branch=travis)](https://travis-ci.org/h3poteto/logist)
2
+ [![Build Status](https://travis-ci.com/h3poteto/logist.svg?branch=master)](https://travis-ci.com/h3poteto/logist)
3
+ [![Gem Version](https://badge.fury.io/rb/logist.svg)](https://badge.fury.io/rb/logist)
4
+ [![GitHub release](https://img.shields.io/github/release/h3poteto/logist.svg)](https://github.com/h3poteto/logist/releases)
3
5
 
4
6
  This gem provides json format for logger in Rails. Logist output json log like this:
5
7
 
@@ -64,6 +66,25 @@ Rails.application.configure do
64
66
  end
65
67
  ```
66
68
 
69
+ ### flat_json option
70
+
71
+ If you want to log Hash object, but you don't want to have nested JSON, you can set `flat_json=true`:
72
+
73
+ ```ruby
74
+ config.logger.formatter.flat_json = true
75
+ ```
76
+
77
+ When `flat_json=false` (default):
78
+
79
+ ```json
80
+ {"level":"INFO","message":{"foo":"bar"}}
81
+ ```
82
+
83
+ When `flat_json=true`:
84
+
85
+ ```json
86
+ {"level":"INFO","foo":"bar"}
87
+ ```
67
88
 
68
89
 
69
90
  ## Development
@@ -5,14 +5,29 @@ require 'rails'
5
5
  module Logist
6
6
  module Formatter
7
7
  class Json < ::Logger::Formatter
8
- def call(severity, timestamp, progname, msg)
9
- begin
10
- j = ::JSON.parse(msg)
11
- temp = {level: severity, timestamp: format_datetime(timestamp), environment: ::Rails.env}.merge(j)
12
- ::JSON.dump(temp) + "\n"
13
- rescue JSON::ParserError
14
- "{\"level\":\"#{severity}\",\"timestamp\":\"#{format_datetime(timestamp)}\",\"message\":\"#{msg}\",\"environment\":\"#{::Rails.env}\"}\n"
8
+ attr_accessor :flat_json
9
+
10
+ def call(severity, timestamp, progname, raw_msg)
11
+ msg = normalize_message(raw_msg)
12
+ payload = { level: severity, timestamp: format_datetime(timestamp), environment: ::Rails.env }
13
+
14
+ if flat_json && msg.is_a?(Hash)
15
+ payload.merge!(msg)
16
+ else
17
+ payload.merge!(message: msg)
15
18
  end
19
+
20
+ payload.to_json << "\n"
21
+ end
22
+
23
+ private
24
+
25
+ def normalize_message(raw_msg)
26
+ return raw_msg unless raw_msg.is_a?(String)
27
+
28
+ JSON.parse(raw_msg)
29
+ rescue JSON::ParserError
30
+ raw_msg
16
31
  end
17
32
  end
18
33
  end
@@ -1,16 +1,38 @@
1
+ require 'active_support/logger_silence'
2
+ require 'active_support/logger_thread_safe_level'
3
+ require 'logger'
4
+
1
5
  module Logist
2
6
  class Logger < ::Logger
7
+ include ActiveSupport::LoggerThreadSafeLevel
8
+
9
+ # https://github.com/rails/rails/pull/34045
10
+ if defined?(ActiveSupport::LoggerSilence)
11
+ include ActiveSupport::LoggerSilence
12
+ else
13
+ include LoggerSilence
14
+ end
15
+
3
16
  def initialize(logdev, shift_age = 0, shift_size = 1048576, level: DEBUG,
4
- progname: nil, formatter: nil, datetime_format: nil,
17
+ progname: nil, formatter: nil, datetime_format: nil, flat_json: false,
5
18
  shift_period_suffix: '%Y%m%d')
6
19
  # I think that Logist should support other formats in the future.
7
20
  # But, as it is now, Logist only support json format.
8
21
  # So this line force json format all environments.
9
22
  @formatter = Logist::Formatter::Json.new
10
23
  @formatter.datetime_format = datetime_format
24
+ @formatter.flat_json = flat_json
11
25
  super(logdev, shift_age, shift_size, level: level,
12
26
  progname: progname, formatter: @formatter, datetime_format: datetime_format,
13
27
  shift_period_suffix: shift_period_suffix)
28
+
29
+ # https://github.com/rails/rails/pull/34055
30
+ # even with ^ respond_to?(:after_initialize) is still true
31
+ # but we know not to run it if ActiveSupport::LoggerSilence is defined, since that was added in the same rails version
32
+ # via https://github.com/rails/rails/pull/34045
33
+ if !defined?(ActiveSupport::LoggerSilence) && respond_to?(:after_initialize)
34
+ after_initialize
35
+ end
14
36
  end
15
37
  end
16
38
  end
@@ -1,3 +1,3 @@
1
1
  module Logist
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -30,11 +30,11 @@ Gem::Specification.new do |spec|
30
30
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
31
31
  spec.require_paths = ["lib"]
32
32
 
33
- spec.add_development_dependency "bundler", "~> 1.15"
34
- spec.add_development_dependency "rake", "~> 10.0"
33
+ spec.add_development_dependency "rake", "~> 13.0"
35
34
  spec.add_development_dependency "rspec", "~> 3.0"
36
35
 
37
36
  spec.add_runtime_dependency "json", ">= 1.8"
38
37
  spec.add_runtime_dependency "railties", ">= 4"
38
+ spec.add_runtime_dependency "activesupport", ">= 4.2"
39
39
  spec.add_runtime_dependency "lograge", ">= 0.7", "< 1.0"
40
40
  end
metadata CHANGED
@@ -1,43 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logist
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - AkiraFukushima
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-12-19 00:00:00.000000000 Z
11
+ date: 2020-10-08 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: bundler
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '1.15'
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: '1.15'
27
13
  - !ruby/object:Gem::Dependency
28
14
  name: rake
29
15
  requirement: !ruby/object:Gem::Requirement
30
16
  requirements:
31
17
  - - "~>"
32
18
  - !ruby/object:Gem::Version
33
- version: '10.0'
19
+ version: '13.0'
34
20
  type: :development
35
21
  prerelease: false
36
22
  version_requirements: !ruby/object:Gem::Requirement
37
23
  requirements:
38
24
  - - "~>"
39
25
  - !ruby/object:Gem::Version
40
- version: '10.0'
26
+ version: '13.0'
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: rspec
43
29
  requirement: !ruby/object:Gem::Requirement
@@ -80,6 +66,20 @@ dependencies:
80
66
  - - ">="
81
67
  - !ruby/object:Gem::Version
82
68
  version: '4'
69
+ - !ruby/object:Gem::Dependency
70
+ name: activesupport
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '4.2'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '4.2'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: lograge
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -128,7 +128,7 @@ licenses:
128
128
  - MIT
129
129
  metadata:
130
130
  allowed_push_host: https://rubygems.org
131
- post_install_message:
131
+ post_install_message:
132
132
  rdoc_options: []
133
133
  require_paths:
134
134
  - lib
@@ -143,9 +143,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
143
143
  - !ruby/object:Gem::Version
144
144
  version: '0'
145
145
  requirements: []
146
- rubyforge_project:
147
- rubygems_version: 2.6.11
148
- signing_key:
146
+ rubygems_version: 3.1.2
147
+ signing_key:
149
148
  specification_version: 4
150
149
  summary: Change log format to json in Rails.
151
150
  test_files: []