Class: Logging::Appenders::File
- Inherits:
-
IO
- Object
- Logging::Appender
- IO
- Logging::Appenders::File
- Defined in:
- lib/logging/appenders/file.rb
Overview
This class provides an Appender that can write to a File.
Constant Summary
Constants included from Buffering
Buffering::DEFAULT_BUFFER_SIZE
Instance Attribute Summary collapse
-
#filename ⇒ Object
readonly
Returns the path to the logfile.
Attributes inherited from IO
Attributes included from Buffering
#async, #auto_flushing, #buffer, #flush_period, #write_size
Attributes inherited from Logging::Appender
#encoding, #filters, #layout, #level, #name
Class Method Summary collapse
-
.assert_valid_logfile(fn) ⇒ Object
call-seq: File.assert_valid_logfile( filename ) => true.
Instance Method Summary collapse
-
#initialize(name, opts = {}) ⇒ File
constructor
call-seq: File.new( name, :filename => ‘file’ ) File.new( name, :filename => ‘file’, :truncate => true ) File.new( name, :filename => ‘file’, :layout => layout ).
-
#reopen ⇒ Object
Reopen the connection to the underlying logging destination.
Methods inherited from IO
Methods included from Buffering
#clear!, #close, #flush, #flush_period?, #immediate_at=
Methods inherited from Logging::Appender
#<<, #_to_s, #add_filters, #allow, #append, #close, #closed?, #flush, #off?, #to_s
Constructor Details
#initialize(name, opts = {}) ⇒ File
call-seq:
File.new( name, :filename => 'file' )
File.new( name, :filename => 'file', :truncate => true )
File.new( name, :filename => 'file', :layout => layout )
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.
45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# 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.(@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 |
Instance Attribute Details
#filename ⇒ Object (readonly)
Returns the path to the logfile.
61 62 63 |
# File 'lib/logging/appenders/file.rb', line 61 def filename @filename end |
Class Method Details
.assert_valid_logfile(fn) ⇒ Object
call-seq:
File.assert_valid_logfile( filename ) => true
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.
22 23 24 25 26 27 28 29 30 31 32 33 |
# 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 |
Instance Method Details
#reopen ⇒ Object
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.
66 67 68 69 70 71 72 73 74 75 76 |
# 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 |