remote_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/HISTORY CHANGED
@@ -9,3 +9,7 @@
9
9
  == 0.0.3 / 2010-09-06
10
10
 
11
11
  * Gemspec fixed
12
+
13
+ == 0.0.4 / 2010-09-06
14
+
15
+ * Procedures converted into classes
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.3
1
+ 0.0.4
@@ -0,0 +1,30 @@
1
+ module RemoteLogger
2
+
3
+ # Subclass of RemoteLogger::Logger communicating via DRb protocol
4
+ class DrbLogger < RemoteLogger::Logger
5
+
6
+ def self.start(name = LOGGER_NAME, options = {})
7
+ # Adding some security (disable remote eval)
8
+ $SAFE = 1
9
+
10
+ # Creating logger instance
11
+ logger = new options
12
+
13
+ # Raising new RingyDingy service
14
+ logger.info "#{name}: Initializing service..." if options[:verbose]
15
+ DRb.start_service(options[:uri]||DRB_URI, logger)
16
+ logger.info "#{name}: Service started" if options[:verbose]
17
+
18
+ DRb.thread.join
19
+
20
+ # Never reaches this point...
21
+ logger.info "#{name}: Service finished" if options[:verbose]
22
+ end
23
+
24
+ def self.find(name = LOGGER_NAME, options = {})
25
+ DRb.start_service
26
+ # Connecting to Logger
27
+ DRbObject.new_with_uri(options[:uri]||DRB_URI)
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,63 @@
1
+ #encoding: UTF-8
2
+
3
+ # TODO: Set up ACL, SSL and other security stuff
4
+ module RemoteLogger
5
+ DRB_URI = 'druby://127.0.0.1:61626'
6
+ LOGGER_NAME = 'RemoteLogger'
7
+ # Default service/logger name - used by Ring or retrieved via Log4R::Logger[LOGGER_NAME]
8
+ FILE_NAME = 'remote.log'
9
+ # File name of log file
10
+ FILE_ENCODING = 'CP1251:UTF-8'
11
+ # Encoding pair of log file ('File external:Ruby internal')
12
+ STDOUT_ENCODING = 'CP866:UTF-8'
13
+ # Encoding pair of stdout ('Stdout external:Ruby internal')
14
+ PATTERN = '%1.1l %d - %m'
15
+ # Log entry pattern
16
+ DATE_PATTERN = '%Y-%m-%d %H:%M:%S.%3N'
17
+
18
+ # A subclass of Log4r::Logger pre-configured with specific logging settings
19
+ class Logger < Log4r::Logger
20
+ include Log4r
21
+
22
+ # Creates new remote logger. The following options are available:
23
+ #
24
+ # <tt>:name</tt>:: Service/logger name - default 'RemoteLogger'
25
+ # <tt>:outputters</tt>:: Replace outputters (should be Log4r::Outputter subclasses) - default [log file, stdout]
26
+ # <tt>:file_name</tt>:: Log file name - default 'remote.log'
27
+ # <tt>:file_encoding</tt>:: Log file encoding - default FILE_ENCODING (Windows Cyrillic)
28
+ # <tt>:stdout_encoding</tt>:: Stdout encoding - default STDOUT_ENCODING (DOS/IBM Cyrillic)
29
+ # <tt>:replace</tt>:: Replacement for undefined conversion chars - default '?'
30
+ # <tt>:pattern</tt>:: Log message pattern - default PATTERN
31
+ # <tt>:date_pattern</tt>:: Timestamp pattern - default DATE_PATTERN
32
+ # <tt>:trunc</tt>:: Truncate (rewrite) log file upon creation - default false (append to file)
33
+ # <tt>:verbose</tt>:: Log all internal messages of RemoteLogger - default false (do not log logger-specific messages)
34
+ #
35
+ def initialize options = {}
36
+ # define outputters: http://log4r.sourceforge.net/rdoc/files/log4r/outputter/outputter_rb.html
37
+ if options[:outputters]
38
+ outputters = options[:outputters]
39
+ else
40
+ # specify log message format: http://log4r.sourceforge.net/rdoc/files/log4r/formatter/patternformatter_rb.html
41
+ format = PatternFormatter.new :pattern => options[:pattern]||PATTERN,
42
+ :date_pattern => options[:date_pattern]||DATE_PATTERN
43
+
44
+ # Set up IO streams with correct transcoding and conversion options: log file and (Windows) console
45
+ conversion = {:undef=>:replace, :replace=>options[:replace]||'?'}
46
+ file = File.new( options[:file_name]||FILE_NAME, (options[:trunc] ? 'w:' : 'a:') +
47
+ (options[:file_encoding]||FILE_ENCODING), conversion)
48
+ $stdout.set_encoding(options[:stdout_encoding]||STDOUT_ENCODING, conversion)
49
+
50
+ outputters = [StdoutOutputter.new('console', :formatter => format),
51
+ IOOutputter.new('file', file, :formatter => format)]
52
+ # file_o = FileOutputter.new 'file', :filename => 'remote.log', :trunc => false, :formatter => format # wrong encoding
53
+ # err_o = StderrOutputter.new 'error', :formatter => format # just in case
54
+ end
55
+
56
+ # create new logger named LOG_NAME
57
+ super(options[:name]||LOGGER_NAME).tap do |logger|
58
+ logger.outputters = outputters
59
+ logger.info "#{name}: Logger created" if options[:verbose]
60
+ end
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,37 @@
1
+ module RemoteLogger
2
+
3
+ # Subclass of RemoteLogger::Logger communicating via DRb protocol
4
+ class RingyLogger < Logger
5
+
6
+ def self.start(name = LOGGER_NAME, options = {})
7
+ # Adding some security (disable remote eval)
8
+ $SAFE = 1
9
+
10
+ # Creating logger instance
11
+ logger = RemoteLogger::Logger.new options
12
+
13
+ DRb.start_service
14
+
15
+ # Raising new RingyDingy service
16
+ logger.info "#{name}: Initializing service..." if options[:verbose]
17
+ RingyDingy.new(logger, name.to_sym).run
18
+ logger.info "#{name}: Service started" if options[:verbose]
19
+
20
+ DRb.thread.join
21
+
22
+ # Never reaches this point...
23
+ logger.info "#{name}: Service finished" if options[:verbose]
24
+ end
25
+
26
+ def self.find(name = LOGGER_NAME, options = {})
27
+ DRb.start_service
28
+
29
+ # Connecting to Ring server
30
+ ring_server = Rinda::RingFinger.primary
31
+
32
+ # Requesting logger service by name
33
+ service = ring_server.read [:name, name.to_sym, nil, nil]
34
+ service[2]
35
+ end
36
+ end
37
+ end
data/lib/remote_logger.rb CHANGED
@@ -25,5 +25,5 @@ end # module RemoteLogger
25
25
 
