mq_logger 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
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: