Class: Vedeu::MonoLogger::LocklessLogDevice

Inherits:
LogDevice
  • Object
show all
Defined in:
lib/vedeu/support/log.rb

Overview

Ensures we can always write to the log file by creating a lock-less log device.

Instance Method Summary collapse

Constructor Details

#initialize(log = nil) ⇒ Object

Returns [].

Parameters:

  • log (defaults to: nil)


38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/vedeu/support/log.rb', line 38

def initialize(log = nil)
  @dev = nil
  @filename = nil
  @shift_age = nil
  @shift_size = nil

  if log.respond_to?(:write) && log.respond_to?(:close)
    @dev = log

  else
    @dev = open_logfile(log)
    @dev.sync = true
    @filename = log

  end
end

Instance Method Details

#closeObject

Returns [].

Returns:



66
67
68
# File 'lib/vedeu/support/log.rb', line 66

def close
  @dev.close rescue nil
end

#open_logfile(filename) ⇒ Object (private)

Returns [].

Parameters:

  • filename

Returns:



74
75
76
77
78
79
80
81
82
83
84
# File 'lib/vedeu/support/log.rb', line 74

def open_logfile(filename)
  if (FileTest.exist?(filename))
    open(filename, (File::WRONLY | File::APPEND))

  else
    logdev = open(filename, (File::WRONLY | File::APPEND | File::CREAT))
    logdev.sync = true
    logdev

  end
end

#write(message) ⇒ Object

Returns [].

Parameters:

  • message

Returns:



57
58
59
60
61
62
63
# File 'lib/vedeu/support/log.rb', line 57

def write(message)
  @dev.write(message)

rescue Exception => ignored
  warn("log writing failed. #{ignored}")

end