26
26
  # Require all ruby source files located under directory lib/remote_logger
27
27
  # If you need files in specific order, you should specify it here before the glob
28
- RemoteLogger.require_libs %W[**/*]
28
+ RemoteLogger.require_libs %W[logger **/*]
29
29
 
@@ -0,0 +1,19 @@
1
+ #encoding: UTF-8
2
+ require_relative '../spec_helper'
3
+ require_relative 'shared_spec'
4
+
5
+ module RemoteLoggerTest
6
+ describe RemoteLogger::DrbLogger do
7
+ spec { use { include RemoteLogger } }
8
+
9
+ context 'creating Drb logger' do
10
+ spec { pending; use { RemoteLogger.start_drb_logger(name = 'RemoteLogger', options = {}) } }
11
+
12
+ it_should_behave_like 'Logger'
13
+
14
+ it 'instantiates drb logger service'
15
+
16
+ end
17
+ end
18
+ end
19
+
@@ -0,0 +1,12 @@
1
+ #encoding: UTF-8
2
+ require_relative '../spec_helper'
3
+ require_relative 'shared_spec'
4
+
5
+ module RemoteLoggerTest
6
+
7
+ describe RemoteLogger::Logger do
8
+
9
+ it_should_behave_like 'Logger'
10
+
11
+ end
12
+ end
@@ -0,0 +1,131 @@
1
+ #encoding: UTF-8
2
+ require_relative '../spec_helper'
3
+
4
+ module RemoteLoggerTest
5
+
6
+ shared_examples_for 'Logger' do
7
+ before(:each) do
8
+ File.stub!(:new) { |name, mode, opts| @logfile_mock = StringIO.new('', mode) }
9
+ end
10
+
11
+ context ' by default' do
12
+ it 'creates a subclass of Log4r logger with default name "RemoteLogger"' do
13
+ logger = described_class.new
14
+ logger.should be_a_kind_of Log4r::Logger
15
+ logger.should == Log4r::Logger['RemoteLogger']
16
+ logger.should == RemoteLogger::Logger['RemoteLogger']
17
+ end
18
+
19
+ it 'outputs log messages to IOstream(file) and stdout simultaneously' do
20
+ outputters = described_class.new.outputters
21
+ outputters.should have(2).outputters
22
+ outputters.first.should be_an_instance_of Log4r::StdoutOutputter
23
+ outputters.last.should be_an_instance_of Log4r::IOOutputter
24
+ end
25
+
26
+ it 'appends to logfile "remote.log" with Windows-1251(Cyrillic) encoding' do
27
+ File.should_receive(:new) do |filename, mode, options|
28
+ filename.should == "remote.log"
29
+ mode.should =~ /^a:/
30
+ mode.should =~ /(CP|cp)1251:/
31
+ end
32
+ logger = described_class.new
33
+ end
34
+
35
+ it 'writes to stdout with IBM-866(DOS-Cyrillic) encoding' do
36
+ $stdout.should_receive(:set_encoding).with(/(CP|cp)866:/, hash_including(:undef))
37
+ logger = described_class.new
38
+ end
39
+
40
+ it 'logs string messages using default pattern' do
41
+ logger = described_class.new
42
+ logger_should_log 'I %Y-%m-%d %H:%M:\d{2}.\d{3} - My message\n'
43
+ logger.info 'My message'
44
+ end
45
+
46
+ it 'does not log logger creation announcement' do
47
+ pending 'both @logfile_mock creation and announcement happens in sequence, impossible to set expectations'
48
+ logger_should_not_log 'Logger created'
49
+ logger = described_class.new
50
+ end
51
+
52
+ it 'replaces illegal chars in output codepages with ?' do
53
+ pending 'Impossible to test without real files, since StringIO does not support :undef option'
54
+ logger_should_log 'I %Y-%m-%d %H:%M:\d{2}.\d{3} - My ?? message\n'
55
+ logger = described_class.new
56
+ logger.info 'My 開始 message'
57
+ end
58
+ end
59
+
60
+ context 'with options' do
61
+ it 'accepts logger name with :name option' do
62
+ logger = described_class.new :name=>'MyLogger'
63
+ logger.should == Log4r::Logger['MyLogger']
64
+ logger.should == RemoteLogger::Logger['MyLogger']
65
+ end
66
+
67
+ it 'accepts logfile name with :file_name option' do
68
+ File.should_receive(:new).with('my_name.log', anything, anything)
69
+ logger = described_class.new :file_name=>'my_name.log'
70
+ end
71
+
72
+ it 'accepts custom log pattern with :pattern option' do
73
+ logger = described_class.new :pattern=>'%d %l %7.7m'
74
+ logger_should_log '%Y-%m-%d %H:%M:\d{2}.\d{3} INFO My mess\n'
75
+ logger.info 'My message'
76
+ end
77
+
78
+ it 'accepts custom date pattern with :date_pattern option' do
79
+ logger = described_class.new :date_pattern=>'%m/%d/%y'
80
+ logger_should_log 'I %m/%d/%y - My message\n'
81
+ logger.info 'My message'
82
+ end
83
+
84
+ it 'accepts custom file encoding with :file_encoding option' do
85
+ File.should_receive(:new).with(anything, /^a:CP866/, anything)
86
+ logger = described_class.new :file_encoding=>'CP866'
87
+ end
88
+
89
+ it 'accepts custom stdout encoding with :stdout_encoding option' do
90
+ $stdout.should_receive(:set_encoding).with(/CP1251/, hash_including(:undef))
91
+ logger = described_class.new :stdout_encoding=>'CP1251'
92
+ end
93
+
94
+ it 'accepts custom outputters with :outputters option, replacing default outputters' do
95
+ out_string = StringIO.new
96
+ $stdout.should_not_receive(:set_encoding)
97
+ File.should_not_receive(:new)
98
+ logger = described_class.new :outputters=>Log4r::IOOutputter.new('errors', out_string)
99
+ $stdout.should_not_receive(:print)
100
+ out_string.should_receive(:print).with " INFO RemoteLogger: My message\n"
101
+ logger.info 'My message'
102
+ end
103
+
104
+ it 'rewrites logfile with :trunc option' do
105
+ File.should_receive(:new).with(anything, /^w:/, anything)
106
+ # File.new(options[:file_name]||FILE_NAME, (options[:trunc] ? 'w:' : 'a:') +
107
+ # (options[:file_encoding]||FILE_ENCODING), :undef => options[:undef]||:replace)
108
+ logger = described_class.new( trunc: true)
109
+ end
110
+
111
+ it 'specifies conversion replacement char with :replace option' do
112
+ pending 'Impossible to test without real files, since StringIO does not support :undef option'
113
+ File.should_receive(:new).with(anything, anything, hash_including(:replace))
114
+ # File.new(options[:file_name]||FILE_NAME, (options[:trunc] ? 'w:' : 'a:') +
115
+ # (options[:file_encoding]||FILE_ENCODING), :undef => options[:undef]||:replace)
116
+ logger = described_class.new
117
+ #:replace=>'-'
118
+ logger_should_log '%Y-%m-%d %H:%M:\d{2}.\d{3} INFO My -- message\n'
119
+ logger.info 'My 開始 message'
120
+ p @logfile_mock
121
+ end
122
+
123
+ it 'logs logger creation announcement with :verbose option' do
124
+ pending 'both @logfile_mock creation and announcement happens in sequence, impossible to set expectations'
125
+ logger_should_log 'Logger created'
126
+ logger = described_class.new( verbose: true )
127
+ end
128
+
129
+ end
130
+ end
131
+ end
data/spec/spec_helper.rb CHANGED
@@ -45,4 +45,11 @@ module RemoteLoggerTest
45
45
  @logfile_mock.should_receive(:print).with(Regexp.new(formatted_message))
