Лог4р:Наследование регистратора, конфигурация yaml, альтернативы?

StackOverflow https://stackoverflow.com/questions/2856205

Вопрос

Я новичок в среде 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top