log_formatter 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 +4 -4
- data/README.md +28 -4
- data/examples/log4r_logger.rb +71 -0
- data/examples/ruby_logger.rb +4 -4
- data/lib/log_formatter/common.rb +38 -0
- data/lib/log_formatter/log4r_json_formatter.rb +29 -0
- data/lib/log_formatter/ruby_json_formatter.rb +20 -54
- data/lib/log_formatter/version.rb +1 -1
- data/log_formatter.gemspec +1 -0
- metadata +18 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 90f99a541ff581ec9e24cbd0581175ebb8452706
|
4
|
+
data.tar.gz: 32d2812b82a6aadd54a92efd2e0afb1dedec60fe
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a92a60ba028c177da4f07cf7f0768d43ab1bb864af4ae00f200ea37ffdc2896a0675ede8934b2c84e7b374ffdb26f0b76eca9d373cefff7f2b8d89716ae4469c
|
7
|
+
data.tar.gz: 8b6918a822261bd8e0709893ff740c27edf3a80530e5ae4e75d8c20bfe09f47874e9be9d405ff82407c46478c32cd4eb4bdd0016848d927857844ab464ecd731
|
data/README.md
CHANGED
@@ -5,6 +5,7 @@ Log Formatter for Ruby and other logger.
|
|
5
5
|
Details as following:
|
6
6
|
|
7
7
|
- `log_formatter/ruby_json_formatter'` : ruby logger json formatter
|
8
|
+
- `log_formatter/log4r_json_formatter'` : log4r logger json formatter
|
8
9
|
|
9
10
|
## Installation
|
10
11
|
|
@@ -32,7 +33,10 @@ Or install it yourself as:
|
|
32
33
|
require 'logger_formatter.rb'
|
33
34
|
require 'log_formatter/ruby_json_formatter'
|
34
35
|
|
35
|
-
logger
|
36
|
+
logger = Logger.new(STDOUT)
|
37
|
+
logger.level = Logger::DEBUG
|
38
|
+
|
39
|
+
logger.formatter = Ruby::JSONFormatter::Base.new
|
36
40
|
|
37
41
|
logger.info 'test data'
|
38
42
|
```
|
@@ -52,7 +56,7 @@ result:
|
|
52
56
|
### set app and common ext info
|
53
57
|
|
54
58
|
```
|
55
|
-
logger.formatter =
|
59
|
+
logger.formatter = Ruby::JSONFormatter::Base.new('app', {'source': 'examples'})
|
56
60
|
logger.info 'test data'
|
57
61
|
```
|
58
62
|
|
@@ -72,7 +76,7 @@ result:
|
|
72
76
|
### log with hash
|
73
77
|
|
74
78
|
```
|
75
|
-
logger.formatter =
|
79
|
+
logger.formatter = Ruby::JSONFormatter::Base.new('app', {'source': 'examples'})
|
76
80
|
|
77
81
|
logger.debug({data: "test data", author: 'chad'})
|
78
82
|
```
|
@@ -96,7 +100,7 @@ result:
|
|
96
100
|
json formatter will add `log_type`,`log_level`,`log_timestamp`,`log_app` as default key, but you can change them if needed.
|
97
101
|
|
98
102
|
```
|
99
|
-
logger.formatter =
|
103
|
+
logger.formatter = Ruby::JSONFormatter::Base.new('app', {'source': 'examples'}) do |config|
|
100
104
|
config[:level] = :cus_level
|
101
105
|
config[:type] = :cus_type
|
102
106
|
config[:app] = :cus_app
|
@@ -122,6 +126,26 @@ result:
|
|
122
126
|
|
123
127
|
full code to see [examples/ruby_logger](https://github.com/chadlwm/log_formatter/blob/master/examples/ruby_logger.rb)
|
124
128
|
|
129
|
+
|
130
|
+
## Log4r JSON Formatter
|
131
|
+
|
132
|
+
### Get Start
|
133
|
+
|
134
|
+
```
|
135
|
+
logger = Log4r::Logger.new('Log4RTest')
|
136
|
+
outputter = Log4r::StdoutOutputter.new(
|
137
|
+
"console",
|
138
|
+
:formatter => Log4r::JSONFormatter::Base.new
|
139
|
+
)
|
140
|
+
logger.add(outputter)
|
141
|
+
|
142
|
+
logger.debug("Created logger")
|
143
|
+
```
|
144
|
+
|
145
|
+
other cases just same as ruby json formatter.
|
146
|
+
|
147
|
+
full code to see [examples/log4r_logger](https://github.com/chadlwm/log_formatter/blob/master/examples/log4r_logger.rb)
|
148
|
+
|
125
149
|
## Test with Rspec
|
126
150
|
|
127
151
|
```
|
@@ -0,0 +1,71 @@
|
|
1
|
+
require 'log4r'
|
2
|
+
require 'log_formatter'
|
3
|
+
require 'log_formatter/log4r_json_formatter'
|
4
|
+
include Log4r
|
5
|
+
|
6
|
+
logger = Log4r::Logger.new('Log4RTest')
|
7
|
+
# logger.outputters = Outputter.stdout
|
8
|
+
outputter = Log4r::StdoutOutputter.new(
|
9
|
+
"console",
|
10
|
+
:formatter => Log4r::JSONFormatter::Base.new
|
11
|
+
)
|
12
|
+
logger.add(outputter)
|
13
|
+
|
14
|
+
# plain initialize
|
15
|
+
|
16
|
+
logger.debug("Created logger")
|
17
|
+
logger.info("Program started")
|
18
|
+
logger.warn("Nothing to do!")
|
19
|
+
# {"message":"Created logger","log_level":"DEBUG","log_type":"Log4RTest","log_app":null,"log_timestamp":"2016-08-25T16:48:13+08:00"}
|
20
|
+
# {"message":"Program started","log_level":"INFO","log_type":"Log4RTest","log_app":null,"log_timestamp":"2016-08-25T16:48:13+08:00"}
|
21
|
+
# {"message":"Nothing to do!","log_level":"WARN","log_type":"Log4RTest","log_app":null,"log_timestamp":"2016-08-25T16:48:13+08:00"}
|
22
|
+
|
23
|
+
# initialize with app and ext info
|
24
|
+
logger2 = Log4r::Logger.new('Log4RTest')
|
25
|
+
outputter2 = Log4r::StdoutOutputter.new(
|
26
|
+
"console",
|
27
|
+
:formatter => Log4r::JSONFormatter::Base.new('app', {'source': 'examples'})
|
28
|
+
)
|
29
|
+
logger2.add(outputter2)
|
30
|
+
|
31
|
+
logger2.debug("Created logger")
|
32
|
+
logger2.info("Program started")
|
33
|
+
logger2.warn("Nothing to do!")
|
34
|
+
# {"source":"examples","message":"Created logger","log_level":"DEBUG","log_type":"Log4RTest","log_app":"app","log_timestamp":"2016-08-25T17:02:37+08:00"}
|
35
|
+
# {"source":"examples","message":"Program started","log_level":"INFO","log_type":"Log4RTest","log_app":"app","log_timestamp":"2016-08-25T17:02:37+08:00"}
|
36
|
+
# {"source":"examples","message":"Nothing to do!","log_level":"WARN","log_type":"Log4RTest","log_app":"app","log_timestamp":"2016-08-25T17:02:37+08:00"}
|
37
|
+
|
38
|
+
logger3 = Log4r::Logger.new('Log4RTest')
|
39
|
+
outputter3 = Log4r::StdoutOutputter.new(
|
40
|
+
"console",
|
41
|
+
:formatter => Log4r::JSONFormatter::Base.new('app', {'source': 'examples'})
|
42
|
+
)
|
43
|
+
logger3.add(outputter3)
|
44
|
+
|
45
|
+
logger3.debug({data: "Created logger"})
|
46
|
+
logger3.info({data: "Program started"})
|
47
|
+
logger3.warn({data: "Nothing to do!"})
|
48
|
+
# {"source":"examples","data":"Created logger","log_level":"DEBUG","log_type":"Log4RTest","log_app":"app","log_timestamp":"2016-08-25T17:03:48+08:00"}
|
49
|
+
# {"source":"examples","data":"Program started","log_level":"INFO","log_type":"Log4RTest","log_app":"app","log_timestamp":"2016-08-25T17:03:48+08:00"}
|
50
|
+
# {"source":"examples","data":"Nothing to do!","log_level":"WARN","log_type":"Log4RTest","log_app":"app","log_timestamp":"2016-08-25T17:03:48+08:00"}
|
51
|
+
|
52
|
+
|
53
|
+
logger4 = Log4r::Logger.new('Log4RTest')
|
54
|
+
json_formatter4 = Log4r::JSONFormatter::Base.new('app', {'source': 'examples'}) do |config|
|
55
|
+
config[:level] = :cus_level
|
56
|
+
config[:type] = :cus_type
|
57
|
+
config[:app] = :cus_app
|
58
|
+
config[:timestamp] = :cus_timestamp
|
59
|
+
end
|
60
|
+
outputter4 = Log4r::StdoutOutputter.new(
|
61
|
+
"console",
|
62
|
+
:formatter => json_formatter4
|
63
|
+
)
|
64
|
+
logger4.add(outputter4)
|
65
|
+
|
66
|
+
logger4.debug({data: "Created logger", autho: 'chad'})
|
67
|
+
logger4.info({data: "Program started", autho: 'chad'})
|
68
|
+
logger4.warn({data: "Nothing to do!", autho: 'chad'})
|
69
|
+
# {"source":"examples","data":"Created logger","autho":"chad","cus_level":"DEBUG","cus_type":"Log4RTest","cus_app":"app","cus_timestamp":"2016-08-25T17:06:06+08:00"}
|
70
|
+
# {"source":"examples","data":"Program started","autho":"chad","cus_level":"INFO","cus_type":"Log4RTest","cus_app":"app","cus_timestamp":"2016-08-25T17:06:06+08:00"}
|
71
|
+
# {"source":"examples","data":"Nothing to do!","autho":"chad","cus_level":"WARN","cus_type":"Log4RTest","cus_app":"app","cus_timestamp":"2016-08-25T17:06:06+08:00"}
|
data/examples/ruby_logger.rb
CHANGED
@@ -6,7 +6,7 @@ logger = Logger.new(STDOUT)
|
|
6
6
|
logger.level = Logger::DEBUG
|
7
7
|
|
8
8
|
# plain initialize
|
9
|
-
logger.formatter =
|
9
|
+
logger.formatter = Ruby::JSONFormatter::Base.new
|
10
10
|
|
11
11
|
logger.debug("Created logger")
|
12
12
|
logger.info("Program started")
|
@@ -16,7 +16,7 @@ logger.warn("Nothing to do!")
|
|
16
16
|
# {"message":"Nothing to do!","log_level":"WARN","log_type":null,"log_app":null,"log_timestamp":"2016-08-25T15:34:25+08:00"}
|
17
17
|
|
18
18
|
# initialize with app and ext info
|
19
|
-
logger.formatter =
|
19
|
+
logger.formatter = Ruby::JSONFormatter::Base.new('app', {'source': 'examples'})
|
20
20
|
|
21
21
|
logger.debug("Created logger")
|
22
22
|
logger.info("Program started")
|
@@ -26,7 +26,7 @@ logger.warn("Nothing to do!")
|
|
26
26
|
# {"source":"examples","message":"Nothing to do!","log_level":"WARN","log_type":null,"log_app":"app","log_timestamp":"2016-08-25T15:34:25+08:00"}
|
27
27
|
|
28
28
|
# log hash
|
29
|
-
logger.formatter =
|
29
|
+
logger.formatter = Ruby::JSONFormatter::Base.new('app', {'source': 'examples'})
|
30
30
|
|
31
31
|
logger.debug({data: "Created logger"})
|
32
32
|
logger.info({data: "Program started"})
|
@@ -36,7 +36,7 @@ logger.warn({data: "Nothing to do!"})
|
|
36
36
|
# {"source":"examples","data":"Nothing to do!","log_level":"WARN","log_type":null,"log_app":"app","log_timestamp":"2016-08-25T15:34:25+08:00"}
|
37
37
|
|
38
38
|
# log with custome key instead of default keys
|
39
|
-
logger.formatter =
|
39
|
+
logger.formatter = Ruby::JSONFormatter::Base.new('app', {'source': 'examples'}) do |config|
|
40
40
|
config[:level] = :cus_level
|
41
41
|
config[:type] = :cus_type
|
42
42
|
config[:app] = :cus_app
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module LogFormatter::Common
|
2
|
+
def build_event(message, severity, time, progname)
|
3
|
+
data = message
|
4
|
+
if data.is_a?(String) && data.start_with?('{'.freeze)
|
5
|
+
data = (JSON.parse(message) rescue nil) || message
|
6
|
+
end
|
7
|
+
|
8
|
+
event = case data
|
9
|
+
when Hash
|
10
|
+
data
|
11
|
+
else
|
12
|
+
{"message".freeze => msg2str(data)}
|
13
|
+
end
|
14
|
+
|
15
|
+
event[@config[:level].freeze] ||= severity
|
16
|
+
event[@config[:type].freeze] = progname
|
17
|
+
event[@config[:app].freeze] = @app
|
18
|
+
event[@config[:timestamp].freeze] = current_time(time).iso8601
|
19
|
+
"#{@ext.merge(event).to_json}\n"
|
20
|
+
end
|
21
|
+
|
22
|
+
def msg2str(msg)
|
23
|
+
case msg
|
24
|
+
when ::String
|
25
|
+
msg.gsub("\n", "\t")
|
26
|
+
when ::Exception
|
27
|
+
"#{ msg.message } (#{ msg.class })\t" <<
|
28
|
+
(msg.backtrace || []).join("\t")
|
29
|
+
else
|
30
|
+
msg.inspect
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def current_time(time)
|
35
|
+
return time if time
|
36
|
+
Time.respond_to?(:current) ? Time.current : Time.now
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'log4r'
|
2
|
+
require 'json'
|
3
|
+
require 'time'
|
4
|
+
require File.expand_path('../common', __FILE__)
|
5
|
+
|
6
|
+
module Log4r::JSONFormatter
|
7
|
+
class Base < Log4r::BasicFormatter
|
8
|
+
include LogFormatter::Common
|
9
|
+
|
10
|
+
def initialize(app = nil, ext = {})
|
11
|
+
@app = app
|
12
|
+
@ext = ext.is_a?(Hash) ? ext : {}
|
13
|
+
@config = {
|
14
|
+
level: :log_level,
|
15
|
+
type: :log_type,
|
16
|
+
app: :log_app,
|
17
|
+
timestamp: :log_timestamp
|
18
|
+
}
|
19
|
+
|
20
|
+
yield @config if block_given?
|
21
|
+
|
22
|
+
super()
|
23
|
+
end
|
24
|
+
|
25
|
+
def format(event)
|
26
|
+
@event = build_event(event.data, Log4r::LNAMES[event.level], nil, event.name)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -1,63 +1,29 @@
|
|
1
1
|
require 'logger'
|
2
2
|
require 'json'
|
3
3
|
require 'time'
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
end
|
23
|
-
|
24
|
-
protected
|
25
|
-
|
26
|
-
def build_event(message, severity, time, progname)
|
27
|
-
data = message
|
28
|
-
if data.is_a?(String) && data.start_with?('{'.freeze)
|
29
|
-
data = (JSON.parse(message) rescue nil) || message
|
4
|
+
require File.expand_path('../common', __FILE__)
|
5
|
+
|
6
|
+
module Ruby
|
7
|
+
module JSONFormatter
|
8
|
+
class Base < ::Logger::Formatter
|
9
|
+
include LogFormatter::Common
|
10
|
+
|
11
|
+
def initialize(app = nil, ext = {})
|
12
|
+
@app = app
|
13
|
+
@ext = ext.is_a?(Hash) ? ext : {}
|
14
|
+
@config = {
|
15
|
+
level: :log_level,
|
16
|
+
type: :log_type,
|
17
|
+
app: :log_app,
|
18
|
+
timestamp: :log_timestamp
|
19
|
+
}
|
20
|
+
|
21
|
+
yield @config if block_given?
|
30
22
|
end
|
31
23
|
|
32
|
-
|
33
|
-
|
34
|
-
data
|
35
|
-
else
|
36
|
-
{"message".freeze => msg2str(data)}
|
37
|
-
end
|
38
|
-
|
39
|
-
event[@config[:level].freeze] ||= severity
|
40
|
-
event[@config[:type].freeze] = progname
|
41
|
-
event[@config[:app].freeze] = @app
|
42
|
-
event[@config[:timestamp].freeze] = current_time(time).iso8601
|
43
|
-
"#{@ext.merge(event).to_json}\n"
|
44
|
-
end
|
45
|
-
|
46
|
-
def msg2str(msg)
|
47
|
-
case msg
|
48
|
-
when ::String
|
49
|
-
msg.gsub("\n", "\t")
|
50
|
-
when ::Exception
|
51
|
-
"#{ msg.message } (#{ msg.class })\t" <<
|
52
|
-
(msg.backtrace || []).join("\t")
|
53
|
-
else
|
54
|
-
msg.inspect
|
24
|
+
def call(severity, time, progname, message)
|
25
|
+
@event = build_event(message, severity, time, progname)
|
55
26
|
end
|
56
27
|
end
|
57
|
-
|
58
|
-
def current_time(time)
|
59
|
-
return time if time
|
60
|
-
Time.respond_to?(:current) ? Time.current : Time.now
|
61
|
-
end
|
62
28
|
end
|
63
29
|
end
|
data/log_formatter.gemspec
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: log_formatter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- chad_lwm
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '3.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: log4r
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1.1'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '1.1'
|
55
69
|
description: log formatter for json. For Plain Ruby Logger, and for log4r and so on,
|
56
70
|
details to read the REAME.md file.
|
57
71
|
email:
|
@@ -70,8 +84,11 @@ files:
|
|
70
84
|
- Rakefile
|
71
85
|
- bin/console
|
72
86
|
- bin/setup
|
87
|
+
- examples/log4r_logger.rb
|
73
88
|
- examples/ruby_logger.rb
|
74
89
|
- lib/log_formatter.rb
|
90
|
+
- lib/log_formatter/common.rb
|
91
|
+
- lib/log_formatter/log4r_json_formatter.rb
|
75
92
|
- lib/log_formatter/ruby_json_formatter.rb
|
76
93
|
- lib/log_formatter/version.rb
|
77
94
|
- log_formatter.gemspec
|