class Logging::Appenders::File
Attributes
Returns the path to the logfile.
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 22 def self.assert_valid_logfile( fn ) if ::File.exist?(fn) if !::File.file?(fn) raise ArgumentError, "#{fn} is not a regular file" elsif !::File.writable?(fn) raise ArgumentError, "#{fn} is not writeable" end elsif !::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 45 def initialize( name, opts = {} ) @filename = opts.fetch(:filename, name) raise ArgumentError, 'no filename was given' if @filename.nil? @filename = ::File.expand_path(@filename).freeze self.class.assert_valid_logfile(@filename) self.encoding = opts.fetch(:encoding, self.encoding) io = open_file super(name, io, opts) truncate if opts.fetch(:truncate, false) end
Public Instance Methods
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 66 def reopen @mutex.synchronize { if defined? @io && @io flush @io.close rescue nil end @io = open_file } super self end
Protected Instance Methods
# File lib/logging/appenders/file.rb, line 99 def create_file mode = ::File::WRONLY | ::File::APPEND | ::File::CREAT | ::File::EXCL ::File.open(filename, mode: mode, external_encoding: encoding) rescue Errno::EEXIST open_file end
# File lib/logging/appenders/file.rb, line 92 def open_file mode = ::File::WRONLY | ::File::APPEND ::File.open(filename, mode: mode, external_encoding: encoding) rescue Errno::ENOENT create_file end
# File lib/logging/appenders/file.rb, line 81 def truncate @mutex.synchronize { begin @io.flock(::File::LOCK_EX) @io.truncate(0) ensure @io.flock(::File::LOCK_UN) end } end