structured_logger 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
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