dima_app_logger 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
File without changes
@@ -0,0 +1 @@
1
+ require File.dirname(__FILE__) + '/app_logger/logger'
@@ -0,0 +1,101 @@
1
+ require 'fileutils'
2
+ require 'logger'
3
+
4
+ module Dima
5
+ class AppLogger
6
+ attr_accessor :_options
7
+
8
+ def initialize(options = {})
9
+ self._options = {}
10
+ self._options[:root] = options[:root]
11
+ self._options[:env] = options[:env]
12
+ self._options[:name] = options[:name] || ENV["APP_LOGGER_NAME"]
13
+ if defined?(Rails)
14
+ self._options[:root] ||= Rails.root
15
+ self._options[:env] ||= Rails.env
16
+ end
17
+ self._options[:env] ||= "development"
18
+ self._options[:root] ||= Dir.pwd
19
+ _expire!
20
+ end
21
+
22
+ def _logger
23
+ unless @logger
24
+ @logger = if _options[:env] == "test"
25
+ _create_test_logger
26
+ elsif ENV["_"] =~ /irb/ || ENV["APP_LOGGER_STDOUT"]
27
+ _create_stdout_logger
28
+ else
29
+ _create_app_logger
30
+ end
31
+ end
32
+ @logger
33
+ end
34
+
35
+ def _create_app_logger
36
+ name = _options[:env] + "." + (_options[:name] && "#{_options[:name]}.").to_s + _options[:pid].to_s + ".log"
37
+ name = File.join(self._options[:root], "log", _date_string, name)
38
+ _mkdir(_log_file)
39
+ AppLoggerInstance.new(name)
40
+ end
41
+
42
+ def _create_test_logger
43
+ name = File.join(_options[:root], "log", "test.log")
44
+ _mkdir(name)
45
+ AppLoggerInstance.new(name)
46
+ end
47
+
48
+ def _create_stdout_logger
49
+ AppStdoutLoggerInstance.new
50
+ end
51
+
52
+ def _expired?
53
+ tm = Time.now.utc
54
+ rs = _options[:pid] != Process.pid ||
55
+ _options[:time].day != tm.day ||
56
+ _options[:time].month != tm.month ||
57
+ _options[:time].year != tm.year
58
+ tm = nil
59
+ rs
60
+ end
61
+
62
+ def _expire!
63
+ self._options[:pid] = Process.pid
64
+ self._options[:time] = Time.now.utc
65
+ if @logger
66
+ @logger.close if @logger.respond_to?(:close)
67
+ @logger = nil
68
+ end
69
+ end
70
+
71
+ def _date_string
72
+ _options[:time].strftime("%Y%m%d")
73
+ end
74
+
75
+ def _mkdir(path)
76
+ FileUtils.mkdir_p(File.dirname(path))
77
+ end
78
+
79
+ def method_missing(method, *args, &block)
80
+ puts method.to_s
81
+ _expire! if _expired?
82
+ _logger.__send__(method, *args, &block)
83
+ end
84
+ end
85
+
86
+ class AppLoggerInstance < ::Logger
87
+ def format_message(level, time, progname, msg)
88
+ tm = time.utc.strftime("%Y/%m/%d %H:%M:%S") + "." + ("%.03d" % (time.usec / 1000))
89
+ "#{tm} UTC [#{level.split(//)[0]}] -- #{msg}\n"
90
+ end
91
+ end
92
+
93
+ class AppStdoutLoggerInstance < ::Logger
94
+ def initialize
95
+ super(STDOUT)
96
+ end
97
+ def format_message(level, time, progname, msg)
98
+ msg.to_s
99
+ end
100
+ end
101
+ end
metadata ADDED
@@ -0,0 +1,98 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: dima_app_logger
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ version: 0.0.1
11
+ platform: ruby
12
+ authors:
13
+ - Dmitry Galinsky
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-12-22 00:00:00 +03:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: rspec
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 3
30
+ segments:
31
+ - 0
32
+ version: "0"
33
+ type: :development
34
+ version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: rr
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ hash: 3
44
+ segments:
45
+ - 0
46
+ version: "0"
47
+ type: :development
48
+ version_requirements: *id002
49
+ description: Application logger
50
+ email: dima.exe@gmail.com
51
+ executables: []
52
+
53
+ extensions: []
54
+
55
+ extra_rdoc_files:
56
+ - README.rdoc
57
+ files:
58
+ - README.rdoc
59
+ - lib/app_logger/logger.rb
60
+ - lib/app_logger.rb
61
+ has_rdoc: true
62
+ homepage: https://github.com/dima-exe/app_logger
63
+ licenses: []
64
+
65
+ post_install_message:
66
+ rdoc_options:
67
+ - --line-numbers
68
+ - --main
69
+ - README.rdoc
70
+ require_paths:
71
+ - lib
72
+ required_ruby_version: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ">="
76
+ - !ruby/object:Gem::Version
77
+ hash: 3
78
+ segments:
79
+ - 0
80
+ version: "0"
81
+ required_rubygems_version: !ruby/object:Gem::Requirement
82
+ none: false
83
+ requirements:
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ hash: 3
87
+ segments:
88
+ - 0
89
+ version: "0"
90
+ requirements: []
91
+
92
+ rubyforge_project:
93
+ rubygems_version: 1.3.7
94
+ signing_key:
95
+ specification_version: 3
96
+ summary: Application logger
97
+ test_files: []
98
+