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