Спасибо за создание примера проекта. Это помогло. Вы заметили, что метод logger
, который вы определили в своем репо, отличается от метода logger
, который вы определили в своем вопросе?
Из вашего вопроса:
def logger(message)
logger = Logger.new File.new('example.log', 'w')
logger.info message
end
Из вашего repo:
def logger
logger = Logger.new File.new('example.log', 'w')
logger.level = Logger::INFO
end
Предполагая, что вы хотели использовать определение метода из своего репо (поскольку метод из вашего вопроса генерирует ArgumentError: wrong number of arguments (given 0, expected 1)
), проблема в том, что последняя строка метода:
logger.level = Logger::INFO
Этот вызов возвращает 1
, и поскольку последняя строка в методе становится возвращаемым значением метода по умолчанию.
Вы, вероятно, намеревались вернуть объект logger
, подобный этому :
def logger
logger = Logger.new File.new('example.log', 'w')
logger.level = Logger::INFO
logger
end
Это вернет что-то вроде этого:
=> #<Logger:0x00007ffe0a32b300
@default_formatter=#<Logger::Formatter:0x00007ffe0a32a888 @datetime_format=nil>,
@formatter=nil,
@level=1,
@logdev=
#<Logger::LogDevice:0x00007ffe0a32a130
@dev=#<File:example.log>,
@filename=nil,
@mon_count=0,
@mon_mutex=#<Thread::Mutex:0x00007ffe0a329b90>,
@mon_mutex_owner_object_id=70364534755480,
@mon_owner=nil,
@shift_age=nil,
@shift_period_suffix=nil,
@shift_size=nil>,
@progname=nil>
Он также будет успешно записывать информацию в example.log
.
Все сказанное, вероятно, будет не работает так, как вы ожидаете: каждый вызов logger
повторно инициализирует объект, вызывая Logger.new File.new('example.log', 'w')
, а вызов File.new
в режиме w
перезапишет любой существующий файл. Следовательно, двойной вызов logger
означает, что вы напишите example.log
, а затем перезапишите его содержимое. Подробнее о IO Open Modes вы можете прочитать в Ruby документах. Поэтому первое, что вы захотите сделать, это исправить свой режим открытия.
Следующее, что вы захотите сделать, - это найти способ запомнить это значение, чтобы оно не переинициализировалось снова и снова , Это выходит за рамки вашего вопроса и этого ответа, и учитывая несоответствие между вашим вопросом и вашим репо, я бы предпочел не пытаться исправить то, что вы явно не описали в своем первоначальном вопросе. Удачи!