Class: Lumberjack::Device::DateRollingLogFile

Inherits:
RollingLogFile show all
Defined in:
lib/lumberjack/device/date_rolling_log_file.rb

Overview

This log device will append entries to a file and roll the file periodically by date. Files are rolled at midnight and can be rolled daily, weekly, or monthly. Archive file names will have the date appended to them in the format “.YYYY-MM-DD” for daily, “.week-of-YYYY-MM-DD” for weekly and “.YYYY-MM” for monthly. It is not guaranteed that log messages will break exactly on the roll period as buffered entries will always be written to the same file.

Constant Summary

Constants inherited from Writer

Writer::DEFAULT_ADDITIONAL_LINES_TEMPLATE, Writer::DEFAULT_FIRST_LINE_TEMPLATE

Instance Attribute Summary

Attributes inherited from RollingLogFile

#keep, #path

Attributes inherited from LogFile

#path

Attributes inherited from Writer

#buffer_size

Instance Method Summary collapse

Methods inherited from RollingLogFile

#roll_file!

Methods inherited from Writer

#close, #flush, #write

Methods inherited from Lumberjack::Device

#cleanup_files!, #close, #do_once, #flush, #write

Constructor Details

#initialize(path, options = {}) ⇒ DateRollingLogFile

Create a new logging device to the specified file. The period to roll the file is specified with the :roll option which may contain a value of :daily, :weekly, or :monthly.



14
15
16
17
18
19
20
21
22
23
24
# File 'lib/lumberjack/device/date_rolling_log_file.rb', line 14

def initialize(path, options = {})
  @manual = options[:manual]
  @file_date = Date.today
  if options[:roll] && options[:roll].to_s.match(/(daily)|(weekly)|(monthly)/i)
    @roll_period = $~[0].downcase.to_sym
    options.delete(:roll)
  else
    raise ArgumentError.new("illegal value for :roll (#{options[:roll].inspect})")
  end
  super
end

Instance Method Details

#archive_file_suffixObject



26
27
28
29
30
31
32
33
34
35
# File 'lib/lumberjack/device/date_rolling_log_file.rb', line 26

def archive_file_suffix
  case @roll_period
  when :weekly
    "#{@file_date.strftime('week-of-%Y-%m-%d')}"
  when :monthly
    "#{@file_date.strftime('%Y-%m')}"
  else
    "#{@file_date.strftime('%Y-%m-%d')}"
  end
end

#roll_file?Boolean

Returns:

  • (Boolean)


37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/lumberjack/device/date_rolling_log_file.rb', line 37

def roll_file?
  if @manual
    true
  else
    date = Date.today
    if date.year > @file_date.year
      true
    elsif @roll_period == :daily && date.yday > @file_date.yday
      true
    elsif @roll_period == :weekly && date.cweek > @file_date.cweek
      true
    elsif @roll_period == :monthly && date.month > @file_date.month
      true
    else
      false
    end
  end
end