[Ruby] Класс лог файла
SoNaR
sonar at scli.ru
Mon Jun 16 16:10:05 MSD 2003
Hello ruby,
Есть некоторый класс, который занимается ведением логов. Класс
представлен ниже:
=begin
= Класс Log
Записывает данные в файл лога, обладает возможностью фиксировать размер лога (в строках),
при этом оставляет только последние n-строк. Сам узнает нужное ему имя лога, хотя можно
задать и произвольное. По умолчанию работает в режиме добавления к имеющемуся логу.
== Константы:
ADD -- данные будут добавляться в конец существующего лога.
NEW -- данные будут писаться в чистый лог.
== Log.new( type = Log::ADD , filename = $0.clone.split('.').first + '.log' )
Констуктор класса
=== Параметры:
type -- тип ведения лога (Log::ADD | Log:: NEW)
filename -- имя файла лога
== log.puts( *str )
Запись данных в лог
=== Параметры:
*str -- данные для записи
== log.clear( nLast4Save = nil )
Очистка лога или обрезание его до нужной длины (в строках).
=== Параметры:
nLast4Save -- количество последних строк которые необходимо оставить в логе, если не
задана, то очистить лог.
== Примечание:
Все методы возвращают текущий объект, что дает возможность комбинирования
команд в одной строке. Например: Log.new.puts('time: ').clear( 100 )
=end
class Log
ADD, NEW = true, false
def initialize( type = Log::ADD , filename = $0.clone.split('.').first + '.log')
@fname, @attr = filename, File::CREAT | File::WRONLY
@attr |= (( type )?(File::APPEND):(File::TRUNC))
self.puts( Time.now.strftime("\nDoW = %w.%W || D = %d/%m/%Y || T = %H:%M") )
end
def puts( *str )
File.open( @fname, @attr ){ |f| f.puts( str ) }
return self
end
def clear( nLast4Save = nil )
attr , flines = File::CREAT | File::WRONLY | File::TRUNC, nil
if nLast4Save == nil then File.open( @fname , attr ).close
else
File.open( @fname ){ |f| flines = f.readlines }
File.open( @fname , attr ){ |f| f.puts( flines.slice(flines.size - nLast4Save , nLast4Save ) ) }
end
return self
end
end
#~ Log.new.puts('other line-1', 'other line-2').clear( 3 )
Как сделать более корректное обрезание лога (метод clear) до
нужного кол-ва строк?
--
Best regards,
SoNaR mailto:sonar at scli.ru
More information about the Ruby
mailing list