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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5f2504eea7c5c26ea43263ea56fb570e091779f1
4
- data.tar.gz: e75a239379af084d808f81d763ae36a54d91f98b
3
+ metadata.gz: 97a0841375be659fda8cacff26a52da879e2442b
4
+ data.tar.gz: 0e61dabb0acc35e546b21bb88b0a4c990dd0c828
5
5
  SHA512:
6
- metadata.gz: 2ddb23f2c093c9fd1f41f8451b3af68e3433495ba2fc6ed45da12aa36aa0e45d9513464abca13b6ef9102adcef5a28860c24483f5daf7797babac908278dc673
7
- data.tar.gz: 1711db539434394f50a9ab89e2ab616f8f58646c3ae3b81f0075dd35c05a7a6946362ad66de0c9635a5c8976ee25d78421e0811f14dab20356961fc7ce06abca
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
@@ -1,2 +1,10 @@
1
1
  require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ task :default => [:spec]
5
+
6
+ desc "Run the specs."
7
+ RSpec::Core::RakeTask.new do |t|
8
+ t.pattern = "spec/**/*_spec.rb"
9
+ end
2
10
 
@@ -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 do
68
- begin
69
- socket = client.context.socket :PUB
70
- socket.connect("tcp://#{client.connect_address}:#{client.port}")
71
- loop do
72
- object = client.queue.pop
73
- break if object == self
74
- message = ZMQ::Message.new
75
- message.addstr(client.name)
76
- message.addstr(object.to_s)
77
- socket.send_message(message)
78
- end
79
- socket.close
80
- rescue StandardError => e
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
@@ -82,14 +82,15 @@ module Zlogger
82
82
  end
83
83
 
84
84
  def rotate_file
85
- if log_date < Date.today
86
- log_date = Date.today
85
+ if self.log_date < Date.today
86
+
87
+ self.log_date = Date.today
87
88
 
88
89
  # closes previous day file
89
- @output_file.close if @output_file # just a fail safe in case that for some reason the output file is nil
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
- @output_file = File.new(output_filepath, 'a+')
93
+ self.output_file = File.new(output_filepath, 'a+')
93
94
  end
94
95
  end
95
96
 
@@ -1,3 +1,3 @@
1
1
  module Zlogger
2
- VERSION = "0.0.2"
2
+ VERSION = "0.1.0"
3
3
  end
@@ -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
@@ -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
@@ -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.2
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-06-22 00:00:00.000000000 Z
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