46
46
  $stdout.should_receive(:print).with(Regexp.new(formatted_message))
47
47
  end
48
+
49
+ def logger_should_not_log message
50
+ formatted_message = Time.now.strftime message
51
+ @logfile_mock.should_not_receive(:print).with(Regexp.new(formatted_message))
52
+ $stdout.should_not_receive(:print).with(Regexp.new(formatted_message))
53
+ end
54
+
48
55
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: remote_logger
3
3
  version: !ruby/object:Gem::Version
4
- hash: 25
4
+ hash: 23
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 3
10
- version: 0.0.3
9
+ - 4
10
+ version: 0.0.4
11
11
  platform: ruby
12
12
  authors:
13
13
  - arvicco
@@ -92,10 +92,14 @@ extra_rdoc_files:
92
92
  - README.rdoc
93
93
  files:
94
94
  - bin/remote_logger
95
- - lib/remote_logger/remote_logger.rb
95
+ - lib/remote_logger/drb_logger.rb
96
+ - lib/remote_logger/logger.rb
97
+ - lib/remote_logger/ringy_logger.rb
96
98
  - lib/remote_logger.rb
97
99
  - lib/version.rb
98
- - spec/remote_logger/remote_logger_spec.rb
100
+ - spec/remote_logger/drb_logger_spec.rb
101
+ - spec/remote_logger/logger_spec.rb
102
+ - spec/remote_logger/shared_spec.rb
99
103
  - spec/spec.opts
