Skip to content

Commit 30e4359

Browse files
committed
Copy permission and ownership at shift
Fix #80
1 parent 1f89664 commit 30e4359

File tree

2 files changed

+31
-0
lines changed

2 files changed

+31
-0
lines changed

lib/logger/log_device.rb

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,9 +226,23 @@ def shift_log_period(period_end)
226226
end
227227

228228
def shift_log_file(shifted)
229+
stat = @dev.stat
229230
@dev.close rescue nil
230231
File.rename(@filename, shifted)
231232
@dev = create_logfile(@filename)
233+
mode, uid, gid = stat.mode, stat.uid, stat.gid
234+
begin
235+
@dev.chmod(mode) if mode
236+
mode = nil
237+
@dev.chown(uid, gid)
238+
rescue Errno::EPERM
239+
if mode
240+
# failed to chmod, probably nothing can do more.
241+
elsif uid
242+
uid = nil
243+
retry # to change gid only
244+
end
245+
end
232246
return true
233247
end
234248
end

test/logger/test_logdevice.rb

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,23 @@ def test_reopen_file_by_file
205205
end
206206
end
207207

208+
def test_perm_after_shift
209+
mode = 0o611
210+
File.open(@filename, "w") {|f| f.chmod mode}
211+
logfile = @filename
212+
logfile0 = logfile + '.0'
213+
logdev = d(@filename, shift_age: 1, shift_size: 0)
214+
logdev.write('hello')
215+
logdev.write('hello')
216+
logdev.close
217+
218+
assert_equal File.stat(logfile0).mode, File.stat(logfile).mode
219+
ensure
220+
if logfile0
221+
File.unlink(logfile0) rescue nil
222+
end
223+
end
224+
208225
def test_shifting_size_with_reopen
209226
tmpfile = Tempfile.new([File.basename(__FILE__, '.*'), '_1.log'])
210227
logfile = tmpfile.path

0 commit comments

Comments
 (0)