Есть ли унифицированная система журнала для Ruby?
-
10-10-2019 - |
Вопрос
Мне было интересно, есть ли действительно единые системы ведения журнала, которые могут поддерживать рельсы а также отсроченные задания, и их относительно легко настроить.
Я хочу иметь возможность войти в тот же сервер/файл для любого контекста выполнения в моем приложении (Rails, отсроченные задания и т. Д.), Даже если я в настоящее время не нахожусь в контексте рельсов.
Люблю регистратор рельсов, но я не могу войти в него, находясь на репортаже. Любые идеи?
Решение
Вы имеете в виду файловый логгер, похожий на Syslog?
Руби есть оба Logger
а также Syslog
.
Logger может выполнять катание на журнале, управляет уровнями тяжести и используется во многих модулях Ruby для ведения журнала. Вы можете определить имя файла для регистрации или использовать Stdout/Stderr или IO -поток.
Документы для системного журнала - это довольно обнаженные кости, но вы можете получить информацию, просматривая его исходный код или прочитав Ruby Syslog Readme.
Другие советы
Я должен регистрировать вещи, которые происходят в драгоценном камне, который работает на репортаже. Чтобы записать, что происходит в базе данных Rails, я делаю следующее:
#in gem:
class Foo
def self.logger
@@logger ||= Logger.new(nil)
end
def self.logger=(logger)
@@logger = logger
end
def self.logger_reset
self.logger = Logger.new(nil)
end
def self.logger_write(obj_id, message, method = :info)
self.logger.send(method, "|%s|%s|" % [obj_id, message])
end
end
#in rails in initializers
Foo.logger = MyRailsLogger.new
#in in rails in lib or in model if it uses ActiveRecord
class MyRailsLogger
def info
...
end
...
end
Таким образом, я могу регистрировать вещи, которые происходят в разных процессах, а также журналы фильтрации object_id экземпляра Foo, поэтому регистрируются только соответствующие данные.