zlogger 0.0.2 → 0.1.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/.rspec +1 -0
- data/README.md +17 -1
- data/Rakefile +8 -0
- data/lib/zlogger/client.rb +26 -16
- data/lib/zlogger/daemon.rb +5 -4
- data/lib/zlogger/version.rb +1 -1
- data/spec/lib/zlogger/client_spec.rb +31 -0
- data/spec/spec_helper.rb +16 -0
- data/zlogger.gemspec +2 -0
- metadata +36 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 97a0841375be659fda8cacff26a52da879e2442b
|
4
|
+
data.tar.gz: 0e61dabb0acc35e546b21bb88b0a4c990dd0c828
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5e68f79ee55c331ba1acb1c31c60f25cab764e13d7a00b0dd3679b01b8b8cb3411ac42ad04b2f47c6760bc3e8cfa17aa584518bca52061060f0f687c56ad3242
|
7
|
+
data.tar.gz: a592dc5af961c77a30da6d1015a98362f3896f6542e5ea67ae3930cb70a742b55504b224a814e64d7f84c1b466334ede6414d61e6575517c4410b1a99ba24547
|
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--color
|
data/README.md
CHANGED
@@ -39,7 +39,23 @@ To use the logging client in a Ruby process:
|
|
39
39
|
|
40
40
|
The `logger` client object behaves like a standard ruby Logger.
|
41
41
|
|
42
|
-
|
42
|
+
## Using zlogger client in a Rails application with Phusion Passenger
|
43
|
+
|
44
|
+
Phusion passenger uses a forking model. ZeroMQ contexts do not survive a process fork, so it is important to start
|
45
|
+
the zlogger client after passenger does the process fork. Using the following code snippet in
|
46
|
+
config/environments/production.rb will allow zlogger to be used as the rails logger correctly:
|
47
|
+
|
48
|
+
# production log to Zlogger
|
49
|
+
if defined?(PhusionPassenger)
|
50
|
+
# inside passenger, only create the zlogger after the app starts (and has been forked)
|
51
|
+
PhusionPassenger.on_event(:starting_worker_process) do |forked|
|
52
|
+
Rails.logger = Zlogger::Client.new({address: ENV['ZLOGGER_ADDRESS'], port: ENV['ZLOGGER_PORT']})
|
53
|
+
end
|
54
|
+
else
|
55
|
+
# rake tasks, irb, etc. Anything not in passenger: use a zlogger immediately.
|
56
|
+
Rails.logger = Zlogger::Client.new({address: ENV['ZLOGGER_ADDRESS'], port: ENV['ZLOGGER_PORT']})
|
57
|
+
end
|
58
|
+
|
43
59
|
## Contributing
|
44
60
|
|
45
61
|
1. Fork it ( https://github.com/[my-github-username]/zlogger/fork )
|
data/Rakefile
CHANGED
data/lib/zlogger/client.rb
CHANGED
@@ -17,7 +17,7 @@ module Zlogger
|
|
17
17
|
super(nil)
|
18
18
|
@logdev = LogDevice.new(self)
|
19
19
|
@logdev.run_socket_thread
|
20
|
-
|
20
|
+
|
21
21
|
@formatter = proc do |severity, time, progname, msg|
|
22
22
|
if msg.is_a?(Exception)
|
23
23
|
"#{severity}: #{msg.message} (#{msg.class})\n" + (msg.backtrace || []).join("\n")
|
@@ -47,6 +47,14 @@ module Zlogger
|
|
47
47
|
options[:name] || "#{File.basename($0)}:#{Process.pid}"
|
48
48
|
end
|
49
49
|
|
50
|
+
def log_device
|
51
|
+
@logdev
|
52
|
+
end
|
53
|
+
|
54
|
+
def close
|
55
|
+
@logdev.close
|
56
|
+
end
|
57
|
+
|
50
58
|
class LogDevice
|
51
59
|
attr :client
|
52
60
|
|
@@ -64,22 +72,24 @@ module Zlogger
|
|
64
72
|
|
65
73
|
# it is not threadsafe to access ZMQ sockets, so we only write to the logging socket from a single thread.
|
66
74
|
def run_socket_thread
|
67
|
-
@thread ||= Thread.new
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
puts "Logging socket thread error: #{e}"
|
75
|
+
@thread ||= Thread.new { run_socket_loop }
|
76
|
+
end
|
77
|
+
|
78
|
+
def run_socket_loop
|
79
|
+
begin
|
80
|
+
socket = client.context.socket :PUB
|
81
|
+
socket.connect("tcp://#{client.connect_address}:#{client.port}")
|
82
|
+
loop do
|
83
|
+
object = client.queue.pop
|
84
|
+
break if object == self
|
85
|
+
message = ZMQ::Message.new
|
86
|
+
message.addstr(client.name)
|
87
|
+
message.addstr(object.to_s)
|
88
|
+
socket.send_message(message)
|
82
89
|
end
|
90
|
+
socket.close
|
91
|
+
rescue StandardError => e
|
92
|
+
puts "Logging socket thread error: #{e}"
|
83
93
|
end
|
84
94
|
end
|
85
95
|
end
|
data/lib/zlogger/daemon.rb
CHANGED
@@ -82,14 +82,15 @@ module Zlogger
|
|
82
82
|
end
|
83
83
|
|
84
84
|
def rotate_file
|
85
|
-
if log_date < Date.today
|
86
|
-
|
85
|
+
if self.log_date < Date.today
|
86
|
+
|
87
|
+
self.log_date = Date.today
|
87
88
|
|
88
89
|
# closes previous day file
|
89
|
-
|
90
|
+
self.output_file.close if output_file # just a fail safe in case that for some reason the output file is nil
|
90
91
|
|
91
92
|
# assigns file for the new day to output_file attribute
|
92
|
-
|
93
|
+
self.output_file = File.new(output_filepath, 'a+')
|
93
94
|
end
|
94
95
|
end
|
95
96
|
|
data/lib/zlogger/version.rb
CHANGED
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'timeout'
|
3
|
+
|
4
|
+
describe Zlogger::Client do
|
5
|
+
|
6
|
+
context "Stubbed ZMQ" do
|
7
|
+
let(:socket) { double("zmq socket") }
|
8
|
+
let(:zmq_context) { double("zmq context", :socket => socket) }
|
9
|
+
before do
|
10
|
+
ZMQ.stub(:context => zmq_context)
|
11
|
+
Zlogger::Client::LogDevice.any_instance.stub(:run_socket_thread => nil)
|
12
|
+
end
|
13
|
+
it "logs a message" do
|
14
|
+
subject.info "Hello"
|
15
|
+
subject.close
|
16
|
+
expect(socket).to receive(:connect).with("tcp://127.0.0.1:7000")
|
17
|
+
expect(socket).to receive(:send_message) { |message|
|
18
|
+
expect(message.size).to eq(2)
|
19
|
+
expect(message.popstr).to match(/rspec/)
|
20
|
+
expect(message.popstr).to eq("INFO: Hello")
|
21
|
+
}
|
22
|
+
expect(socket).to receive(:close)
|
23
|
+
Timeout.timeout(2) do
|
24
|
+
subject.log_device.run_socket_loop
|
25
|
+
end
|
26
|
+
end
|
27
|
+
after do
|
28
|
+
subject.close if subject
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'zlogger'
|
2
|
+
|
3
|
+
# Requires supporting ruby files with custom matchers and macros, etc,
|
4
|
+
# in spec/support/ and its subdirectories.
|
5
|
+
Dir["spec/support/**/*.rb"].each { |file| load file }
|
6
|
+
|
7
|
+
require 'timecop'
|
8
|
+
|
9
|
+
RSpec.configure do |config|
|
10
|
+
|
11
|
+
# Run specs in random order to surface order dependencies. If you find an
|
12
|
+
# order dependency and want to debug it, you can fix the order by providing
|
13
|
+
# the seed, which is printed after each run.
|
14
|
+
# --seed 1234
|
15
|
+
#config.order = "random"
|
16
|
+
end
|
data/zlogger.gemspec
CHANGED
@@ -21,4 +21,6 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.add_runtime_dependency "rbczmq", "~> 1.7"
|
22
22
|
spec.add_development_dependency "bundler", "~> 1.6"
|
23
23
|
spec.add_development_dependency "rake"
|
24
|
+
spec.add_development_dependency "rspec", "~> 2.14"
|
25
|
+
spec.add_development_dependency "timecop", "~> 0.7"
|
24
26
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zlogger
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Connolly
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-07-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rbczmq
|
@@ -52,6 +52,34 @@ dependencies:
|
|
52
52
|
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '2.14'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '2.14'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: timecop
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0.7'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0.7'
|
55
83
|
description: 'This gem provides a daemon that reads log messages from a ZeroMQ socket.
|
56
84
|
Messages are formatted and output to STDOUT. '
|
57
85
|
email:
|
@@ -63,6 +91,7 @@ extensions: []
|
|
63
91
|
extra_rdoc_files: []
|
64
92
|
files:
|
65
93
|
- ".gitignore"
|
94
|
+
- ".rspec"
|
66
95
|
- Gemfile
|
67
96
|
- LICENSE.txt
|
68
97
|
- README.md
|
@@ -74,6 +103,8 @@ files:
|
|
74
103
|
- lib/zlogger/daemon.rb
|
75
104
|
- lib/zlogger/reader.rb
|
76
105
|
- lib/zlogger/version.rb
|
106
|
+
- spec/lib/zlogger/client_spec.rb
|
107
|
+
- spec/spec_helper.rb
|
77
108
|
- zlogger.gemspec
|
78
109
|
homepage: ''
|
79
110
|
licenses:
|
@@ -99,4 +130,6 @@ rubygems_version: 2.2.2
|
|
99
130
|
signing_key:
|
100
131
|
specification_version: 4
|
101
132
|
summary: A distributed logging daemon.
|
102
|
-
test_files:
|
133
|
+
test_files:
|
134
|
+
- spec/lib/zlogger/client_spec.rb
|
135
|
+
- spec/spec_helper.rb
|