class Logging::Appenders::File
Public Class Methods
Asserts that the given filename can be used as a log file by ensuring that if the file exists it is a regular file and it is writable. If the file does not exist, then the directory is checked to see if it is writable.
An ArgumentError
is raised if any of these assertions fail.
# File lib/logging/appenders/file.rb, line 25 def self.assert_valid_logfile( fn ) if ::File.exist?(fn) if not ::File.file?(fn) raise ArgumentError, "#{fn} is not a regular file" elsif not ::File.writable?(fn) raise ArgumentError, "#{fn} is not writeable" end elsif not ::File.writable?(::File.dirname(fn)) raise ArgumentError, "#{::File.dirname(fn)} is not writable" end true end
Creates a new File Appender that will use the given filename as
the logging destination. If the file does not already exist it will be
created. If the :truncate option is set to true
then the file
will be truncated before writing begins; otherwise, log messages will be
appended to the file.
# File lib/logging/appenders/file.rb, line 49 def initialize( name, opts = {} ) @fn = opts.fetch(:filename, name) raise ArgumentError, 'no filename was given' if @fn.nil? @fn = ::File.expand_path(@fn) self.class.assert_valid_logfile(@fn) @mode = opts.fetch(:truncate, false) ? 'w' : 'a' self.encoding = opts.fetch(:encoding, self.encoding) @mode = "#{@mode}:#{self.encoding}" if self.encoding super(name, ::File.new(@fn, @mode), opts) end
Public Instance Methods
Returns the path to the logfile.
# File lib/logging/appenders/file.rb, line 65 def filename() @fn.dup end
Reopen the connection to the underlying logging destination. If the connection is currently closed then it will be opened. If the connection is currently open then it will be closed and immediately opened.
# File lib/logging/appenders/file.rb, line 71 def reopen @mutex.synchronize { if defined? @io and @io flush @io.close rescue nil end @io = ::File.new(@fn, @mode) } super self end