structured_logger 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4ce68b01c710f32eb7c7aa152f407e1ba124e6f4
4
- data.tar.gz: 5f5ab981b8f41b2ac436ec000fff1f23135d9207
3
+ metadata.gz: 6ebc7ffd6ba59caa43ceafbb4bbfbdd9e5024ac2
4
+ data.tar.gz: 3dfecb3f06b04ca4a363016857a9383dcb378a09
5
5
  SHA512:
6
- metadata.gz: 40fd946186fcf0d3a4a513cf68d5483519f6f36a107bb5827a516cb71069e9a34c285413a4050545addfc8efaa672b4dbc19e84d1a3bebcae386a38092a071cb
7
- data.tar.gz: 5ef933b506c400e0363375c7ea29752d20df272826673110c5f9cb612d4952809fad7b826d28d65b57f78b4c662e8376d9da02ecda64f50746d8b39afaf9f46d
6
+ metadata.gz: e712c962c7cf95483f6b134be48790053dc8b57d1a473d5fcb5a36e4f5539aca0fcffe498e079dad5b8a11bf4f1ec482b088219fc243a6876a74e2e749eba589
7
+ data.tar.gz: c928328bedea1f3cd87960e6f9e1f9ee36b927bd08b4711d3df70291b912d77c164bcc1a985cbd26db8718ade6e9bb8435aeb4e6a0866af9f8787b8be73ea7aa
data/README.md CHANGED
@@ -50,6 +50,18 @@ l.error("Something happend")
50
50
  #=> E, [2015-08-25T06:43:47.798889 #23623] ERROR -- : Something happend
51
51
  ```
52
52
 
53
+ Also we can use it with `ActiveSupport::TaggedLogging`.
54
+
55
+ ```ruby
56
+ l = ActiveSupport::TaggedLogging.new(StructuredLogger.new(STDOUT))
57
+ l.tagged(:crawler) do
58
+ l.tagged(:downloading) do
59
+ l.warn("malformed file format", path: downloaded_path.to_s)
60
+ end
61
+ end
62
+ #=> [crawler] [downloading] malformed file format: path="/opt/app/tmp/1234.bin"
63
+ ```
64
+
53
65
  ## Development
54
66
 
55
67
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake false` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
@@ -6,16 +6,15 @@ class StructuredLogger
6
6
  include Logger::Severity
7
7
  autoload :VERSION, "structured_logger/version"
8
8
 
9
+ attr_accessor :progname
9
10
  attr_accessor :formatter
10
11
 
11
- def self.severity_name(severity)
12
- return Logger::SEV_LABEL[severity] || "ANY"
13
- end
14
-
15
12
  def initialize(io)
16
13
  @logger = Logger.new(io)
14
+ @progname = nil
17
15
  @formatter = nil
18
- @default_formatter = Formatter.new
16
+ @default_formatter = Logger::Formatter.new
17
+ @argument_formatter = ArgumentFormatter.new
19
18
  end
20
19
 
21
20
  def_delegators :@logger,
@@ -49,42 +48,42 @@ class StructuredLogger
49
48
  if level > severity
50
49
  return
51
50
  end
52
- if block_given?
53
- *args = yield
54
- end
55
- s = (@formatter || @default_formatter).call(severity, Time.now, *args)
51
+ block_result = block_given? ? yield : nil
52
+ s_severity = format_severity(severity)
53
+ time = Time.now
54
+ message = @argument_formatter.call(severity: s_severity,
55
+ time: time,
56
+ progname: @progname,
57
+ args: args,
58
+ block_result: block_result)
59
+ s = (@formatter || @default_formatter).call(s_severity, time, @progname,
60
+ message)
56
61
  @logger << s
57
62
  end
58
63
 
59
- # Default formatter for StructuredLogger.
60
- class Formatter
61
- attr_accessor :datetime_format
64
+ private
62
65
 
63
- def initialize
64
- @datetime_format = nil
65
- end
66
+ def format_severity(severity)
67
+ return Logger::SEV_LABEL[severity] || "ANY"
68
+ end
66
69
 
67
- def call(severity, time, message = nil, **options)
68
- severity_name = StructuredLogger.severity_name(severity)
69
- return FORMAT % {
70
- short_severity_name: severity_name[0, 1],
71
- datetime: format_datetime(time),
72
- pid: Process.pid,
73
- severity_name: severity_name,
74
- program_name: "",
75
- message: format_message(message, **options),
76
- }
70
+ class ArgumentFormatter
71
+ def call(severity: _, time: _, progname: _,
72
+ args: args(), block_result: block_result(),
73
+ **_) # for ignoring future arguments
74
+ if block_result
75
+ # {foo: "bar"} => [{foo: bar}]
76
+ # ["msg", {foo: "bar"}] => ["msg", {foo: "bar"}]
77
+ *args_and_block_result = block_result
78
+ else
79
+ args_and_block_result = args
80
+ end
81
+ return format_body(*args_and_block_result)
77
82
  end
78
83
 
79
84
  private
80
85
 
81
- FORMAT = "%{short_severity_name}, [%{datetime} #%{pid}] %<severity_name>5s -- %{program_name}: %{message}\n"
82
-
83
- def format_datetime(time)
84
- time.strftime(@datetime_format || "%Y-%m-%dT%H:%M:%S.%6N".freeze)
85
- end
86
-
87
- def format_message(message = nil, **options)
86
+ def format_body(message = nil, **options)
88
87
  return [message, format_options(options)].compact.join(": ")
89
88
  end
90
89
 
@@ -1,3 +1,3 @@
1
1
  class StructuredLogger
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -25,4 +25,5 @@ Gem::Specification.new do |spec|
25
25
  spec.add_development_dependency "mocha"
26
26
  spec.add_development_dependency "pry-byebug"
27
27
  spec.add_development_dependency "codeclimate-test-reporter"
28
+ spec.add_development_dependency "activesupport"
28
29
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: structured_logger
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
  - Yuya.Nishida.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-11-02 00:00:00.000000000 Z
11
+ date: 2015-12-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -108,6 +108,20 @@ dependencies:
108
108
  - - ">="
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: activesupport
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
111
125
  description:
112
126
  email:
113
127
  - yuya@j96.org