Class | Logger::LogDevice |
In: |
lib/logger.rb
|
Parent: | Object |
SiD | = | 24 * 60 * 60 |
dev | [R] | |
filename | [R] |
# File lib/logger.rb, line 480 480: def initialize(log = nil, opt = {}) 481: @dev = @filename = @shift_age = @shift_size = nil 482: @mutex = LogDeviceMutex.new 483: if log.respond_to?(:write) and log.respond_to?(:close) 484: @dev = log 485: else 486: @dev = open_logfile(log) 487: @dev.sync = true 488: @filename = log 489: @shift_age = opt[:shift_age] || 7 490: @shift_size = opt[:shift_size] || 1048576 491: end 492: end
# File lib/logger.rb, line 507 507: def close 508: @mutex.synchronize do 509: @dev.close 510: end 511: end
# File lib/logger.rb, line 494 494: def write(message) 495: @mutex.synchronize do 496: if @shift_age and @dev.respond_to?(:stat) 497: begin 498: check_shift_log 499: rescue 500: raise Logger::ShiftingError.new("Shifting failed. #{$!}") 501: end 502: end 503: @dev.write(message) 504: end 505: end
# File lib/logger.rb, line 530 530: def add_log_header(file) 531: file.write( 532: "# Logfile created on %s by %s\n" % [Time.now.to_s, Logger::ProgName] 533: ) 534: end
# File lib/logger.rb, line 538 538: def check_shift_log 539: if @shift_age.is_a?(Integer) 540: # Note: always returns false if '0'. 541: if @filename && (@shift_age > 0) && (@dev.stat.size > @shift_size) 542: shift_log_age 543: end 544: else 545: now = Time.now 546: if @dev.stat.mtime <= previous_period_end(now) 547: shift_log_period(now) 548: end 549: end 550: end
# File lib/logger.rb, line 523 523: def create_logfile(filename) 524: logdev = open(filename, (File::WRONLY | File::APPEND | File::CREAT)) 525: logdev.sync = true 526: add_log_header(logdev) 527: logdev 528: end
# File lib/logger.rb, line 589 589: def eod(t) 590: Time.mktime(t.year, t.month, t.mday, 23, 59, 59) 591: end
# File lib/logger.rb, line 515 515: def open_logfile(filename) 516: if (FileTest.exist?(filename)) 517: open(filename, (File::WRONLY | File::APPEND)) 518: else 519: create_logfile(filename) 520: end 521: end
# File lib/logger.rb, line 576 576: def previous_period_end(now) 577: case @shift_age 578: when /^daily$/ 579: eod(now - 1 * SiD) 580: when /^weekly$/ 581: eod(now - ((now.wday + 1) * SiD)) 582: when /^monthly$/ 583: eod(now - now.mday * SiD) 584: else 585: now 586: end 587: end
# File lib/logger.rb, line 552 552: def shift_log_age 553: (@shift_age-3).downto(0) do |i| 554: if FileTest.exist?("#{@filename}.#{i}") 555: File.rename("#{@filename}.#{i}", "#{@filename}.#{i+1}") 556: end 557: end 558: @dev.close 559: File.rename("#{@filename}", "#{@filename}.0") 560: @dev = create_logfile(@filename) 561: return true 562: end
# File lib/logger.rb, line 564 564: def shift_log_period(now) 565: postfix = previous_period_end(now).strftime("%Y%m%d") # YYYYMMDD 566: age_file = "#{@filename}.#{postfix}" 567: if FileTest.exist?(age_file) 568: raise RuntimeError.new("'#{ age_file }' already exists.") 569: end 570: @dev.close 571: File.rename("#{@filename}", age_file) 572: @dev = create_logfile(@filename) 573: return true 574: end