redislog 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. data/bin/redislog +67 -0
  2. data/lib/redislog.rb +75 -0
  3. metadata +69 -0
@@ -0,0 +1,67 @@
1
+ #!/usr/bin/env ruby
2
+ require 'redislog'
3
+ require 'choice'
4
+
5
+ PROGRAM_VERSION = "1.0.0"
6
+ Choice.options do
7
+ header ''
8
+ separator "Mandatory Arguments:"
9
+
10
+ option :path, :required => true do
11
+ short "-d"
12
+ long "--directory=DIRECTORY"
13
+ desc "Path of the log files"
14
+ end
15
+
16
+ separator "Optional Arguments:"
17
+
18
+ option :host do
19
+ short "-h"
20
+ long "--host=HOST"
21
+ desc "Redis server ip"
22
+ default "localhost"
23
+ end
24
+
25
+ option :port do
26
+ short "-p"
27
+ long "--port=PORT"
28
+ desc "Redis server port"
29
+ default "6379"
30
+ end
31
+
32
+ option :db do
33
+ short "-D"
34
+ long "--DB=DB"
35
+ desc "Redis database"
36
+ default "0"
37
+ end
38
+
39
+ option :filename do
40
+ short "-f"
41
+ long "--filename=FILENAME"
42
+ desc "Pattern of the logfile name"
43
+ default "Redislog"
44
+ end
45
+
46
+ separator 'Common Arguments:'
47
+ option :help do
48
+ short '-h'
49
+ long '--help'
50
+ desc 'Show this message.'
51
+ end
52
+
53
+ option :version do
54
+ short '-v'
55
+ long '--version'
56
+ desc 'Show version'
57
+ action do
58
+ puts PROGRAM_VERSION
59
+ exit
60
+ end
61
+ end
62
+ end
63
+
64
+ logger = Redislog.new(:host => Choice.choices[:host],
65
+ :port => Choice.choices[:port].to_i,
66
+ :db => Choice.choices[:db])
67
+ logger.write_log(Choice.choices[:path], Choice.choices[:filename])
@@ -0,0 +1,75 @@
1
+ require 'redis'
2
+
3
+ class Redislog
4
+
5
+ @@levels = {
6
+ :debug => 0,
7
+ :info => 1,
8
+ :error => 2,
9
+ :critical => 3
10
+ }
11
+
12
+ attr_accessor :logger_level, :prefix
13
+
14
+ def initialize(params = {})
15
+ @logger_level = params[:logger_level] || :debug
16
+ host = params[:host] || 'localhost'
17
+ port = params[:port] || 6379
18
+ db = params[:db] || 0
19
+ @prefix = params[:prefix] || '0'
20
+ @client = Redis.new(:host => host, :port => port, :db => db)
21
+ end
22
+
23
+ def debug(msg)
24
+ log(msg, :debug)
25
+ end
26
+
27
+ def info(msg)
28
+ log(msg, :info)
29
+ end
30
+
31
+ def error(msg)
32
+ log(msg, :error)
33
+ end
34
+
35
+ def critical(msg)
36
+ log(msg, :critical)
37
+ end
38
+
39
+ def log(msg, level = :debug)
40
+ if @@levels[level] >= @@levels[@logger_level]
41
+ current_time = Time.now
42
+ key = if @prefix.nil? then current_time else "#{@prefix}:#{current_time.to_f}" end
43
+ log_msg = "#{@prefix} | #{current_time.to_s} | #{level} | #{msg}"
44
+ @client.set(key, log_msg)
45
+ @client.multi do
46
+ score = @client.zcard("logger_keys") || 0
47
+ @client.zadd("logger_keys", score+1, key)
48
+ end
49
+
50
+ end
51
+ end
52
+
53
+ def write_log(path=".", file_prefix = "Redislog")
54
+ count = @client.zcard("logger_keys")
55
+ keys = @client.zrange("logger_keys", 0, count)
56
+
57
+ #Export from redis to log file
58
+ if keys.length > 0
59
+ file = File.new("#{path}/#{file_prefix}_#{Time.now.to_i}.log", "w")
60
+
61
+ values = @client.mget(*keys)
62
+ (0 .. keys.length).each do |counter|
63
+ file.syswrite(values[counter].to_s)
64
+ file.syswrite("\n")
65
+ end
66
+
67
+ file.close
68
+
69
+ #delete the entries of logger_keys sorted set and also
70
+ #delete log messages
71
+ @client.zremrangebyrank("logger_keys", 0, count)
72
+ @client.del(*keys)
73
+ end
74
+ end
75
+ end
metadata ADDED
@@ -0,0 +1,69 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: redislog
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Aravind
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-01-14 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: redis
16
+ requirement: &81034940 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *81034940
25
+ - !ruby/object:Gem::Dependency
26
+ name: choice
27
+ requirement: &81034720 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *81034720
36
+ description: Redislog is an application logger with redis as backend instead of file.
37
+ email: aravindkumar.leo@gmail.com
38
+ executables:
39
+ - redislog
40
+ extensions: []
41
+ extra_rdoc_files: []
42
+ files:
43
+ - lib/redislog.rb
44
+ - bin/redislog
45
+ homepage: https://github.com/aravindj/Redislog
46
+ licenses: []
47
+ post_install_message:
48
+ rdoc_options: []
49
+ require_paths:
50
+ - lib
51
+ required_ruby_version: !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ! '>='
55
+ - !ruby/object:Gem::Version
56
+ version: '0'
57
+ required_rubygems_version: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ! '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ requirements: []
64
+ rubyforge_project:
65
+ rubygems_version: 1.8.15
66
+ signing_key:
67
+ specification_version: 3
68
+ summary: Redis based application logger.
69
+ test_files: []