100
104
  - spec/spec_helper.rb
101
105
  - features/remote_logger.feature
@@ -153,6 +157,8 @@ signing_key:
153
157
  specification_version: 3
154
158
  summary: Client/server for remote logger using multiple communication methods
155
159
  test_files:
156
- - spec/remote_logger/remote_logger_spec.rb
160
+ - spec/remote_logger/drb_logger_spec.rb
161
+ - spec/remote_logger/logger_spec.rb
162
+ - spec/remote_logger/shared_spec.rb
157
163
  - spec/spec.opts
158
164
  - spec/spec_helper.rb
@@ -1,104 +0,0 @@
1
- #encoding: UTF-8
2
- # TODO: Set up ACL, SSL and other security stuff
3
- module RemoteLogger
4
- include Log4r
5
-
6
- DRB_URI = 'druby://127.0.0.1:61626'
7
- LOGGER_NAME = 'RemoteLogger' # Default service/logger name - used by Ring or retrieved via Log4R::Logger[LOGGER_NAME]
8
- FILE_NAME = 'remote.log' # File name of log file
9
- FILE_ENCODING = 'CP1251:UTF-8' # Encoding pair of log file ('File external:Ruby internal')
10
- STDOUT_ENCODING = 'CP866:UTF-8' # Encoding pair of stdout ('Stdout external:Ruby internal')
11
- PATTERN = '%1.1l %d - %m' # Log entry pattern
12
- DATE_PATTERN = '%Y-%m-%d %H:%M:%S.%3N'
13
-
14
- # Creates a new Log4r logger. The following options are available:
15
- #
16
- # <tt>:name</tt>:: Service/logger name - default 'RemoteLogger'
17
- # <tt>:outputters</tt>:: Replace outputters (should be Log4r::Outputter subclasses) - default [log file, stdout]
18
- # <tt>:file_name</tt>:: Log file name - default 'remote.log'
19
- # <tt>:file_encoding</tt>:: Log file encoding - default FILE_ENCODING (Windows Cyrillic)
20
- # <tt>:stdout_encoding</tt>:: Stdout encoding - default STDOUT_ENCODING (DOS/IBM Cyrillic)
21
- # <tt>:replace</tt>:: Replacement for undefined conversion chars - default '?'
22
- # <tt>:pattern</tt>:: Log message pattern - default PATTERN
23
- # <tt>:date_pattern</tt>:: Timestamp pattern - default DATE_PATTERN
24
- # <tt>:trunc</tt>:: Truncate (rewrite) log file upon creation - default false (append to file)
25
- # <tt>:verbose</tt>:: Log all internal messages of RemoteLogger - default false (do not log logger-specific messages)
26
- #
27
- def self.create_logger options = {}
28
- # define outputters: http://log4r.sourceforge.net/rdoc/files/log4r/outputter/outputter_rb.html
29
- if options[:outputters]
30
- outputters = options[:outputters]
31
- else
32
- # specify log message format: http://log4r.sourceforge.net/rdoc/files/log4r/formatter/patternformatter_rb.html
33
- format = PatternFormatter.new :pattern => options[:pattern]||PATTERN,
34
- :date_pattern => options[:date_pattern]||DATE_PATTERN
35
-
36
- # Set up IO streams with correct transcoding and conversion options: log file and (Windows) console
37
- conversion = {:undef=>:replace, :replace=>options[:replace]||'?'}
38
- file = File.new(options[:file_name]||FILE_NAME, (options[:trunc] ? 'w:' : 'a:') +
39
- (options[:file_encoding]||FILE_ENCODING), conversion )
40
- $stdout.set_encoding(options[:stdout_encoding]||STDOUT_ENCODING, conversion)
41
-
42
- outputters = [StdoutOutputter.new('console', :formatter => format),
43
- IOOutputter.new('file', file, :formatter => format) ]
44
- # file_o = FileOutputter.new 'file', :filename => 'remote.log', :trunc => false, :formatter => format # wrong encoding
45
- # err_o = StderrOutputter.new 'error', :formatter => format # just in case
46
- end
47
-
48
- # create new logger named LOG_NAME
49
- Logger.new(options[:name]||LOGGER_NAME).tap do |logger|
50
- logger.outputters = outputters
51
- logger.info "#{name}: Logger created" if options[:verbose]
52
- end
53
- end
54
-
55
- def self.start_ringy_logger(name = LOGGER_NAME, options = {})
56
- # Adding some security (disable remote eval)
57
- $SAFE = 1
58
-
59
- # Creating logger instance
60
- logger = create_logger options
61
-
62
- DRb.start_service
63
-
64
- # Raising new RingyDingy service
65
- logger.info "#{name}: Initializing service..." if options[:verbose]
66
- RingyDingy.new(logger, name.to_sym).run
67
- logger.info "#{name}: Service started" if options[:verbose]
68
-
69
- DRb.thread.join
70
- logger.info "#{name}: Service finished" if options[:verbose]
71
- end
72
-
73
- def self.find_ringy_logger(name = LOGGER_NAME, options = {})
74
- DRb.start_service
75
- # Connecting to Logger
76
- ring_server = Rinda::RingFinger.primary
77
- service = ring_server.read [:name, name.to_sym, nil, nil]
78
- service[2]
79
- end
80
-
81
- def self.start_drb_logger(name = LOGGER_NAME, options = {})
82
- # Adding some security (disable remote eval)
83
- $SAFE = 1
84
-
85
- # Creating logger instance
86
- logger = create_logger options
87
-
88
- # Raising new RingyDingy service
89
- logger.info "#{name}: Initializing service..." if options[:verbose]
90
- DRb.start_service(options[:uri]||DRB_URI, logger)
91
- logger.info "#{name}: Service started" if options[:verbose]
92
-
93
- DRb.thread.join
94
- logger.info "#{name}: Service finished" if options[:verbose]
95
- end
96
-
97
- def self.find_drb_logger(name = LOGGER_NAME, options = {})
98
- DRb.start_service
99
- # Connecting to Logger
100
- log = DRbObject.new_with_uri(options[:uri]||DRB_URI)
101
- end
102
-
103
-
104
- end
@@ -1,132 +0,0 @@
1
- #encoding: UTF-8
2
- require_relative '../spec_helper'
3
-
4
- module RemoteLoggerTest
5
- describe RemoteLogger do
6
- before(:each) do
7
- File.stub!(:new) {|name, mode, opts| @logfile_mock = StringIO.new('', mode) }
8
- end
9
-
10
- spec {use { include RemoteLogger}}
11
-
12
- shared_examples_for 'Log4r proxy' do
13
- context ' by default' do
14
- it 'creates Log4r logger with default name "RemoteLogger"' do
15
- logger = RemoteLogger.create_logger
16
- logger.should be_an_instance_of Log4r::Logger
17
- logger.should == Log4r::Logger['RemoteLogger']
18
- logger.should == RemoteLogger::Logger['RemoteLogger']
19
- end
20
-
21
- it 'outputs log messages to IOstream(file) and stdout simultaneously' do
22
- outputters = RemoteLogger.create_logger.outputters
23
- outputters.should have(2).outputters
24
- outputters.first.should be_an_instance_of Log4r::StdoutOutputter
25
- outputters.last.should be_an_instance_of Log4r::IOOutputter
26
- end
27
-
28
- it 'appends to logfile "remote.log" with Windows-1251(Cyrillic) encoding' do
29
- File.should_receive(:new) do |filename, mode, options|
30
- filename.should == "remote.log"
31
- mode.should =~ /^a:/
32
- mode.should =~ /(CP|cp)1251:/
33
- end
34
- logger = RemoteLogger.create_logger
35
- end
36
-
37
- it 'writes to stdout with IBM-866(DOS-Cyrillic) encoding' do
38
- $stdout.should_receive(:set_encoding).with(/(CP|cp)866:/, hash_including(:undef))
39
- logger = RemoteLogger.create_logger
40
- end
41
-
42
- it 'logs string messages using default pattern' do
43
- logger = RemoteLogger.create_logger
44
- logger_should_log 'I %Y-%m-%d %H:%M:\d{2}.\d{3} - My message\n'
45
- logger.info 'My message'
46
- end
47
-
48
- it 'logs logger creation announcement'
49
-
50
- it 'replaces illegal chars in output codepages with ?' do
51
- pending 'Impossible to test without real files'
52
- logger_should_log 'I %Y-%m-%d %H:%M:\d{2}.\d{3} - My ? message\n'
53
- logger = RemoteLogger.create_logger
54
- logger.info 'My 昔 message'
55
- end
56
- end
57
-
58
- context 'with options' do
59
- it 'accepts logger name with :name option' do
60
- logger = RemoteLogger.create_logger :name=>'MyLogger'
61
- logger.should == Log4r::Logger['MyLogger']
62
- logger.should == RemoteLogger::Logger['MyLogger']
63
- end
64
-
65
- it 'accepts logfile name with :file_name option' do
66
- File.should_receive(:new).with('my_name.log', anything, anything)
67
- logger = RemoteLogger.create_logger :file_name=>'my_name.log'
68
- end
69
-
70
- it 'accepts custom log pattern with :pattern option' do
71
- logger = RemoteLogger.create_logger :pattern=>'%d %l %7.7m'
72
- logger_should_log '%Y-%m-%d %H:%M:\d{2}.\d{3} INFO My mess\n'
73
- logger.info 'My message'
74
- end
75
-
76
- it 'accepts custom date pattern with :date_pattern option' do
77
- logger = RemoteLogger.create_logger :date_pattern=>'%m/%d/%y'
78
- logger_should_log 'I %m/%d/%y - My message\n'
79
- logger.info 'My message'
80
- end
81
-
82
- it 'accepts custom file encoding with :file_encoding option' do
83
- File.should_receive(:new).with(anything, /^a:CP866/, anything)
84
- logger = RemoteLogger.create_logger :file_encoding=>'CP866'
85
- end
86
-
87
- it 'accepts custom stdout encoding with :stdout_encoding option' do
88
- $stdout.should_receive(:set_encoding).with(/CP1251/, hash_including(:undef))
89
- logger = RemoteLogger.create_logger :stdout_encoding=>'CP1251'
90
- end
91
-
92
- it 'accepts custom outputters with :outputters option, replacing default outputters' do
93
- out_string = StringIO.new
94
- $stdout.should_not_receive(:set_encoding)
95
- File.should_not_receive(:new)
96
- logger = RemoteLogger.create_logger :outputters=>Log4r::IOOutputter.new('errors', out_string)
97
- $stdout.should_not_receive(:print)
98
- out_string.should_receive(:print).with " INFO RemoteLogger: My message\n"
99
- logger.info 'My message'
100
- end
101
-
102
- it 'rewrites logfile with :trunc option' do
103
- File.should_receive(:new).with(anything, /^w:/, anything)
104
- # File.new(options[:file_name]||FILE_NAME, (options[:trunc] ? 'w:' : 'a:') +
105
- # (options[:file_encoding]||FILE_ENCODING), :undef => options[:undef]||:replace)
106
- logger = RemoteLogger.create_logger :trunc=>true
107
- end
108
-
109
- it 'specifies conversion replacement char with :replace option' do
110
- pending 'Impossible to test without real files'
111
- File.should_receive(:new).with(anything, anything, hash_including(:replace))
112
- # File.new(options[:file_name]||FILE_NAME, (options[:trunc] ? 'w:' : 'a:') +
113
- # (options[:file_encoding]||FILE_ENCODING), :undef => options[:undef]||:replace)
114
- logger = RemoteLogger.create_logger #:replace=>'-'
115
- logger_should_log '%Y-%m-%d %H:%M:\d{2}.\d{3} INFO My - message\n'
116
- logger.info 'My 昔 message'
117
- end
118
-
119
- it 'skips logger creation announcement with :silent option'
120
- end
121
- end
122
-
123
- context 'creating Drb logger' do
124
- spec{ pending; use{ RemoteLogger.start_drb_logger(name = 'RemoteLogger', options = {})}}
125
- it_should_behave_like 'Log4r proxy'
126
-
127
- it 'instantiates drb logger service' do
128
-
129
- end
130
- end
131
- end
132
- end