Использование Ruby's Logger для получения ошибок приводит к стандартной ошибке, а другие сообщения к файлу / stdout? - PullRequest
4 голосов
/ 10 февраля 2011

Я бы хотел использовать регистратор Руби в приложениях командной строки; это бьет puts и имеет хорошую гибкость для регистрации вещей.

Единственное, что мне хотелось бы, - это иметь возможность, чтобы сообщения об ошибках / фатальных ошибках переходили к стандартной ошибке (как обычно) в дополнение туда, где сконфигурированы сообщения регистратора.

logger = Logger.new(some_file)

logger.debug("This goes to some_file, if debug is set")
logger.info("This goes to some_file, if info is set")
logger.error("This goes to some_file, AND stderr")

Один из способов сделать это - взломать formatter:

logger.formatter = Proc.new do |severity,time,progname,msg|
  message = format_message(severity,time,progname,msg)
  if severity == ERROR
    $stderr.puts message
  end
  message
end

Это кажется хакерским. Другим способом может быть создание Logger, который передает свои вызовы основному реальному регистратору, но перехватывая сообщения об ошибках.

Кто-нибудь делал это, и, может быть, что-то уже делает это?

Ответы [ 2 ]

4 голосов
/ 11 февраля 2011

Кто-нибудь делал это, и, может быть, что-то уже делает это?

Ruby - это круто, гибко, мощно и прочее. Только с помощью этих патчи и возможностей, позволяющих открывать классы и добавлять методы, слишком легко забыть о простом старом наследовании ...

class CopyLogger < Logger
  def error message
    # Print to standard error...
    $stderr.puts message
    # ...*and* to wherever you specified as well
    super message
  end
end

logger = CopyLogger.new(some_file)
# ...

Вы можете добавить дополнительные параметры в конструктор вашего нового класса, такие как желаемая серьезность сообщений и т. Д.

0 голосов
/ 10 февраля 2011

Я обычно tail файл журнала, который нужно отслеживать при разработке, и put пользовательских, удобных сообщений для масс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...