Лог4р:Наследование регистратора, конфигурация yaml, альтернативы?
-
27-09-2019 - |
Вопрос
Я новичок в среде Ruby и искал хорошую среду ведения журналов, чтобы использовать ее в своих приложениях Ruby и Rails.
В своем предыдущем опыте я успешно использовал log4j и log4p (порт Perl) и ожидал такого же уровня удобства использования (и зрелости) от log4r.
Однако я должен сказать, что в фреймворке log4r есть ряд вещей, которые вообще не ясны.
1 Наследование регистратора
Наследование регистраторов, похоже, вообще не управляется!
Если я объявлю средство ведения журнала с именем «myapp», а затем попытаюсь получить имя средства ведения журнала «myapp::engine», поиск завершится ошибкой NameError.
Я ожидаю, что платформа вернет корневой регистратор в соответствии со схемой именования и будет использовать регистратор «myapp».
1 квартал :Конечно, я могу обойти это и самостоятельно управлять именами с помощью метода поиска, однако есть ли более чистый способ сделать это без дополнительного кодирования?
2 конфигурации YAML
Второе, что меня смущает, — это конфигурация yaml.На сайте log4r буквально нет никакой информации об этой системе, в документе есть ссылки на недостающие страницы, поэтому вся информация, которую я могу найти, содержится в каталоге примеров драгоценного камня.
Меня очень смутил тот факт, что конфигурация yaml должна содержать раздел pre_config и что мне нужно определить свои собственные уровни.
Если я удалю секцию pre_config, или заменю все «кастомные» уровни на стандартные (debug, info, alert, Fatal), то пример выдаст следующую ошибку:
log4r/yamlconfigurator.rb:68:in `decode_yaml': Log level must be in 0..7 (ArgumentError)
Таким образом, похоже, нет возможности использовать простой файл, в котором мы объявляем только средства ведения журнала и приложения для платформы.
2 квартал :Я действительно думаю, что что-то пропустил, и это, должно быть, способ предоставить простой файл конфигурации yaml.Есть ли у вас примеры такого использования?
3 Подмена переменных в XML-файле
3 квартал :Система конфигурации Yaml, кажется, предоставляет такую функцию, однако мне не удалось найти аналогичную функцию в файлах XML.Есть идеи ?
4 альтернативы?
Должен сказать, что я очень разочарован уровнем функциональности и зрелостью log4r по сравнению с log4j и другими портами log4j.
Я сталкиваюсь с этой структурой, имея солидный опыт работы с API-интерфейсами журналирования на других языках, и обнаруживаю, что работаю во всех видах, просто чтобы заставить «базовые вещи» работать в «реальном приложении».
Под этим я подразумеваю сложное приложение, состоящее из нескольких драгоценных камней, консольных/скриптовых приложений и веб-интерфейса Rails, где конфигурация должна быть взаимной и где мы интенсивно используем пространства имен и наследование.
Я провел несколько поисков, чтобы найти что-то более подходящее или зрелое, но не нашел ничего похожего.
4 квартал :Ребята, знаете ли вы какие-либо (серьезные) альтернативы платформе log4r, которые можно было бы использовать в приложении корпоративного класса?
Спасибо, что прочитали все это!
Я был бы очень признателен за любые подсказки,
С уважением,
Решение
Я согласен, что документация по log4r довольно скудна.Однако мы его используем, и он нам очень хорошо служит, скажем, в корпоративном приложении.
Мы не используем наследование логгеров, поэтому я не могу вам с этим помочь, а также я не знаю какого-либо альтернативного программного обеспечения, но:
Вот код, который мы используем для чтения конфигурации YAML (на самом деле, я думаю, мы передаем его как уже загруженный в хэш), он также поддерживает подстановку переменных:
require 'log4r'
require 'log4r/yamlconfigurator'
y = "log4r_config:
# define all loggers ...
loggers:
- name : production
level : INFO
trace : 'false'
outputters:
- stdout
# define all outputters (incl. formatters)
outputters:
- type : StdoutOutputter
name : stdout
formatter:
date_pattern: '%Y-%m-%d %H:%M:%S'
pattern : '%d %l: #\{TEST\} %m '
type : PatternFormatter"
h = YAML.load y
log_cfg = YamlConfigurator
log_cfg['TEST'] = 'foobar'
log_cfg.decode_yaml h['log4r_config']
@log = Logger['production']
@log.info 'test'
#=>2010-05-20 14:36:32 INFO: foobar test
Другие советы
Поскольку я все еще «борюсь» с конфигурацией yaml, я немного покопался в коде конфигурации XML и нашел ответ на вопрос: 3 квартал по поводу замены параметров.
На самом деле это работает очень похоже на работу с yaml, все, что вам нужно, это сослаться на параметры с помощью #{VARNAME} в XML-файле:
<filename>#{logdir}/processing.log</filename>
и установить их в конфигураторе перед чтением XML-файла:
Log4r::Configurator['logdir']=log_dir_param
...
Log4r::Configurator.load_xml_file(conf_file_xml)
Кроме того, когда я упомянул, что документация log4r действительно в плохом состоянии (много ошибок 404), я имел в виду документ, доступный на Rubyforge...
В конце концов я посмотрел проект sourceforge и нашел «хороший» (в стиле Ruby) документ на http://log4r.sourceforge.net/rdoc.