Skip to content

Commit 2cae372

Browse files
committed
allow setting shift variables in LogDevice when using reopen
1 parent bf6d5aa commit 2cae372

File tree

3 files changed

+95
-13
lines changed

3 files changed

+95
-13
lines changed

lib/logger.rb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -410,8 +410,9 @@ def initialize(logdev, shift_age = 0, shift_size = 1048576, level: DEBUG,
410410
#
411411
# Reopen a log device.
412412
#
413-
def reopen(logdev = nil)
414-
@logdev&.reopen(logdev)
413+
def reopen(logdev = nil, shift_age = nil, shift_size = nil, shift_period_suffix: nil, binmode: nil)
414+
@logdev&.reopen(logdev, shift_age: shift_age, shift_size: shift_size,
415+
shift_period_suffix: shift_period_suffix, binmode: binmode)
415416
self
416417
end
417418

lib/logger/log_device.rb

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,7 @@ def initialize(log = nil, shift_age: nil, shift_size: nil, shift_period_suffix:
1616
@binmode = binmode
1717
mon_initialize
1818
set_dev(log)
19-
if @filename
20-
@shift_age = shift_age || 7
21-
@shift_size = shift_size || 1048576
22-
@shift_period_suffix = shift_period_suffix || '%Y%m%d'
23-
24-
unless @shift_age.is_a?(Integer)
25-
base_time = @dev.respond_to?(:stat) ? @dev.stat.mtime : Time.now
26-
@next_rotate_time = next_rotate_time(base_time, @shift_age)
27-
end
28-
end
19+
set_file(shift_age, shift_size, shift_period_suffix) if @filename
2920
end
3021

3122
def write(message)
@@ -59,16 +50,18 @@ def close
5950
end
6051
end
6152

62-
def reopen(log = nil)
53+
def reopen(log = nil, shift_age: nil, shift_size: nil, shift_period_suffix: nil, binmode: nil)
6354
# reopen the same filename if no argument, do nothing for IO
6455
log ||= @filename if @filename
56+
@binmode = binmode unless binmode.nil?
6557
if log
6658
synchronize do
6759
if @filename and @dev
6860
@dev.close rescue nil # close only file opened by Logger
6961
@filename = nil
7062
end
7163
set_dev(log)
64+
set_file(shift_age, shift_size, shift_period_suffix) if @filename
7265
end
7366
end
7467
self
@@ -90,6 +83,17 @@ def set_dev(log)
9083
end
9184
end
9285

86+
def set_file(shift_age, shift_size, shift_period_suffix)
87+
@shift_age = shift_age.nil? ? @shift_age || 7 : shift_age
88+
@shift_size = shift_size.nil? ? @shift_size || 1048576 : shift_size
89+
@shift_period_suffix = shift_period_suffix.nil? ? @shift_period_suffix || '%Y%m%d' : shift_period_suffix
90+
91+
unless @shift_age.is_a?(Integer)
92+
base_time = @dev.respond_to?(:stat) ? @dev.stat.mtime : Time.now
93+
@next_rotate_time = next_rotate_time(base_time, @shift_age)
94+
end
95+
end
96+
9397
def open_logfile(filename)
9498
begin
9599
File.open(filename, (File::WRONLY | File::APPEND))

test/logger/test_logdevice.rb

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,83 @@ def test_reopen_file_by_file
189189
end
190190
end
191191

192+
def test_shifting_size_with_reopen
193+
tmpfile = Tempfile.new([File.basename(__FILE__, '.*'), '_1.log'])
194+
logfile = tmpfile.path
195+
logfile0 = logfile + '.0'
196+
logfile1 = logfile + '.1'
197+
logfile2 = logfile + '.2'
198+
logfile3 = logfile + '.3'
199+
tmpfile.close(true)
200+
File.unlink(logfile) if File.exist?(logfile)
201+
File.unlink(logfile0) if File.exist?(logfile0)
202+
File.unlink(logfile1) if File.exist?(logfile1)
203+
File.unlink(logfile2) if File.exist?(logfile2)
204+
205+
logger = Logger.new(STDERR)
206+
logger.reopen(logfile, 4, 100)
207+
208+
logger.error("0" * 15)
209+
assert_file.exist?(logfile)
210+
assert_file.not_exist?(logfile0)
211+
logger.error("0" * 15)
212+
assert_file.exist?(logfile0)
213+
assert_file.not_exist?(logfile1)
214+
logger.error("0" * 15)
215+
assert_file.exist?(logfile1)
216+
assert_file.not_exist?(logfile2)
217+
logger.error("0" * 15)
218+
assert_file.exist?(logfile2)
219+
assert_file.not_exist?(logfile3)
220+
logger.error("0" * 15)
221+
assert_file.not_exist?(logfile3)
222+
logger.error("0" * 15)
223+
assert_file.not_exist?(logfile3)
224+
logger.close
225+
File.unlink(logfile)
226+
File.unlink(logfile0)
227+
File.unlink(logfile1)
228+
File.unlink(logfile2)
229+
230+
tmpfile = Tempfile.new([File.basename(__FILE__, '.*'), '_2.log'])
231+
logfile = tmpfile.path
232+
logfile0 = logfile + '.0'
233+
logfile1 = logfile + '.1'
234+
logfile2 = logfile + '.2'
235+
logfile3 = logfile + '.3'
236+
tmpfile.close(true)
237+
logger = Logger.new(logfile, 4, 150)
238+
logger.error("0" * 15)
239+
assert_file.exist?(logfile)
240+
assert_file.not_exist?(logfile0)
241+
logger.error("0" * 15)
242+
assert_file.not_exist?(logfile0)
243+
logger.error("0" * 15)
244+
assert_file.exist?(logfile0)
245+
assert_file.not_exist?(logfile1)
246+
logger.error("0" * 15)
247+
assert_file.not_exist?(logfile1)
248+
logger.error("0" * 15)
249+
assert_file.exist?(logfile1)
250+
assert_file.not_exist?(logfile2)
251+
logger.error("0" * 15)
252+
assert_file.not_exist?(logfile2)
253+
logger.error("0" * 15)
254+
assert_file.exist?(logfile2)
255+
assert_file.not_exist?(logfile3)
256+
logger.error("0" * 15)
257+
assert_file.not_exist?(logfile3)
258+
logger.error("0" * 15)
259+
assert_file.not_exist?(logfile3)
260+
logger.error("0" * 15)
261+
assert_file.not_exist?(logfile3)
262+
logger.close
263+
File.unlink(logfile)
264+
File.unlink(logfile0)
265+
File.unlink(logfile1)
266+
File.unlink(logfile2)
267+
end
268+
192269
def test_shifting_size
193270
tmpfile = Tempfile.new([File.basename(__FILE__, '.*'), '_1.log'])
194271
logfile = tmpfile.path

0 commit comments

Comments
 (0)