spawning-logger 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +35 -2
- data/lib/spawning_logger.rb +32 -1
- data/lib/version.rb +1 -1
- data/test/spawning_logger_test.rb +19 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5bb688e3f25c13c0b26d0e5c960d03fa77b57910
|
4
|
+
data.tar.gz: 833177faf0509500ffb4d14a9e0badb143b7613d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b2de04e2356e15c594f744f3013f8de70511a25042fe685a63bb085e29c4e6cb5e8108ec10497a2fb5eb394473c38208bafd003e5c8b189a4801ce40974e600f
|
7
|
+
data.tar.gz: 362e925786791024ab90f72ffe52ecb7de04c013a88362c8c4761c3927dc5f3917e3584f35282f02e30b75fdec34ee723d19859040a13892f527767227d7f7cb
|
data/README.md
CHANGED
@@ -10,10 +10,20 @@ This logger can spawn sub-loggers with different files, each of those file's nam
|
|
10
10
|
|
11
11
|
Also supports a preset logfile subdirectory in case you create many subloggers (for example you might be interested in splitting development, production, test logs into subdirectories).
|
12
12
|
|
13
|
-
Only the constructor is modified and the spawning factory method added, everything else is delegated to the ruby stdlib ::Logger class.
|
14
|
-
|
13
|
+
Only the constructor is modified and the spawning factory method added, everything else is delegated to the ruby stdlib ::Logger class.
|
15
14
|
## Examples:
|
16
15
|
|
16
|
+
### quick-n-dirty:
|
17
|
+
```ruby
|
18
|
+
require 'spawning_logger'
|
19
|
+
logger = SpawningLogger.new('server.log')
|
20
|
+
|
21
|
+
logger.info('special test message')
|
22
|
+
logger.spawn('special').info('special test message')
|
23
|
+
|
24
|
+
# => writes message into ./server.log and ./server_special.log
|
25
|
+
```
|
26
|
+
|
17
27
|
### 1) usage same as ::Logger
|
18
28
|
|
19
29
|
```ruby
|
@@ -59,3 +69,26 @@ child_logger = logger.spawn('1')
|
|
59
69
|
# => creates ./log/production/server.log
|
60
70
|
# => creates ./log/production/server_worker_1.log
|
61
71
|
```
|
72
|
+
|
73
|
+
|
74
|
+
### 5) log into main logfile and into a child logger's logfile
|
75
|
+
|
76
|
+
```ruby
|
77
|
+
logger = SpawningLogger.new('log/server.log')
|
78
|
+
logger.send_self_and_spawn(:error, "worker_1", "server shutdown")
|
79
|
+
|
80
|
+
# => "server shutdown" will show up in server.log and in server_worker_1.log
|
81
|
+
```
|
82
|
+
|
83
|
+
|
84
|
+
### 6) logger spawning recursion
|
85
|
+
|
86
|
+
```ruby
|
87
|
+
logger = SpawningLogger.new('log/server.log')
|
88
|
+
child = logger.spawn('child1')
|
89
|
+
sub_child = child.spawn('child2')
|
90
|
+
|
91
|
+
# => creates ./log/production/server.log
|
92
|
+
# => creates ./log/production/server_child1.log
|
93
|
+
# => creates ./log/production/server_child1_child2.log
|
94
|
+
```
|
data/lib/spawning_logger.rb
CHANGED
@@ -53,6 +53,29 @@
|
|
53
53
|
# # => creates ./log/production/server.log
|
54
54
|
# # => creates ./log/production/server_worker_1.log
|
55
55
|
# ```
|
56
|
+
#
|
57
|
+
#
|
58
|
+
# ### 5) log into main logfile and into a child logger's logfile
|
59
|
+
#
|
60
|
+
# ```ruby
|
61
|
+
# logger = SpawningLogger.new('log/server.log')
|
62
|
+
# logger.send_self_and_spawn(:error, "worker_1", "server shutdown")
|
63
|
+
#
|
64
|
+
# # => "server shutdown" will show up in server.log and in server_worker_1.log
|
65
|
+
# ```
|
66
|
+
#
|
67
|
+
#
|
68
|
+
# ### 6) logger spawning recursion
|
69
|
+
#
|
70
|
+
# ```ruby
|
71
|
+
# logger = SpawningLogger.new('log/server.log')
|
72
|
+
# child = logger.spawn('child1')
|
73
|
+
# sub_child = child.spawn('child2')
|
74
|
+
#
|
75
|
+
# # => creates ./log/production/server.log
|
76
|
+
# # => creates ./log/production/server_child1.log
|
77
|
+
# # => creates ./log/production/server_child1_child2.log
|
78
|
+
# ```
|
56
79
|
|
57
80
|
require 'logger'
|
58
81
|
|
@@ -101,6 +124,14 @@ class SpawningLogger < ::Logger
|
|
101
124
|
@child_loggers[child_name]
|
102
125
|
end
|
103
126
|
|
127
|
+
# logs into the main logfile and also logs into a spawned logfile.
|
128
|
+
# @param method The method name to call, like :error, :info, :debug, ...
|
129
|
+
# @param message the message to send to both loggers
|
130
|
+
def send_self_and_spawn(child_name, method, message)
|
131
|
+
self.send(method, message)
|
132
|
+
self.spawn(child_name).send(method, message)
|
133
|
+
end
|
134
|
+
|
104
135
|
protected
|
105
136
|
|
106
137
|
# creates a logger for child_name. uses child_name and
|
@@ -122,7 +153,7 @@ class SpawningLogger < ::Logger
|
|
122
153
|
file_name = file_basename + File.extname(@file_name)
|
123
154
|
|
124
155
|
file_path = File.join(@log_dir, file_name)
|
125
|
-
|
156
|
+
self.class.new(file_path)
|
126
157
|
end
|
127
158
|
|
128
159
|
end
|
data/lib/version.rb
CHANGED
@@ -52,6 +52,25 @@ class SpawningLoggerTest < MiniTest::Test
|
|
52
52
|
end
|
53
53
|
end
|
54
54
|
|
55
|
+
def test_send_self_and_spawn_calls_both
|
56
|
+
logger = SpawningLogger.new(@logfile_path)
|
57
|
+
logger.send_self_and_spawn("childid", :error, "test_self_and_spawn_calls_both")
|
58
|
+
|
59
|
+
# make sure log message shows up in main logfile and in spawned logfile
|
60
|
+
[@logfile_path, File.join(@log_dir, 'test_file_childid.log')].each do |path|
|
61
|
+
result = File.read(path)
|
62
|
+
assert_match(/test_self_and_spawn_calls_both/, result)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def test_child_loggers_can_spawn_their_own_child_loggers
|
67
|
+
child = SpawningLogger.new(@logfile_path).spawn('child1')
|
68
|
+
sub_child = child.spawn('child2')
|
69
|
+
|
70
|
+
assert_kind_of(::Logger, sub_child)
|
71
|
+
assert File.exist?(File.join(@log_dir, 'test_file_child1_child2.log'))
|
72
|
+
end
|
73
|
+
|
55
74
|
def test_creates_child_logger_only_once
|
56
75
|
skip "NYI"
|
57
76
|
# TODO
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spawning-logger
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Markus Seeger
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-01-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|