zlogger 0.0.2 → 0.1.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: 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