mq_logger 0.0.3 → 0.0.4

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.
data/Gemfile CHANGED
@@ -1,8 +1,9 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- # Specify your gem's dependencies in logstash-logger.gemspec
3
+ # Specify your gem's dependencies in mq_logger.gemspec
4
4
  gemspec
5
5
 
6
6
  gem 'json', :platform => :ruby_18
7
7
  gem 'amqp'
8
8
  gem 'amq-client', '>= 0.9.10'
9
+
data/README.md CHANGED
@@ -1,9 +1,6 @@
1
1
  # MqLogger
2
2
 
3
- It is a logger, which write log to rabbitmq.
4
-
5
- #Requirements
6
- 1. Ensure you have a amqp connection before logging.
3
+ TODO: Write a gem description
7
4
 
8
5
  ## Installation
9
6
 
data/lib/mq_logger.rb CHANGED
@@ -1,8 +1,117 @@
1
+ require 'mq_logger/version'
2
+
1
3
  require 'thread'
2
4
  require 'socket'
3
- require 'logstash-event'
4
- require 'amqp'
5
5
 
6
- require 'mq_logger/mq_client'
7
- require 'mq_logger/logger'
8
- require 'mq_logger/version'
6
+ module MqLogger
7
+ class MQClient
8
+ def initialize(queue_nqme, routing_key)
9
+ @queue = queue_nqme
10
+ @route = routing_key
11
+ @channel = nil
12
+ end
13
+
14
+ def write(event)
15
+ begin
16
+ connect unless @channel
17
+
18
+ @channel.direct(@queue, :durable => true, :persistent => true).publish("#{event.to_hash.to_json}\n", :routing_key => @route)
19
+ rescue => e
20
+ warn "MQClient - #{e.class} - #{e.message}, AMQP.channel is null; log===#{event.to_hash.to_json.inspect}"
21
+ end
22
+ end
23
+
24
+ # def close
25
+ # @socket && @socket.close
26
+ # rescue => e
27
+ # warn "LogStashLogger::TCPClient - #{e.class} - #{e.message}"
28
+ # end
29
+
30
+ private
31
+ def connect
32
+ @channel = AMQP.channel
33
+ end
34
+ end
35
+
36
+ class RabbitLogger < ::Logger
37
+ module Level
38
+ DEBUG = 0
39
+ INFO = 1
40
+ WARN = 2
41
+ ERROR = 3
42
+ FATAL = 4
43
+ UNKNOWN = 5
44
+ end
45
+
46
+ attr_reader :client
47
+
48
+ LOGSTASH_EVENT_FIELDS = %w(@timestamp @tags @type @source @source_host @fields @message).freeze
49
+ HOST = Socket.gethostname
50
+
51
+ def initialize(queue, route, source=nil)
52
+ @client = ::MqLogger::MQClient.new(queue, route)
53
+ @source = source
54
+ super
55
+ end
56
+
57
+ def add(severity, message = nil, progname = nil, &block)
58
+ severity ||= UNKNOWN
59
+ if severity < @level
60
+ return true
61
+ end
62
+ progname ||= @progname
63
+ if message.nil?
64
+ if block_given?
65
+ message = yield
66
+ else
67
+ message = progname
68
+ progname = @progname
69
+ end
70
+ end
71
+ @client.write(
72
+ format_message(format_severity(severity), Time.now, progname, message))
73
+ true
74
+ end
75
+
76
+ def format_message(severity, time, progname, message)
77
+ data = message
78
+ if data.is_a?(String) && data[0] == '{'
79
+ data = (JSON.parse(message) rescue nil) || message
80
+ end
81
+
82
+ event = case data
83
+ when LogStash::Event
84
+ data.clone
85
+ when Hash
86
+ event_data = {
87
+ "@tags" => [],
88
+ "@fields" => {},
89
+ "@timestamp" => time
90
+ }
91
+ LOGSTASH_EVENT_FIELDS.each do |field_name|
92
+ if field_data = data.delete(field_name)
93
+ event_data[field_name] = field_data
94
+ end
95
+ end
96
+ event_data["@fields"].merge!(data)
97
+ event_data["@timestamp"] = time
98
+ LogStash::Event.new(event_data)
99
+ when String
100
+ LogStash::Event.new("@message" => data, "@timestamp" => time)
101
+ end
102
+
103
+ event['severity'] ||= severity
104
+ #event.type = progname
105
+ if event.source == 'unknown'
106
+ event.source = @source
107
+ elsif !event.source
108
+ event.source = HOST
109
+ end
110
+
111
+ if !event.source_host
112
+ event.source_host = HOST
113
+ end
114
+ event
115
+ end
116
+ end
117
+ end
@@ -1,4 +1,5 @@
1
- require 'logger'
2
- class MqLogger < ::Logger
3
- VERSION = "0.0.3"
1
+ module MqLogger
2
+
3
+ VERSION = "0.0.4"
4
+
4
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mq_logger
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-01-11 00:00:00.000000000 Z
12
+ date: 2013-02-02 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: for rails log to rabbitmq
15
15
  email: